清华大学-编译原理LR分析幻灯片.ppt

  1. 1、本文档共58页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LR(0) 项目集的闭包CLOSURE 若当前处于A – X?YZ刻划的情况,期望移进 First(Y)中的某些符号,假如有产生式 Y – u | w . 那么Y – ?u和Y – ?w这两个项目便是刻划期望移进 First(Y)中的某些符号的情况. A – X?YZ Y – ?u Y – ?w 这三个项目对应移进归约分析的同一个状态,这三个项目构成一个配置集, 对应每个配置集,分析表将有一个状态. LR(0)项目集规范族 计算LR(0)项目集规范族 C={I0 ,I1 , ... In } Procedure itemsets(G’); Begin C := { CLOSURE ({S’?.S})} Repeat For C 中每一项目集I和每一文法符号x Do if GO(I,x) 非空且不属于C Then 把 GO(I,x) 放入C中 Until C 不再增大 End; 例:文法G: (0)S`→E (1) E→aA (2) E→bB (3) A→cA (4) A→d (5) B→cB (7) B→d LR(0) 项目集规范族(识别G的活前缀的DFA): I0: S`→.E I1: S`→E. I2: E→a.A E→.aA A→.cA E→.bB A→.d I3: E→b.B I4: A→c.A I5: B→.cB A→.cA B→c.B B→.d A →.d B→.cB B→.d I6: I7: I8: E→aA. E→bB. A→cA. I9: B→cB. I10: A→d. I11: B→cB. LR(0)分析表的构造 假定C={I0, I1,……,In},令每个项目集Ik的下标k 为分析器的一个状态,因此,G` 的LR(0)分析表含有状态0,1,……,n。令那个含有项目S`→.S的Ik的下标k为初态。ACTION和GOTO可按如下方法构造: 若项目A→α.aβ属于Ik且GO (Ik, a)= Ij, a为终结符,则置ACTION[k, a]为“把状态j和符号a移进栈”,简记为“sj”; 若项目A→α.属于Ik, 那么,对任何终结符a, 置ACTION[k, a]为“用产生式A→α进行规约”,简记为“rj”;其中,假定A→α为文法G`的第j个产生式; 若项目S`→S.属于Ik, 则置ACTION[k, #]为“接受”,简记为“acc”; 若GO (Ik, A)= Ij, A为非终结符,则置GOTO(k, A)=j; 分析表中凡不能用规则1至4填入信息的空白格均置上“出错标志”。 按上述算法构造的含有ACTION和GOTO两部分的分析表,如果每个入口不含多重定义,则称它为文法G的一张LR(0)表。具有LR(0)表的文法G称为一个LR(0)文法。 LR(0)文法是无二义的。 ACTION GOTO a c b d # E A B 0 S2 S3 1 1 acc 2 S4 S10 6 3 S5

文档评论(0)

带头大哥 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档