在使用Flex前,先简单介绍一下词法分析(lexical analysis) 和 语法分析(syntax analysis) 的概念
- 词法分析(lexical analysis):把输入分割成一个个有意义的词块,称为记号(token)
- 语法分析(syntax analysis):确定通过语法解析出来的token是否如何关联的。
例如看一下如下C代码片段:
alpha = beta + gamm;
词法分析把这段代码分解为tokens: alpha、=、beta、+、gamma、; 接着语法分析器确定了beta+gamma是个表达式,而这个表达式被赋值给alpha.
Flex就是专门用来做lexical analysis,Bison 用来做syntax analysis. 今天主要介绍Flex的简单使用
来个Flex词法分析的栗子:
在类Unix系统中,自带一个字数统计程序wc,这个程序可以读入文件,然后统计出该文件的行数,单词数,字符数.
Flex 用仅仅用十几行便可以完成这个wc程序
/**字数统计wc-l.l**/
%{
int chars = 0;
int words =