编译原理其他.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文档。上传文档
查看更多
编译原理其他

问题可能的解决方式 往后再多看一个符号带来的方法,括号里标为1,这样有SLR(1),LR(1)和LALR(1)等几种解决方法 SLR(1) 很多实用的程序设计语言的文法不能满足LR(0)文法的条件 SLR(1)文法的思想是,对有冲突的项目集(状态),用向前查看一个符号的方法(只对有冲突的状态才这么做)来解决冲突 SLR(1)文法:一个例子 这里先考察下面的文法G?: (0) S?→S (1) S→rD (2) D→D, i (3) D→i G?的LR(0)项目集族 按照前面的方法求LR(0)的项目集族 识别活前缀的DFA 问题 在项目集I3中,存在归约移进项目的冲突 也就是说,所以它不是LR(0)文法 这个问题在下面的LR(0)分析表中也会有相应的表现:存在多重入口 问题 LR(0)分析表存在多重入口 问题的解决:SLR(1) 通过观察可以发现,上述问题可以并不复杂地解决 先求一下FOLLOW(S),为#。这意味着,如果进行归约,下面将要出现的符号仅能是“#”,所以如果出现“,”,一定应该做归约,以此解释,可以打破多重入口困扰 SLR(1)分析表 对前面的表简单改造,不难得到下表 SLR(1)文法 如果对一个文法的LR(0)项目集规范族的某些项目集或LR(0)分析表中所含有的动作冲突都能用上述方法解决,则称这个文法是SLR(1)文法 使用SLR(1)分析表的分析器称为SLR(1)分析器 SLR(1)分析:小结 假定一个LR(0)规范族中含有如下的项目集或状态I={X?→??b?, A→??, B→??} 显然,它同时存在移进-归约冲突和归约-归约冲突 这时,如果下面几个式子成立,则可以简单地解决冲突问题: FOLLOW(A)?FOLLOW(B)=? FOLLOW(A)?{b}=? FOLLOW(B)?{b}=? SLR(1)分析 解决问题的方式: 若输入符号a=b,则移进 若a?FOLLOW(A),则利用产生式A→?进行归约 若a?FOLLOW(B),则利用产生式B→?进行归约 此外,报错 SLR(1)分析的实例 设有文法G?[S?]: (0) S?→E (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→(E) (6) F→i SLR(1)分析的实例 该文法的LR(0)项目集规范族: SLR(0)分析的实例 该文法的项目集规范族 可构造识别表达式文法活前缀的DFA如下 SLR分析的实例 在I1中, S?→E? E→E?+T 存在移进归约冲突。由于FOLLOW(S?)={#},而S?→E?是唯一的接受项目,所以当且遇到句子结束符号“#”时才被接受。又因为{#}?{+}=?,因此该冲突可以解决 在I2中, E→T? T→T?*F 同样存在移进归约冲突。由于FOLLOW(E)= {+, ), #},与{*}的交为空,所以按照SLR(1)方法,可以解决冲突 SLR(1)分析的问题 对前例的I2项目,{E→T?, T→T?*F},若栈顶状态为2,栈中符号为#T,当前输入符号为“)”。由于“)”属于FOLLOW(E),这时按SLR(1)方法应用产生式E→T进行归约,栈顶符号变为#E,再加上当前符号“)”,得到栈顶为#E),它不是表达式文法规范句型的活前缀,从而出现无效归约 SLR分析的问题 设有文法G?[S?]: (0) S?→S (1) S→aAd (2) S→bAc (3) S→aec (4) S→bed (5) A→e 可得到如下识别活前缀的DFA 不难看出,在上面的I5和I7中,都分别存在移进和归约冲突 如果试图利用SLR(1)方法解决,于是求出FOLLOW(A)={c, d},但是,

文档评论(0)

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

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

1亿VIP精品文档

相关文档