编译原理第七剖析.pptVIP

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
根据NFA到DFA的转换规则得到识别文法G(S?)的活前缀的DFA如下: i a A b {1,2,4} {3,2,4} {6} {5} {3,2,4} {3,2,4} {7} {5} {6} ? ? ? {5} ? ? ? {7} ? ? ? 重新命名后的DFA 1 2 3 4 5 A A b b a a 用LR(0)项目代替DFA状态图 S???A A??aA A??b A?a?A A??aA A?? b A?b? S??A? A?aA? b b A A a a 上述的DFA由五个项目组成, 其中对应状态1、2的项目集仅 含移进项目和待约项目,而对 应状态3、4、5的项目集仅含 规约项目。 定义:识别文法G活前缀的DFA项目集的 全体称为文法G的LR(0)项目集规范族。 在这个规范族中一共有5个项目集合。 LR(0)分析表的构造 LR(0)项目集规范族中的每一个LR(0)项目集,实际上表征了在分析过程中可能出现的一种分析状态 项目集中每一个项目又与另一个特定的分析动作相关。因此,项目集中各项目应是相容的。 定义:若一个文法G的识别活前缀的DFA的每一个项目不存在1、既含移进项目又含规约项目或2、含多个规约项目。则每个项目集的项目相容,称G是一个LR(0)文法。(否则,将产生矛盾,出现不确定性) 对于任何一个LR(0)文法,一定存在LR(0)分析表。分析表可以通过以下方法构造: LR(0)分析表的构造 从识别活前缀的DFA构造LR(0)分析表。 对应分析表中ACTION(M,a)=SN(a是终结符);在DFA中为从状态M出发,经过一条a弧到达状态N; 对应分析表中ACTION(M,a)=rn(a属于终结符);在DFA中,应对应于规约状态,该状态中文法产生式的编号为n; 对分析表中GOTO(M,B)=N(B属于非终结符);在DFA中为从状态M出发,经过一条B弧到达状态N; 对ACTION表中的“acc”即对应DFA中的唯一对应开始符号的终态。 用LR(0)项目代替DFA状态图 S???A A??aA A??b A?a?A A??aA A?? b A?b? S??A? A?aA? b b A A a a 上述的DFA由五个项目组成, 其中对应状态1、2的项目集仅 含移进项目和待约项目,而对 应状态3、4、5的项目集仅含 规约项目。 定义:识别文法G活前缀的DFA项目集的 全体称为文法G的LR(0)项目集规范族。 在这个规范族中一共有5个项目集合。 1 2 3 4 5 根据上述算法得出LR(0)分析表如下 状态 ACTION GOTO a b # A 1 S2 S3 4 2 S2 S3 5 3 r3 r3 r3 4 r2 r2 r2 5 acc 7.3 SLR(1)分析及SLR(1)分析表构造 定义:若一个文法G的识别活前缀的DFA的每一个项目不存在1、既含移进项目又含规约项目或2、含多个规约项目。则每个项目集的项目相容,称G是一个LR(0)文法。 只有当文法G是LR(0)文法,即G的每一项目集均不含冲突项目时,才能构造出不含冲突动作的LR(0)分析表。 但是实际中,不含冲突的情况很少,也就是说LR(0)文法的使用受到一定的限制。 例题:设有文法G,构造LR(0)分析表 G:A?aA|a 文法G拓广为: G?: 1、S??A 2、A?aA 3、A?a LR(0)项目集规范族为: S???A A??aA|?a S??A? A?a?A A??aA|?a A?a? A?aA? I0 I1 I2 I3 A a a A 在第2项目集合中,既有规约项目 又有移进项目. 得LR(0)分析表如下: 状态 Action goto a # A 0 S2 1 1 acc 2 S2、r3 r3 3 3 r2 r2 注意: action(S2,a)产生冲突。显然不符合LR(0)文法的定义,所以,不能构成LR(0)分析表。 然而,发现在整个分析表中冲突很少,只要解决了这些冲突,对上述分析表稍加修改,仍然适用。 所以提出了SLR(1)分析法,即简单LR(1)分析法。 造成冲突的原因在于,I2状态中既有规约项目,又有移进和待约项目。 必须明确采用一种动作,才能避免冲突。 对含有冲突的项目集Ii={B???b?,A???,C???},考察FOLLOW(A),FOLLEOW(C)和{b},若他们两两彼此都不相交,可采用下面方法,对Ii中的各项目对应的分析动作加以区分。即对任何输入符号a: (1)、当a=b时,置ACTION(Ii,a)=“移进” (2)、当a?FOLLOW(A)时,置ACTION(Ii,a)={按产生式A??规约} (3)、当a?FOLLOW(C)时,置ACTION(Ii,a)={按产生式C??规约} (4)、当a不属于上述三种情况是

文档评论(0)

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

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

版权声明书
用户编号:5341224344000002

1亿VIP精品文档

相关文档