编译原理-第五章技巧.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
TJNU-COCIE-WJW * * 例: 按上表对acccd进行分析 步骤 状态 符号 输入串 1 0 # acccd# 2 02 #a cccd# 3 024 #ac ccd# 4 0244 #acc cd# 5 02444 #accc d# 6 0244410 #acccd # 7 024448 #acccA # 8 02448 #accA # 9 0248 #acA # 10 026 #aA # 11 01 #E # 接受 TJNU-COCIE-WJW * * 5.5 SLR分析表的构造 1.LR(0)文法的局限性 活前缀识别自动机的每个状态(项目集)都不含冲突性的项目 例如:假定一个LR(0)规范族中含有如下的一个项目集(状态) I={X→?·b?,A→?·,B→?·} 是移进? 还是归约? 用哪个产生式归约? 产生冲突! 一、问题的提出 TJNU-COCIE-WJW * * 2.解决冲突的具体办法 可以考查规约项目归约后的非终结符的FOLLOW集,看看该非终结符后面应该跟的是什么终结符。然后决定采用移进还是归约,如果是归约,具体应采用哪个产生式。 TJNU-COCIE-WJW * * 2.解决冲突的具体办法 例如: 假定一个LR(0)规范族中含有如下的一个项目集(状态) I={X→?·b?,A→?·,B→?·} 那么,当状态I面临任何输入符号a时,可以: 1. 若a=b,则移进; 2. 若a?FOLLOW(A),用产生式A→?进行归约; 3. 若a?FOLLOW(B),用产生式B→?进行归约; 4. 此外,报错。 要求:FOLLOW(A) ∩ FOLLOW(B) ∩{b}=? TJNU-COCIE-WJW * * 3.解决冲突的一般办法 假定LR(0)规范族的一个项目集 I={A1→?·a1?1,A2→?·a2?2,…,Am→?·am?m, B1→?·,B2→?·,…,Bn→?·} 如果集合{a1,…,am},FOLLOW(B1),…,FOLLOW(Bn)两两不相交(包括不得有两个FOLLOW集合有#),则: 1. 若a是某个ai,i=1,2,…,m,则移进; 2. 若a?FOLLOW(Bi),i=1,2,…,n,则用产生式Bi→?进行归约; 3. 此外,报错。 TJNU-COCIE-WJW * * 3.解决冲突的一般办法(续) 冲突性动作的这种解决办法叫做SLR(1)解决办法。 “1”代表顶多向前看一个输入符号 TJNU-COCIE-WJW * * 1.构造G的拓广文法为G? 2.对G?构造LR(0)项目集规范族C和活前缀识别自动机的状态转换函数GO 3.使用C和GO,按下面的算法构造SLR分析表: 令每个项目集Ik的下标k作为分析器的状态,包含项目S?→·S的集合Ik的下标k为分析器的初态 二、构造SLR(1)分析表方法 TJNU-COCIE-WJW * * 分析表的ACTION和GOTO子表构造方法: (1)若项目A→?·a?属于Ik且GO(Ik,a)=Ij,a为终结符,则置ACTION[k,a]为 “sj”; (2)若项目A→?·属于Ik,那么,对任何终结符a,a?FOLLOW(A),置ACTION[k,a]为 “rj”;其中,假定A??为文法G?的第j个产生式; TJNU-COCIE-WJW * * 分析表的ACTION和GOTO子表构造方法: (3)若项目S?→S·属于Ik,则置ACTION[k,#]为“acc”; (4)若GO(Ik,A)=Ij,A为非终结符,则置GOTO[k,A]=j; (5)分析表中凡不能用规则1至4填入信息的空白格均置上“出错标志”。 TJNU-COCIE-WJW * * 注意: 1.按上述方法构造出的ACTION与GOTO表如果不含多重入口,则称该文法为SLR(1)文法。 2.使用SLR表的分析器叫做一个SLR分析器。 TJNU-COCIE-WJW * * 例 :考察下面的拓广文法: (0) S?→E (1) E→E+T (2) E→T (3) T→T*F (4) T→F (5) F→(E) (6) F→i TJNU-COCIE-WJW * * 这个文法的LR(0)项目集规范族为: I0: S?→·E E→·E+T E→·T T→·T*F T→·F F→· (E) F→·i I1: S?→E· E→E·+T I2: E→T· T→T·*F I3: T→F· I4: F→(·E)

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档