Flex是一个生成词法分析器的工具,它可以利用正则表达式来生成匹配相应字符串的C语言代码,其语法格式基本同Lex相同。
单词的描述称为模式(Lexical Pattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个C语言源程序。
FLEX的输入文件称为LEX源文件,它内含正规表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的扫描自动生成相应的词法分析函数int yylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。也可将int yylex()加入自已的工程文件中使用。
LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,书写时一定注意。
LEX的源文件由三个部份组成,每个部分之间用顶行的“%%”分割,其格式如下:
定义部份
%%
规则部份
%%
用户附加C语言部份
模式宏定义实际是对识别规则中出现的正规式的辅助的影。如语言的字母可定义为:
Letter [a-zA-Z]
数字可以定义为:
digit[0-9]
除宏定义外,定义部分的其余代码必须用符号%{ 和 %} 括起来。另外,flex使用的C语言库文件和外部变量以及部分声明的函数,也应分别置于%{ 和 %} 之内。
写一个简单基本.l文件如下;flextest.l;