GNU Flex 基础
来源:互联网 发布:新开淘宝店铺没有流量 编辑:程序博客网 时间:2024/06/01 12:39
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]分别表示数字和字母,"+"表示一个或多个。
- GNU Flex 基础
- gnu flex document
- Flex 基础
- Flex 基础
- flex基础
- Flex基础
- flex 基础
- Flex & GNU Bison 简单四则混合运算
- GNU Flex与Bison结合使用
- GNU Flex与Bison结合使用
- Flex基础-----之Flex数据模型
- [flex module]Flex Module基础
- GNU flex unistd.h在VC下的编译问题
- flex基础(1)
- flex基础(2)
- flex基础(3)
- Flex 101: RPC基础
- Flex基础控件--Button
- QT MSVC 2008 编译mysq
- Need custom data field in mysql
- javascript面向对象教程
- 算法:Solutions for the Maximum Subsequence Sum Problem
- poj2234 Matches Game
- GNU Flex 基础
- GRUB Customizer配置Ubuntu开机菜单
- IP地址的三种表示格式及在Socket编程中的应用
- jquery的插件机制以及应用
- 关于网页编辑器
- sql 数据插入, 数据为 null
- poj 2524 Ubiquitous Religions
- 报表的学习
- JS一些需要注意的地方