已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于强化学习的字符级注意力字数估计系统-洞察及研究
- 2025年新型酒店管理系统开发可行性研究报告
- 2025年情感陪伴AI助手项目可行性研究报告
- 2025四川成都市城市建设和自然资源档案馆招聘编外人员3人笔试考试备考试题及答案解析
- 高中合作办校协议书
- 2025安徽省能源集团有限公司中层副职管理人员社会招聘2人笔试考试备考题库及答案解析
- 高校传媒就业协议书
- 高校毕业见习协议书
- 高端住宅退租协议书
- 高脚架出租合同范本
- 基层医疗机构医疗质量精细化管理策略
- (安徽省十联考)合肥一中2026届高三12月份教学质量测生物试卷(含答案)
- 2025年广西公需科目答案2卷(含答案)
- (更新版)国家开放大学电大本科《合同法》形考任务2及任务3试题答案
- DB11-T 2493-2025 餐饮服务单位使用丙类液体燃料消防安全管理规范
- 2025年生态环境执法大练兵比武竞赛理论考试题库(含答案)
- GB/T 19405.3-2025表面安装技术第3部分:通孔回流焊用元器件规范的标准方法
- 静脉窦血栓的影像诊断课件
- 《干部履历表》(1999版电子版)
- 说明书-prsPRS-7177电能质量监测装置
- 中医护理学基础知识习题集
评论
0/150
提交评论