- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法分析器生成工具LEX 康慕宁 2000年6月第一版 2001年2月第二版 2003年5月第三版 一、LEX概述 LEX是美国BELL实验室M.Lesk等人用C语言开发的词法分析器自动生成工具,它接受正规式表示的词法描述,生成识别输入语言词法的C语言词法分析器源程序。 LEX以它所规定的格式写成的说明文件为输入(称为LEX源文件,以.l为后缀),经LEX翻译处理后,输出该文件相应的词法分析程序yy.lex.c(lexyy.c)。 该程序中含有一个词法分析总控程序yylex(),但通常不含主函数main(),用户需自行编写主函数main()和调用yylex()进行词法识别的主调函数(可以是main()函数本身)。 LEX源文件 filename.l LEX工具 词法分析程序 yy.lex.c LEX的命令格式及选项 格式:lex [-ctvn -V -Q[y|n]] [files] 选项: -c 指明动作为C语句(缺省设置). -t 输出到stdout 而不是 lex.yy.c(缺省设置); -v 提供一个两行的统计概述 -n 不输出-v的概述 -V 在stderr上输出lex的版本信息. -Q[y|n] y:在输出文件lex.yy.c上打印版本信息. n:不打印(缺省设置). 若files为多个文件,则被视为一个,若files为空,则使用stdin. 有关有限自动机的限制 LEX中缺省地限制了自动机的状态数、位置数、分析树的结点数、转换数、压缩的字符类数、输出数组的大小,用户可根据具体需求修改设置. %p n 位置数为n (default 20000) %n n 状态数为n (4000) %e n 分析树的结点数为n (8000) %a n 转换数为n (16000) %k n 压缩的字符类数为n (20000) %o n 输出数组的大小n (24000) 若用户使用了上述之一进行设置,则-v选项被蕴含地使用,除非用户使用-n选项屏蔽它. 词法分析程序的使用 用户可通过调用函数yylex()使用词法分析程序。每调用yylex()函数一次,yylex()将从输入流中识别一个单词,并返回一个整型值(被识别出的单词之内部码)。 所谓单词的内部码是指词法分析程序在识别出某一类单词时所返回的整型数值(也称为类别码),它由用户自行定义其取值。 例如,用户可定义标识符Id的内部码为300,实型数RealNo的内部码为450等等。一般说来,用户自定义的单词类别码应大于256,而小于256的内部码值可用于字符单词的类别码,用其ASCII码值来表示。如单词+的内部码可定义为‘+’的ASCII码值43。 二、LEX源文件结构 一个LEX源程序由三个部分组成,其格式为: [声明(declaration)] %% 翻译规则 (translation rules) [%% 辅助函数(user defined routines)] 其中,声明和辅助函数部分可缺省(上式中,方括号表示括号内的内容可有可无),而翻译规则部分则是必备的。 1.声明(declaration) LEX的声明又可以分两个部分:C语言部分和辅助定义部分 C语言部分被括在LEX的特殊括号“%{”与“%}”之间,它必须符合C语言规范。这部分内容包括C语言程序的预处理语句(包含的头文件、常量定义)、类型和变量定义、子程序的声明等。其中,常量定义可用于定义单词的内部码。 辅助定义部分的作用是定义一些宏及多重入口,以便翻译规则部分使用。宏定义的格式为: 其中, Di(i=1,2,…,n)是要定义的一组宏 名字, ri (i=1,2,…,n) 是定义在Σ∪{D1, …,Di-1}上的正规式,Σ为词法分析 程序要识别单词相应的字符集。 D1 r1 D2 r2 … … Dn rn 宏的定义与使用 设置宏定义的目的,在于给一些较为复杂的正规式命名,以便尔后在需出现这些正规式的地方,只须写上相应的宏名字即可 例如: digit [0-9] alpha [a-zA-Z] alnum ({alpha}|{digit}) iden {alpha}{alnum}* 其中,用方括号括起来的部分表示一个字符类,[0-9]表示任一数字字符,即有[0-9]=0|1|2|…|9, 同理,[a-zA-Z]=a|b|…|c|A|B|…|Z 注意,在引用已定义的宏时,需用花括号{ }将其括起来。上例中可看出宏iden的定义是建立在宏alpha和alnum上的 声明部分还可定义多重入口,我们将在后面作专门的讨论。 翻译规则部分 翻译规则也称识别规则,它是LEX源文件的核心,它告诉LEX都应识别哪些类
您可能关注的文档
最近下载
- JTG-T-5190-2019农村公路养护技术规范.docx VIP
- 2020 ACLS-PC-SA课前自我测试试题及答案.doc
- 房产勘察与带看.ppt VIP
- 学习小窍门教案 .pdf VIP
- PLA 检测在急性脑梗死诊断中的应用-来源:现代养生(下半月版)(第2019007期)-河北省医疗气功医院.pdf VIP
- 公司法修订背景下禁止财务资助规则的构建与完善.docx VIP
- 农光互补发电项目开发政策梳理.docx
- 城市轨道交通车辆检修(高职)全套教学课件.pptx
- 2024-2025年《国有企业管理人员处分条例》考试题库测试题目竞赛试卷2份(有答案).pdf VIP
- ATV630_650变频器编程手册.pptx VIP
文档评论(0)