编译原理实践及应用第4章3LR分析方法.pptVIP

编译原理实践及应用第4章3LR分析方法.ppt

  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文档。上传文档
查看更多
第四章(3) LR分析方法 LR分析概述 LR分析法:L——从左向右扫描输入串,R——构造最右推导的逆过程 大多数用上下文无关文法描述的高级语言的语法成分可以用LR分析器来识别。 LR分析:采用移进-归约分析,严格的规范归约。 LR分析根据当前分析栈中的符号串和向右顺序查看输入串的K(K≥0)个符号就可以唯一确定分析的动作是移进还是归约。 向前查看0个符号,就是LR(0)分析方法,向前查看1个符号,就是LR(1)方法。 LR分析的优缺点 优点: 比其他“移进-归约”方法使用广泛,识别率高 能用LL(1)分析法分析的所有文法都能使用LR方法来进行分析。 LR分析法在扫描输入串时就能发现其中的任何错误,并能准确地指出出错位置。 缺点: 手工构造分析表工作量太大。必须使用自动生成器。 自底向上分析法的关键问题是如何确定句柄。LR分析法与算符优先方法一样,LR方法也是通过求句柄逐步归约来进行语法分析。 在算符优先分析中,通过算符的优先关系得到句柄——“最左素短语”,LR方法中句柄是通过识别活前缀而求得。 根据Sm和ai查action表, action[Sm, ai]有4种情况: LR文法:对一个文法,如果能够构造一个分析表,且它的每个入口均是唯一的 如何构造LR分析表? 练 习 求文法:S ?aS | bS |a 的LR(0)项目集 写出文法的所有项目,每个项目是一个状态 规定项目1为NFA的唯一初态 若状态i和状态j出自同一产生式,而且状态j的圆点只落后于状态i一个位置: 若i的圆点后是a,从i到j画一条弧,标记为a 若i的圆点后是A,则连两种弧:(1)从状态i画ε弧到所有的A→·β的状态。(2)从状态i到j画弧,标记为A 归约项目表示结束状态,用双圈表示 例:求文法对应的NFA S ?E E ?aA | bB A ?cA | d B ?cB | d 2)画出NFA 5、LR(0)项目集规范族的构造: LR(0)项目集规范族的定义:构成识别一个文法活前缀的DFA的项目集的全体 构造方法有两种: 1)先构造NFA,使用第三章的子集法将NFA确定化 2) 直接使用闭包和状态转换函数进行计算 1)使用第三章的子集法将NFA确定化,得到一个识别该文法的确定的有穷自动机,其每个状态是项目集 一个项目集I的闭包Closure(I)的计算: (1) I中的任何项目都?Closure(I) (2) 若A ? ?·B??Closure(I), 且B ? VN ,则对任何关于B的产生式: B ? · r ?Closure(I),r为任意符号串 (3) 重复(2)直到Closure(I)不再增加为止。 例:对于文法5.7有下列项目: 1. S ?·E 2. S ?E · 3. E ?·aA 4. E ?a·A 5. E ?aA· 6. A ? · cA 7. A ?c · A 8. A ?cA · 9. A ?·d 10. A ? d· 11. E ?·bB 12. E ? b·B 13. E ? bB· 14. B ?·cB 15. B ?c·B 16. B ?cB · 17. B ?·d 18. B ? d· 状态转换函数GO(I,X)的计算: GO(I,X) = Closure(J) I是一个项目集,X是一个文法符号 其中J = {任何形如A ? ?X·?的项目| A??·X?? I} GO函数实际就是检查I中的每一个后继符号为X的项目,将这个圆点向后移动一个位置,得到项目集J,再对项目集J求闭包。 例:对于上面的例题文法5.7有下列项目 1. S ?·E 2. S ?E · 3. E ?·aA 4. E ?a·A 5. E ?aA· 6. A ? · cA 7. A ?c · A 8. A ?cA · 9. A ?·d 10. A ? d· 11. E ?·bB 12. E ? b·B 13. E ? bB· 14. B ?·cB 15. B ?c·B 16. B ?cB · 17. B ?·d 18. B ? d· 1. 拓广文法:在原文法G[S]上增加一个产生式S →S,这是为了得到唯一的接受状态S →S · 2. 设项目集规范族C只包含第一个状态{S→ · S}的闭包,即C = { Closure({S → · S}) } 3. 利用GO函数对C中的每个项目集和每个符号X计算其

文档评论(0)

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

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

版权声明书
用户编号:8134116003000000

1亿VIP精品文档

相关文档