- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 2.4.4 由DFA构造词法分析器 1 表驱动型的词法分析器 其中,需要: 1. 有适当的数据结构存放DFA; 2.修改算法2.1,适应实际输入: 识别整个文件,而不是一个记号; 满足最长匹配原则。 对于输入序列: result := a + b 正确的识别:id := id + id 错误的识别: 1. 仅识别一个: id (result) 2. 不满足最长匹配:id id ...(r或re或res ... ) * 2 直接编码的词法分析器 在表驱动的词法分析器中,DFA是被动的,需要一个驱动器来模拟DFA的行为,以实现对输入序列的分析。 直接编码的词法分析器,将DFA和DFA识别输入序列的过程合并在一起,直接用程序代码模拟DFA识别输入序列的过程。 问题: 如何用程序模拟DFA识别输入序列的过程?即如何用程序模拟DFA的状态和它的状态转移? 1. 状态和状态转移与语句的对应关系 ① 初态→程序的开始; ② 终态→程序的结束(不同终态return不同记号); ③ 状态转移→分情况或者条件语句(case/if); ④ 环→循环语句(loop); ⑤ return满足最长匹配原则。 * 2 直接编码的词法分析器(续1) 2. 识别(a|b)*abb的程序框架 void main(){ char buf[]=abba#, *ptr=buf; while (*ptr!=# ){ l0: while (*ptr==b) ptr++; // state 0 switch(*ptr) { case a: ptr++; l1: while (*ptr==a) ptr++; // state 1 switch (*ptr) { case b: ptr++; switch (*ptr) // state 2 { case a: ptr++; goto l1; case b: ptr++; switch (*ptr) // state3 { case a: ptr++; goto l1; case b: ptr++; goto l0; case #: coutyes; return; default: goto le; } default: goto le; } default: goto le; } default: goto le; } } le: cout no endl; } // 看实例运行 * 3 两类分析器的比较 表驱动 直接编码 分析器的速度 慢 快 程序与模式的关系 无关 有关 分析器的规模 较大 较小 适合的编写方法 工具生成 手工编写 2.4.5 词法分析器生成器简介 1 构造词法分析器的全过程均有算法: 正规式-NFA-DFA-最小化DFA-词法分析器(分析表) 2 LEX的基本结构 根据正规式构造的分析表+驱动器框架(不变的) 3 利用LEX构造词法分析器的关键 ① 用LEX提供的正规式集合设计记号的模式; ② 用LEX提供的语义支持识别记号或指出输入中的错误。 * 2.5 本章小结 词法分析的两个重要环节:规定所有合法输入+识别合法输入 重要内容: 1 记号、模式与单词 2 记号的说明:模式的形式化描述-正规式 3 记号的识别:有限自动机 NFA:与正规式有对应关系,易于构造,状态数少; DFA:确定性便于记号识别,不易构造,状态数可能多; 记号识别的方法: 模拟DFA: 模拟NFA(特殊情况下):需要动态计算状态子集。 * 2.5 本章小结(续) 4 从正规式到词法分析器(等价变换的过程) 正规式描述模式 由正规式构造NFA NFA的确定化(子集法:smove, ε-闭包) DFA的最小化(可区分概念) 词法分析器:表驱动(自动生成)与直接编码(手工编写) 第二章 结束 * 算法2.4 求ε-闭包 输入 状态
文档评论(0)