语法分析自下而上分析.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理 5.3.4 规范LR分析表的构造 我们需要重新定义项目,使得每个项目都附带有k个终结符。每个项目的一般形式是[A→?·?, a1a2…ak] ,这样的一个项目称为一个LR(k)项目。项目中的 a1a2…ak 称为它的向前搜索符串(或展望串)。 向前搜索符串仅对归约项目[A→?·,a1a2…ak]有意义。对于任何移进或待约项目[A→?·?, a1a2…ak], ???,搜索符串 a1a2…ak 没有作用。 编译原理 归约项目[A→?·, a1a2…ak]意味着:当它所属的状态呈现在栈顶且后续的k个输入符号为 a1a2…ak 时,才可以把栈顶上的?归约为A。 我们只对k?1的情形感兴趣,向前搜索(展望)一个符号就多半可以确定“移进”或“归约”。 形式上我们说一个LR(1)项目[A→?·?, a]对于活前缀?是有效的,如果存在规范推导 其中,1) ?=??;2) a是?的 第一个符号,或者a为#而?为?。 编译原理 为构造有效的LR(1)项目集族我们需要两个函数CLOSURE和GO。 编译原理 [A→?·B?, a]对活前缀?=??是有效的,则对于每个形如B??的产生式, 对任何b?FIRST(?a),[B→·?, b]对?也是有效的。 证明:若项目[A→?·B?, a]对?=??有效, 则有规范推导 编译原理 项目集I 的闭包CLOSURE(I)构造方法: 1. I的任何项目都属于CLOSURE(I)。 2. 若项目[A→?·B?, a]属于CLOSURE(I),B→? 是一个产生式,那么,对于FIRST(?a) 中的每个终结符b,如果[B→·?, b]原来不在CLOSURE(I)中,则把它加进去。 3. 重复执行步骤2,直至CLOSURE(I)不再增大为止。 编译原理 令I是一个项目集,X是一个文法符号,函数GO(I,X)定义为: GO(I,X)=CLOSURE(J) 其中 J={任何形如[A→?X·?, a]的项目 | [A→?·X?, a]?I} 编译原理 文法G?的LR(1)项目集族C的构造算法: BEGIN C:={CLOSURE({[S?→·S,#]})}; REPEAT FOR C中每个项目集I和G?的每个符号X DO IF GO(I,X)非空且不属于C,THEN 把GO(I,X)加入C中 UNTIL C不再增大 END 编译原理 构造LR(1)分析表的算法。 令每个Ik的下标k为分析表的状态,令含有[S?→·S, #]的Ik的k为分析器的初态。 编译原理 动作ACTION和状态转换GOTO构造如下: 1. 若项目[A→?·a?, b]属于Ik且GO(Ik, a)=Ij, a为终结符,则置ACTION[k, a]为 “sj”。 2. 若项目[A→?·,a]属于Ik,则置ACTION[k, a]为 “rj”;其中假定A→?为文法G?的第j个产生式。 3. 若项目[S?→S·, #]属于Ik,则置ACTION[k, #]为 “acc”。 4. 若GO(Ik,A)=Ij,则置GOTO[k, A]=j。 5. 分析表中凡不能用规则1至4填入信息的空白栏均填上“出错标志”。 编译原理 按上述算法构造的分析表,若不存在多重定义的入口(即,动作冲突)的情形,则称它是文法G的一张规范的LR(1)分析表。 使用这种分析表的分析器叫做一个规范的LR分析器。 具有规范的LR(1)分析表的文法称为一个LR(1)文法。 LR(1)状态比SLR多, LR(0)?SLR ? LR(1) ?无二义文法 编译原理 例5.13 (5.10)的拓广文法G( S?) (0) S?→S (1) S→BB (2) B→aB (3) B→b 编译原理 LR(1)的项目集C和函数GO I0: S’??S, # S??BB, # B??aB, a/b B? ?b, a/b S I1: S’?S ?, # B I2: S?B ? B, # B??aB, # B? ?b, # a I3: B?a?B, a/b B??aB, a/b B? ?b, a/b b I4: B? b ?, a/b B I5: S?BB?, # a I6: B?a?B, # B??aB, # B? ?b, # b I7: B? b ?, # B I8: B? aB?, a/b a b a I9: B? aB?, # B b I0: S’??S, # S??BB, # B??aB, a B??aB, b B? ?b, a

文档评论(0)

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

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

1亿VIP精品文档

相关文档