研究生院第四章_2_.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * LR(0)文法:每个项目集不存在下述情况: 1。 即含移进项目,又含归约项目 2。 含有多个归约项目 总之,就是不含有任何冲突项目,但是识别的文法非常简单,算术表达式文法都不是LR(0)的 * 在项目分类的意义第二项中:可以只用核心项目标是一个项目集,从而减少存储空间 * 设面临输入符号a, 1) 若a = b, 则移进,对应第一个项目 2) 若a ∈ FOLLOW(A), 则归约,对应第二个项目 3) 若a ∈ FOLLOW(B), 则归约,对应第三个项目 * * * LR分析器(20) SLR分析 规范的LR(0)族:提供了构造SLR分析表的基础 对于LR(0)规范族中的项目集: I = { X→α.bβ, A→α. , B→α. } LR(0)无法区分这三个不冲突的项目,此时要考察FOLLOW(A)和FOLLOW(B)集合 构造算法: C := {closure({[S’→.S]})} repeat for 对C的每个项目集I和每个文法符号X,若 goto(I , X)非空且不在C中 do 把goto(I , X)加入C中 until 没有更多的项目可以加入C LR分析器(21) 例3:拓广的表达式文法: E’→E E→E+T | T T→T*F | F F→(E) | id 对应的LR(0)项目集规范族如下: I0: E’→.E I5: F→id. E →.E+T E →.T I6: E→E+.T T →.T*F T→.T*F T →.F T→.F F →.(E) F→.(E) F →.id F→.id LR分析器(22) I1: E’→E. I7: T→T*.F E →E.+T F→.(E) F→.id I2: E →T. T →T.*F I8: F→(E.) E→E.+T I3: T →F. I9: E→E+T. I4: F →(.E) T→T.*F E →.E+T E →.T I10: T→T*F. T →.T*F T →.F I11: F→(E). F →.(E) F →.id LR分析器(23) LR分析器(24) 如果将这个DFA中的每个状态定为接受状态,而I0定为初态,则这个DFA识别文法的活前缀 对于项目A→β1.β2对活前缀αβ1是有效的,是指存 在推导序列 A→β1.β2对活前缀αβ1有效表明当αβ1在分析栈顶时 如果β2是ε,则A→β1是句柄,应该用这个产生式归约 如果β2不是ε,则表示句柄还没有完全进栈,要继续移进 同一个活前缀的两个有效项目可能对应了不同的动作,引起了冲突 这种冲突可以通过向前看几个符号解决,也可以通过其它方式解决 LR分析器(25) SLR分析表的构造 输入:拓广文法G’ 输出:G’的SLR分析表函数action和goto 方法:(1)构造C={I0 , I1 , … , In },即G’的LR(0)项目集规范族 (2)状态i从Ii构造,它的动作如下确定: (a) 如果[A→α.aβ]在Ii中,并且δ( Ii , a) = Ij,则置 action(i , a)为sj,含义是把a和状态j移进栈, a必须为终结符 (b) 如果[A→α.]在Ii中,则对FOLLOW(A)中的所有a,置 action(i , a)为rj, j是产生式A→α的编号。含义是按产生 式A→α归约,这里A不是S’ (c) 如果[S’→S.]在Ii中,则置action(i , $)=acc,表示接受 (3)对所有的非终结符A,使用下面的规则构造状态i的转移: 如果δ( Ii , A) = Ij,则goto[i , A]=j (4)不能由规则(2)和(3)定义的条目置为出错 (5)分析器的初始状态是包含[S’→.S]的项目集对应的状态 LR分析器(26) 如果在规则(2)的构造中产生的动作有冲突,则该文法不是SLR(1)文法 由上述算法生成的分析表成为文法G的SLR(1)分析表 每个SLR(1)文法都不是二义的 存在非二义的文法,这个文法不是SLR(1)的 对于在栈顶状态s中的任何项目

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档