语法分析SLR1_LR1教学课件.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章:语法分析 SLR(1)方法 LR(1)语法分析 1.LR(0)分析方法的不足 LR(0)方法对文法的要求严格。 LR(0)方法容易出现冲突状态。 1.LR(0)分析方法的不足 1、如果某个状态有如下项目集: { A→? ?, D→? ? d ? },则存在移入-归约冲突 。 可以如下解决: 若当前输入符在A的Follow集中,则应用A →? ?归约; 若当前输入符为d则应移入 。 而对当前输入符为d,d又在A的Follow集中,则无法解决。 1 LR(0)分析方法的不足 如果某个状态有如下项目集: { A →? ?, B →? ?},则存在着归约-归约冲突 。 可以如下解决: 若用A →? ?归约,则当前输入符应在A的Follow集中 若用B →? ?归约,则当前输入符应在B 的Follow集 当前输入符应在A的Follow集中又在B 的Follow集 中,则无法解决。 2.1 SLR(1)分析条件 LRSM0中存在着状态: { A1 →?1?, …, An →?n?, B1→?1 ?a1r1, …, Bm→? m?amrm } 则集合: Follow(A1)、…、Follow(An)、{a1, …, am} 两两相交为空。注: a1, …, am中可以有相同者。 2.2 SLR(1)分析表的构造 假设ISk为LR(0)项目集,则 action矩阵: 若A???a??ISk,且GO(ISk, a)= ISi,a?VT,则action(ISk, a)=Si,表示移入动作。 若A????ISk,则对任意a?VT,a?Follow(A),令action(ISk, a)=Rj,其中产生式A??的编号为j,表示用编号为j的产生式进行归约。 若Z????ISk,且Z为拓广产生式的左部非终极符(文法的开始符),则action(ISk, #)=Accept。 其它情形,则Error(n),表示出错标志,也可不填。 goto矩阵: 若GO(ISk, A)=ISi,A?VN,则goto(ISk, A)=i。 2.3 SLR(1)语法分析表 2.3 SLR(1)语法分析表 [1]M ? T [2]T ? F [3]T ? F*T [4]F ? a Follow(M)={#} Follow(T)={#} Follow(F)={*,#} 2.4 SLR(1)文法限定条件 限定条件 SLR(1)语法分析表单值 LR(0)和SLR(1)分析能力对比 LR(0)只看分析栈的内容,不考虑当前输入符;SLR(1)考虑输入符,用Follow集来解决冲突,因此SLR(1)要比LR(0)分析能力强。 2.5 SLR(1)的分析过程 2.6 SLR(1)问题所在 Z?B1aB2bB3c B?d SLR(1)归约时向前看一个符号,但是不区分语法符号的不同出现。上述文法中,B出现了三次,很显然B1的后继符只能是a,B2 的后继符只能是b,B3的后继符只能是c,而Follow(B)={a,b,c},用SLR(1)就失去了精度。 2.7 几种LR方法的简单对比 LR(0)方法不依赖输入流,直接判定归约,容易出现冲突。 SLR(1)方法简单的把非终极符的Follow集做为可归约的依据,并不精确。 一个非终极符在不同的位置上出现,它所允许的后继符是不同的。LR(1)针对不同产生式上的非终极符,分别定义其后继符集,减少了移入/归约、归约/归约冲突。 3.1 LR(1)基本思想 构造各种LR分析器的任务就是构造其action表和goto表,其他部分基本相同。LR(1)的基本思想是对非终极符的每个不同出现求其后继符,而不是给每个非终极符求其统一的后继符,我们称其为展望符集。 3.2 LR(1)的基本概念 LR(1)项目:[A????, a],即LR(0)项目及一个VT?{#}的展望符组成的二元组。 用IS表示LR(1)项目的集合,简称LR(1)项目集。其中,项Z???的展望符为# IS(X):LR(1)项目集IS对于X的投影 IS(X) ={[A??X??,a]|[A???X?,a]?IS } 3.2 LR(1)的基本概念 CLOSURE(IS)= IS∪{[A???,a]| [B??1?A?2,b]?CLOSURE(IS), A??是产生式,a?First(?2b)} GO:若IS是一个LR(1)项目集,X是一个文法符号,则GO(IS,X)=CLOSURE(IS(X))。 3.3 可归前缀图的构造 Step1.构造初始状态IS0:IS0 = CLOSU

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档