第三章词法分析.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章词法分析.ppt

第三章:词法分析 基于DFA的词法分析器(模式匹配器)的优化 复习 第三章:词法分析:基于DFA的模式匹配器的优化 三个算法 直接由正规表达式创建DFA 最小化DFA的状态数 DFA状态转换表的压缩方法 第三章:词法分析:基于DFA的模式匹配器的优化 几个概念 NFA重要状态:有一个标志为非空的出边 子集构造法在确定ε-closure (move(T,a))时只使用了子集T中的重要状态 只有当T是重要的,集合move(T,a)才是非空的 只有字母表上的一个符号出现在正规表达式中时,Thompson子集构造法才创造一个重要状态。 例如:对于(a|b)*abb的每个a和b创建重要状态。 等同子集 重要状态相同 同时包含或不包含NFA的接受状态(接受状态无出边--不重要) 第三章:词法分析:基于DFA的模式匹配器的优化 几个概念 扩展正规表达式:r# r的接受状态变为重要状态 语法树表示 图3-39a 叶节点:基本符号(包括ε) 非ε:唯一的整数表示叶节点的位置/对应符号的位置 内节点:操作符(连接、|、*) 对应NFA 图3-39c 对应DFA: 图3-39b 子集构造法、等同子集 对比图3-29:状态数少一个 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA 原理:绕过NFA的构造而直接构造一个其状态对应于语法树的位置集合的DFA 具体步骤 为(r)#构建一个语法树T 然后遍历语法树T计算nullable、firstpos、lastpos、followpos四个函数 nullable、firstpos、lastpos定义在语法树的节点上,用于计算followpos 最后由followpos构建DFA 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA followpos(i) 给定位置I 满足下列条件的位置j的集合 对于某个输入字符串…cd…,位置i对应着c的出现,位置j对应着d的出现 例3.21:followpos(1)={1,2,3} 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA firstpos、lastpos、nullable firstpos(n):n为根节点的子表达式生成的字符串中第一个符号相匹配的位置集合 n为扩展正规表达式的语法树的任意一个节点,对应一个子表达式 lastpos(n):类似, n为根节点的子表达式生成的字符串中最后一个符号相匹配的位置集合 nullable(n):n是否可空的(n是否允许空字符串) 图3-40:计算nullable和firstpos的规则 lastpos:对调firstpos规则中的c1和c2 图3-41:(a|b)*abb#的语法树中节点的firstpos和lastpos 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA 如何计算followpos(i) 如果n是连接节点,它具有左子节点c1和右子节点c2,并且i是lastpos(c1)的一个位置,则firstpos(c2)的所有位置都在followpos(i)中 如果n是*节点,并且i是lastpos(n)中的一个位置,则firstpos(n)的所有位置都在followpos(i)中 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA 如何计算followpos(i) 如果每一个节点的firstpos和lastpos都计算好了,那么对语法树进行一次深度优先遍历就可以计算每一个位置的followpos 图3-42:followpos函数 图3-43: followpos函数的有向图 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA followpos函数的有向图:正规表达式的无ε转换的NFA 根节点的firstpos中的所有位置作为开始状态 每一个有向边(i,j)用位置j上的符号标志 把与#相关的位置看成是唯一的接受状态 采用子集构造法把followpos图转换成DFA 第三章:词法分析:基于DFA的模式匹配器的优化 扩展正规表达式=〉DFA 算法3.5:从正规表达式r构造DFA 构造扩展的正规表达式(r)#的语法树T,其中#是附加在(r)后面的唯一结束标志 通过对T进行深度优先遍历计算nullable、firstpos、lastpos、followpos四个函数的值 利用图3-44所示的过程构造DFA的状态集,生成DFA的状态转换表。 DFA的状态:位置集 DFA的开始状态:firstpos(root) DFA的接受状态:与结束符#相关的位置的状态 例

文档评论(0)

神话 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5203223011000000

1亿VIP精品文档

相关文档