网站大量收购闲置独家精品文档,联系QQ:2885784924

第五章自下向上分析语法分析方法(LR)..ppt

  1. 1、本文档共76页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1 1 一、算符优先分析法存在的问题 强调算符之间的优先关系的唯一性,这使得它的适应面比较窄;算法在发现最左素短语的尾时,需要返回来寻找对应的最左素短语头。 二、LR(k)分析法 L :从左到右扫描输入符号, R :最右推导对应的最左归约, k :超前读入k个符号,用以确定归约所用的规则 四、LR分析表 LR分析表包括action[s,a]、goto[s,X]表两部分,LR(0)、SLR(1)、LR(1)、LALR (1)将以不同的原则构造这张分析表。构造表时约定:用sn表示将符号a、状态n压入栈;用rn表示用第n个产生式进行归约。 识别活前缀的有穷自动机 例:G[S]:S→aAcBe[1] A→Ab[2] A→b[3] B→d[4] (S→S[0]) 对句子abbcde,其可归前缀为:ab[3],aAb[2],aAcd[4],aAcBe[1],S[0] 对它们分别构造有穷自动机,然后,通过加入一开始状态X和一些ε弧,将各可归前缀的有穷自动机合并成一个有穷自动机NFA。其中由S[0]得到的终态称为句子识别状态,用*标记。 例: 设文法G[E]的产生式为 G?: (0) E? ? E (4) T?F (1) E?E+T (5) F? (E) (2) E?T (6) F? id (3) T?T*F 1.文法G‘: S’ ? S S ? rD D? D,i D ? i (1)该文法是SLR(1)的吗? (2)若是请构造它的分析表 该二义性文法的LR分析表如表7.17所示: 现用表7.17对表达式的输入串i+i*i#分析过程如表7.18所示: 5.9* 语法分析程序的自动构造工具YACC YACC(Yet Another Compiler -Compiler)是20世纪  70年代由Johnson等人在美国Bell实验室研制开发的一  个基于LALR(1)的语法分析程序的构造工具 YACC接受一个用BNF描述的上下文无关语言的语法规  则,且语法满足LALR(1)文法的要求,据其自动生  成相应的LALR(1)分析表,并与它的驱动程序和分  析栈结合构成一个LALR(1)分析器yyparse YACC仅是一个语法分析器的自动生成器,相应的语义  处理程序还需人工编写  I0 I1 I6 I9 E + T * to I7 F to I3 ( to I4 id to I5 I2 I7 I10 T * F ( to I4 id to I5 I3 F I4 I8 I11 ( E ) + to I6 T to I4 F to I5 I5 id id ( 识别文法G的活前缀的 DFA I1:E′?E? I2: E ?T ? I9: E ?E+T ? E ?E?+T T ?T ? *F T ?T ? *F I={X ?? ?b ?, A ?? ?, B ?? ?} 若{b}?FOLLOW(A) ? FOLLOW(B)=? 则,面对当前读入符号a,状态I的解决方法: 1. 若a=b,则移进。 2. 若a≠b, 且a? FOLLOW(A),则用A?? 进行归约。 3. 若a≠b, 且a? FOLLOW(B),则用B??进行归约。 4. 此外,报错。 这种解决方法是比较简单的,因此称作SLR 分析,由此构造的分析表,称作SLR分析表。 对于表达式文法的例子,FOLLOW集如下: I1:{ E’?E? E?E?+T} I2:{E?T? T ?T ? *F} I9:{E ?E+T ? T ?T ?*F} I1:FOLLOW(E’)∩{+}=Φ I2: FOLLOW(E)∩{*}=Φ I9: FOLLOW(E)∩{*}=Φ ∴可用SLR(1)方法实现 #,),+,* F #,),+,* T #,),+ E # E‘ FOLLOW集 下面给出SLR(1)分析器用表5.5.1的SLR(1)分析表对符 号串i+i*i#进行分析时栈的变化过程如表5.5 例如文法G`为: (0)S`   S (1)S   aA d   (2)S   bAc (3)S    aec (4)S    bed (5)A    e   首先用S`  ·S作为初态集的项目,然后用闭包函数 和转换函数构造识别方法G`的活前缀的有限自动机DFA,如 图7.11所示,可以发现在项目集I5和I7中存在移进和归约冲 突 5.6  LR(1)分析 若[

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档