




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
LEX开发背景 20世纪50年代 开始开发高级语言及其编译器 但此时编译理论不成熟 开发工作复杂而艰苦 chomsky研究的语言分层体系等理论 以及实践经验的积累 使编译器的构造变得相对简单 人们开始研究编译器的自动构造 20世纪70年代开始出现一些编译程序自动生成程序 如 yacc 语法分析程序生成器 lex 词法分析程序生成器 LEX的工作过程 输入文件 l LEX 输出文件Lex yy c 工作 扫描源文件 将源文件中规则部分的正规表达式转换成相应的DFA 并以状态转移矩阵的形式 连同驱动程序yylex 输出到名为lex yy c的文件中 该输出文件即为词法分析器 LEX输入文件格式 definitions 定义部分 rules 规则部分 auxiliaryroutines 辅助程序集 用户程序集部分 由三个部分组成 由位于新一行第1列的 分割 该文件中 信息分为2类 正则表达式信息Lex利用这个信息指导构成它的C输出代码 提供给Lex的真正的C代码Lex会在适当的位置将它插入到输出代码中 定义部分包括 由 分隔符 和 扩起的C代码 正则表达式的名字定义 LEX输入文件组成部分 将数字从10进制转成16进制形式 yytext是Lex赋予并由正则表达式匹配的串的内部名字 include includeintcount 0 digit 0 9 number digit C程序代码 名字定义 规则部分由一串带有C代码的正则表达式组成 形如 P1 action1 P2 action2 Pn actionn Actioni 识别出Pi所描述的单词之后 词法分析器应采取的动作 number intn atoi yytext printf x n if n 9 count Pi 正规式actioni C程序代码 辅助程序集 用户程序集部分由一些C代码组成 规则部分的action所需要的辅助过程 如果要将Lex输出作为独立程序来编译 则这一部分还会有一个主程序 main yylex fprintf stderr numberofreplacements d count return0 LEX的实现 对规则部分的每个正规式Pi 为其构造相应的NFAMi 1 i m 引入一新的初态S0 并用 把S0和每个NFAMi的初态连接起来 得到描述该扫描器的NFAM 利用子集法将M确定化 将DFAM输出 a abb a bb 例 某LEX输入程序 对Pi 构造NFAMi 引入新初态S0 并用 把S0和每个NFAMi的初态连接起来 得到描述该扫描器的NFAM 例 正规式 a abb a bb 利用子集法将M确定化 若有多条规则与被扫描文件中的字符串相匹配 则执行能匹配最长字符串的规则 称为 最长匹配原则 若有多条规则匹配长度相同的字符串 则选择在LEX源文件中排列最前面的规则进行匹配 称为 最先匹配原则 核心算法 二义性问题的解决 例 正规式 a abb a bb 串 aba 可以匹配 a ab 按最长匹配原则 匹配ab integer action a z action 例 设有两规则按下面次序给出 若输入integers 则它将被当成标识符处理 最长匹配原则 integer只能匹配7个字符 而 a z 能匹配8个字符 若输入integer 那么它将被当作关键字处理 最先匹配原则 两条规则都能与之匹配 但关键字先定义 核心算法 C代码的插入 定义部分 和 之间的代码复制到输出程序的前端 规则部分action的代码段插入到词法分析程序yylex的恰当位置 并在与对应的正则表达式匹配时执行它 辅助程序集部分复制到输出程序的末尾 例 将数字从10进制转成16进制形式 yytext是Lex赋予并由正则表达式匹配的串的内部名字 include includeintcount 0 digit 0 9 number digit number intn atoi yytext printf x n if n 9 count main yylex fprintf stderr numberofreplacements d count return0 例 某语言TinyC的lex输入源文件 File tiny lLexspecificationforTINY CompilerConstruction PrinciplesandPractice KennethC Louden include globals h include util h include scan h lexemeofidentifierorreservedword chartokenString MAXTOKENLEN 1 digit 0 9 number digit letter a zA Z identifier letter newline nwhitespace t 定义部分 returnLPAREN returnRPAREN returnSEMI number returnNUM identifier returnID newline lineno whitespace skipwhitespace charc do c input if c EOF break if c n lineno while c returnERROR if returnIF then returnTHEN else returnELSE end returnEND repeat returnREPEAT until returnUNTIL read returnREAD write returnWRITE returnASSIGN returnEQ returnLT returnPLUS returnMINUS returnTIMES returnOVER 规则部分 TokenTypegetToken void staticintfirstTime TRUE TokenTypecurrentToken if firstTime firstTime FALSE lineno yyin source yyout listing currentToken yylex strncpy tokenString yytext MAXTOKENLEN if TraceScan fprintf listing t d lineno printToken currentToken tokenString returncurrentToken 辅助程序部分 综合评价 优点 非常优秀的扫描程序生成器 可移植性好 缺点 由于考虑到C代码的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 岳阳林业局消防知识培训课件
- 年产9.2万吨环保型增塑剂项目可行性研究报告
- 奔驰SA知识技能培训课件
- 二零二五年度广告效果评估与分析合同
- 二零二五年度服装厂员工劳动合同标准范本
- 2025版国际工程承包合同规范文本
- 二零二五年度文化沙龙租赁合同转让与活动策划执行协议
- 二零二五年度电子商务平台供应商采购协议
- 二零二五年度文化旅游区场地承包经营协议书
- 二零二五年度仓储转租及仓储设备维护服务合同
- 工作交接表模板
- 佛吉亚卓越体系知识手册
- 3.2 歌曲《牧童之歌》课件(9张)
- 可穿戴设备可靠性优化技术
- 小升初分班考必刷题(试题)-2023-2024学年六年级下册数学人教版
- 数据治理与数据中台建设方案
- NBT 33018-2015 电动汽车充换电设施供电系统技术规范
- 《科技英语翻译方法》课件
- DL-T5455-2012火力发电厂热工电源及气源系统设计技术规程
- 公司自行车管理制度
- TSG-T7001-2023电梯监督检验和定期检验规则宣贯解读
评论
0/150
提交评论