Flex词法分析工具.pdf

Flex词法分析工具.pdf

ID:55121605

大小:177.03 KB

页数:6页

时间:2020-05-10

Flex词法分析工具.pdf_第1页
Flex词法分析工具.pdf_第2页
Flex词法分析工具.pdf_第3页
Flex词法分析工具.pdf_第4页
Flex词法分析工具.pdf_第5页
资源描述:

《Flex词法分析工具.pdf》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、词法分析器生成工具flex1.FLEX简介单词的描述称为模式(LexicalPattern),模式一般用正规表达式进行精确描述。FLEX通过读取一个有规定格式的文本文件,输出一个如下所示的C语言源程序。+------------++------------++----------------+

2、输入文件*.l

3、------>

4、flex工具

5、------>

6、输出文件lex.yy.c

7、+------------++------------++----------------+FLEX的输入文件称为LEX源文件,它内含正规

8、表达式和对相应模式处理的C语言代码。LEX源文件的扩展名习惯上用.l表示。FLEX通过对源文件的扫描自动生成相应的词法分析函数intyylex(),并将之输出到名规定为lex.yy.c的文件中。实用时,可将其改名为lexyy.c。该文件即为LEX的输出文件或输出的词法分析器。也可将intyylex()加入自已的工程文件中使用。2.LEX源文件的格式LEX对源文件的格式要求非常严格,比如若将要求顶行书写的语句变成非顶行书写就会产生致命错误。而LEX本身的查错能力很弱,所以书写时一定要注意。LEX的源文件由三个部份组成,

9、每个部分之间用顶行的“%%”分割,其格式如下:定义部份%%规则部份%%用户附加C语言部份下面以统计单词出现的次数的源程序count.l做说明,count.l的内容如下:%{#include"stdio.h"#include"stdlib.h"intnum_num=0,num_id=0;%}INTEGER[-+]?[1-9][0-9]*ID[a-zA-Z][a-zA-Z_0-9]*SPACE[/n/t]%%{INTEGER}{num_num++;printf("(num=%d)/n",atoi(yytext));/*打

10、印数字值*//*数字数加一*/}{ID}{num_id++;printf("(id=%s)/n",yytext);}{SPACE}

11、.{/*什么也不做,滤掉白字符和其它字符*/}%%intmain(){yylex();printf("num=%d,id=%d/n",num_num,num_id);return0;}intyywrap()//此函数必须由用户提供{return1;}2.1定义部分:%{#include"stdio.h"#include"stdlib.h"intnum_num=0,num_id=0;%}I

12、NTEGER[-+]?[1-9][0-9]*ID[a-zA-Z][a-zA-Z_0-9]*SPACE[/n/t]定义部份由C语言代码、模式的宏定义、条件模式的开始条件说明三部份组成。其中,C代码部份由顶行的%{和}%引入,LEX扫描源文件时将%{和}%之间的部分原封不动的拷贝到输出文件lex.yy.c中。上面的定义部分没有条件模式的开始条件说明部分,只有C语言代码、模式的宏定义。模式宏定义是一个正则表达式的定义,如上面所示的INTEGER[-+]?[1-9][0-9]*正则表达式的匹配如下:模式解释x配置单个字母x.

13、匹配除换行符’/n’之外的任意字符[xyz]匹配x、y或z[abj-oz]匹配a、b、z及j至o之间的字母[^A-Z]除大写字母A-Z之外的其它字符[^A-Z/n]除大写字母A-Z和换行符之外的其它字符r*匹配0个或多个rr+匹配1个或多个rr?匹配0个或1个r2.2规则部分规则部份是LEX源文件的核心部份,它包括一组模式和在生成分析器识别相应模式后对相应模式进行处理的C语言动作(Action)。格式如下C语言代码模式1动作1模式2

14、模式3动作3同定义部分一样,C语言代码必须出现在第一个模式之前,包括在%{和}%之中

15、,且%{必须顶行书写。%{和}%之间的代码部份可用来定义yylex()用到的局部变量。模式必须顶行书写。模式可为正规式或用{}括起且在定义部份定义过的宏名。动作为用{}括起的C代码。且开始括号{与模式之间用白字符隔开,且须和模式在同一行上。注意,在模式后加一

16、表示模式2和3采用同一动作3.

17、和模式2以白字符隔开。2.3用户附加C语言部份LEX对此部份不作任何处理,仅仅将之直接拷贝到输出文件lex.yy.c的尾部。在些部份,可定义对模式进行处理的C语言函数、主函数和yylex要调用的函数yywrap()等。如果用户在其

18、它C模块中提供这些函数,用户代码部份可以省略。3.生成源代码和编译运行flexcount.lgcc-glex.yy.c-ocount运行:osdba@osdba-laptop:~/tmp$./count<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。