编译原理-第4章+语法分析文档.ppt

  1. 1、本文档共236页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理-第4章语法分析文档

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 为了节省空间,我们将文法G[E]分析动作表(ACTION)和状态转换表(GOTO)关于终结符的各列对应地进行合并,合并之后分析表如下表所示。(关于表的构造方法以后再讨论) * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 其分析过程如下: S ?AB ?bBB ?bSbB ? bABbB ? bbBBbB(得第二个字符与输入串不匹配) S ?AB ?bBB ?bSbB ? bABbB ? bAaBbB (只能用A ∷=Aa推倒,又遇A,出现了死循环) 由于文法规则中有左递归A ∷=Aa,所以无法分析下去 * * * * * * * * * * * * * * * * * * * * * 即对文法中的任意一个非终结符号,其规则右部有多个选择时,若由各个选择所推出的终结符号串首符号集合要两两不相交。这样,就可能根据当时读进的符号是属于哪个选择的FIRST(αi),来唯一地确定应该选用哪个选择来匹配输入串。 * * * * * * * ④ 用SLR方法解决“移进---归约”冲突。 在十二个项目集中,I1、I2和I9都含有“移进---归约”冲突,其解决办法是: 对于项目集I1={S′∷=E·,E ∷=E·+T},由于集合 FOLLOW(S′)={#}与集合{+}不相交,所以当状态为1时,面临着输入符号为+时便移进,而面临着输入符号为#时,则按规则S′∷=E归约。 对于项目集I2={E∷=T·,T∷=T·*F},由于集合 FOLLOW(E)={+,),#}与集合{*}不相交, 因此状态2面临输入符号为*时移进,而面临输入符号为+或)或#时,按规则E∷=T归约。 对于项目集I9={E ∷=E+T·,T ∷=T·*F},同样由于FOLLOW(E)={+,),#}与集合{*}不相交,因此状态9面临着输入符号为*时移进,面临着输入符号为+或)或# 时,按规则E∷=E+T归约。 * ⑤ 根据SLR(1)分析表构造方法构造SLR(1)分析表. 对于冲突项目的状态,如状态1,2,9,按用SLR方法解决构造SLR(1)分析表. 对于其他状态项目集,只有一个归约项目,也是按照修改后构造SLR(1)分析表方法进行构造 状态 ACTION(动作) GOTO(状态转换) i + * ( ) # E T F 0 S5 S4 1 2 3 1 S6 acc 2 r2 S7 r2 r2 3 r4 r4 r4 r4 4 S5 S4 8 2 3 5 r6 r6 r6 r6 6 S5 S4 9 3 7 S5 S4 10 8 S6 S11 9 r1 S7 r1 r1 10 r3 r3 r3 r3 11 r5 r5 r5 r5 * §4.3 自底向上语法分析 五、二义性文法的应用 1.问题的提出 从前面讨论可知,各种LR文法都是非二义性文法,如果对二义性文法构造其LR分析表,必然导致失败。但是某些二义性文法是非常有用的,有些二义性文法描述程序设计语言的结构比较直观,使用方便,例如关于表达式文法和条件语句文法。 例如关于算术表达式文法G[E]为 (1)E∷=E+E (3)E∷=(E) (2)E∷=E*E (4)E∷=i 由于该文法本身没规定+和*优先顺序,所以是二义性文法。 对该文法增加规则 (0)E′∷=E 形成拓广文法,其LR(0)项目集族如下图所示 * 二义文法的LR(0)项目集 I0: E’→ ? E E → ? E+E E → ? E*E E → ?(E) E → ? i I3: E → i ? I1: E’→ E ? E → E ? +E E → E ? *E I2: E →( ?E) E → ? E+E E → ? E*E E → ?(E) E → ? i I6: E →( E ? ) E → E ? +E E → E ? *E I9: E →( E )? I4: E → E+ ? E E → ? E+E E → ? E*E E → ?(E) E → ? i

文档评论(0)

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

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

1亿VIP精品文档

相关文档