- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1 1 假定项目集I (状态)中有m个移进项目: A1 α 1·a1β1, A2 α 2·a2β2,…, Am α m·amβm,同时含有n个归约项目为: B1 γ1·, B2 γ2·,…, Bn γn·, 只要集合{a1,a2,…,am}和FOLLOW(B1), FOLLOW(B2),…, FOLLOW(Bn),两两交集都 为空,仍可用上述规则解决冲突即考查当前输入符号决定 动作: ①若a∈{a1,a2,…,am},则移进 ②若a∈FOLLOW(Bi),i=1,2,…,n,则用Bi γ i进行归约 ③此外,报错 这种解决冲突动作的办法,称为SLR(1)解决办法,由 F.DeRemer于1971年提出 例如P140中G[E]的项目集规范族中的I2: E T · T T·*F 用SLR(1)解决,因为FOLLOW(E)={#,+,)},而移进项目 “·”后为“*”,当I2面临输入输入符号 +,),#时,应使用产生式E T归约 *时,就移进* 面临其它符号时,则应报错 I1和I9中的冲突都可以按这种方法解决 改进的SLR(1)分析表的构造方法如下: ①若A α·xβ∈Ii且GOTO(Ii,x)=Ij,x ∈VT,则置 ACTION[i,x] =Sj, x ∈VN,则置GOTO[i,x]=j ②若A α·∈Ii,则对 x ∈ (VT∪{#}),且满足 x∈FOLLOW(A)时,置ACTION[i,x]=rj,j为在文法G`中某 产生式A α的序号 ③若S` S·∈Ii,则置ACTION[i,#]=acc ④凡不能用上述方法填入分析表的元素,均置ERROR(空白) 文法G[E]: (0)S` E (1)E E+T (2)E T (3)T T*F (4)T F (5)F (E) (6)F i G[E]的SLR(1)分析表如下: 1 10 9 11 8 7 6 5 4 3 2 1 0 F T E # ) ( * + i GOTO ACTION 1 S5 S7 r4 r4 r4 r4 r3 r3 r3 r3 r6 r6 r6 r6 acc 3 S4 2 S6 2 S4 8 S5 3 9 S4 3 S5 10 S5 S4 S11 S6 r5 r5 r5 r5 S7 r2 r2 r2 r1 r1 r1 根据这种文法构造的SLR分析表不含多重定义时,称这样 的分析表为SLR分析表,能用SLR分析表的分析器称为 SLR分析器,能构造SLR分析表的文法称为SLR文法 为什么要引进LR(1)文法?(P142,P143) 例如文法G`为: (0)S` S (1)S aAd (2)S bAc (3)S aec (4)S bed (5)A e 识别G`的活前缀的有限自动机DFA,如下图所示,可以发 现在I5和I7中存在移进和归约冲突 7.4 LR(1)分析 I5: S ae·c A e· I7: S be·d A e· FOLLOW(A)={c,d} 在I5中,FOLLOW(A)∩{c}={c,d} ∩{c} ≠? 在I7中,FOLLOW(A)∩{d}={c,d} ∩{d} ≠? 因此,I5,I7中冲突不能用SLR(1)方法解决 所以我们引进LR(1)文法法解决 若[A α·Bβ] ∈I时 则[B ·γ]∈I(B γ为一产生式) 把FIRST( β)作为用产生式B γ归约的搜索符, 称为向前搜索符,作为归约时查看的符号集合用以代替 SLR(1)分析中的FOLLOW集,把此搜索符号的集合 也放在相应项目的后面,这种处理方法即为LR(1)方法 [A` ·A,#] [A α·Bβ,a] [B ·γ,b] ,其中b ∈FIRST(βa) LR(1)组成:一部分和LR(0)项目相同(称它为心),另一 部分为向前搜索符集合 一.LR(1)项目集族的构造 (1)构造LR(1)项目集的闭包函数 ①假定I是一个项目集,I的任何项目都属于CLOSURE(I) ②若A α·Bβ,a属于CLOSURE(I),B γ是文法中的 产生式, β∈V*,b ∈FIRST(βa),则B ·γ,b也属于 CLOSURE(I)中 ③重复②直到CLOSURE(I)不再增大为止 (2)构造转换函数 GO(I,X)=CLOSURE(J)其中I是LR(1)的项目 集,X是文法符号: J={任何形如[A α X·β,a]的项目|[A α ·Xβ,a] ∈I} 对
文档评论(0)