- 1、本文档共31页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理6
* 分析所有这些项目集,可知在项目集I1,I5中存在移进—归约冲突,I9中存在归约—归约冲突,因此该文法不是 LR(0)文法。 考虑含冲突的项目集能否用SLR(1)方法解决。FOLLOW(S) ={$} FOLLOW(S) ={b,c,$} FOLLOW(A) ={a} I1={ S‘→S·, S →S·b }由于有FOLLOW(S’)∩{b} ={$}∩{b}=Φ,I1中的移进—归约冲突可以用SLR(1)方法解决。 I5={ A →a·, S →·bAa } 由于有FOLLOW(A)∩{b} ={a}∩{b}=Φ,I5中的移进—归约冲突可以用SLR(1)方法解决。 I9={ A →aSb·, S →Sb· }由于有 FOLLOW(A) ∩FOLLOW(S) ={a}∩{b, c, $}=Φ, I9中的归约—归约冲突也可用SLR(1)方法解决。 * 可以发现项目集 I2中存在移进和归约冲突: S →L·=R R →L· 由于 FOLLOW(R)∩{=}={=,$}∩{=}≠Ф 因此,I2中移进和归约冲突不能用SLR(1) 方法解决。 * 4.5.3 SLR(1)分析法 这个条件比较苛刻,对于大多数程序设计语言来说,一般都不能满足LR(0)文法的条件,即使是描述一个算述表达式的简单文法也不是LR(0)文法。 例 考虑算术表达式 的文法 : 每一个LR(0)项目集中都不含有冲突的项目, 由于LR(0)文法要求文法的 E→E+T | T T→T*F | F F→(E) | id 4.5.3 SLR(1)分析法 将文法拓广并对规则进行编号 直接构造出识别文法规范句型活前缀的DFA下如图所示。 0. E→E 1. E→E+T 2. E→T 3. T→T * F 4. T→F 5. F→(E) 6. F→id E→E+·T T→·T*F T→·F F→·(E) F→·id I6: id I8:F→ (E·) E→E·+T E + T I9:E→E+T· T→T·*T * F I10:T→T*F· I11:F→(E) · ) 识别表达式文法活前缀的DFA E→·E E→·E+T E→·T T→·T*F T→·F F→·(E) F→·id I0: E I1:E→E· E→E·+T I2: E→T· T→T·*F T I3:T→F· F F→(·E) E→·E+T E→·T T→·T*F T→·F F→·(E) F→·id I4: ( ( F T I5: F→id· id + F ( id I7: T→T*·F F→·(E) F→·id ( id id * E + 4.5.3 SLR(1)分析法 不难看出在I1,I2,I9中既含有移进项目,又含有归约项目,因而这个表达式的文法不是LR(0)文法。 根据构造LR(0)分析表的方法,构造出的LR(0)分析表中在2状态和9状态下面临输入符号‘*’时含多重定义元素,见下表。 表达式文法的LR(0)分析表 0 1 2 3 4 5 S5 S4 S6 acc S5 S4 r2 r2 S7r2 r2 r2 r2 r4 r4 r4 r4 r4 r4 1 2 3 8 2 3 r6 r6 r6 r6 r6 r6 GOTO 状态 ACTION id + * ( ) $ E T F 6 7 8 9 10 S5 S4 S5 S4 S6 S11 r1 r1 S7r1 r1 r1 r1 r3 r3 r3 r3 r3 r3 r5 r5 r5 r5
文档评论(0)