GNU Flex 基础
发布时间:2020-12-15 04:22:15 所属栏目:百科 来源:网络整理
导读:Flex是一个用C语言编写的词法(Lexer)分析工具,Bison是语法(Parser)分析工具,他们是LexYacc的GNU代替品。 Flex布局: 定义段 (definitions) ? ?%% ? ?规则段 (rules) ? ?%% ? ?用户代码段 (user code) 一个把字母与数据分割的例子: %{ #includeiostream #i
Flex是一个用C语言编写的词法(Lexer)分析工具,Bison是语法(Parser)分析工具,他们是Lex&Yacc的GNU代替品。 Flex布局:定义段 (definitions) ? ?%% ? ?规则段 (rules) ? ?%% ? ?用户代码段 (user code) 一个把字母与数据分割的例子: %{ #include<iostream> #include<string> extern "C" { int yywrap(); } std::string str; std::string num; %} %% [a-zA-Z]+ { str += yytext; return 1; } [0-9]+ { num += yytext; return 1; } n { return 0; } %% int yywrap() { return 1; } int main() { while( yylex() ); std::cout<<"Number: " << num <<std::endl; std::cout<<"String: " << str <<std::endl; return 0; } 编译:? flex sample.l? g++ lex.yy.c -o run run Input : ? ?? abcdef123ghijklm456n7OPQRST89uvWxyZ0 Output: Number: 1234567890String: abcdefghijklmnOPQRSTuvWxyZ 注意: 1. ?编译像yywrap这样flex的函数需要用C的方式编译,如果不用C++也就是用gcc编译,就不需要extern "C"。 2. ?yywrap必须定义,也可以使用%option noyywrap或g++ -lfl 来避免用户来定义它。 char *yytext 表示匹配到的内容,由flex定义,正则表达式[0-9]和[a-zA-Z]分别表示数字和字母,"+"表示一个或多个。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |