收藏 分享(赏)

编译原理 第7章习题解答.doc

上传人:wspkg9802 文档编号:9311767 上传时间:2019-08-01 格式:DOC 页数:6 大小:248KB
下载 相关 举报
编译原理 第7章习题解答.doc_第1页
第1页 / 共6页
编译原理 第7章习题解答.doc_第2页
第2页 / 共6页
编译原理 第7章习题解答.doc_第3页
第3页 / 共6页
编译原理 第7章习题解答.doc_第4页
第4页 / 共6页
编译原理 第7章习题解答.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

1、第七章 习题解答7.1 给定文法:S(A) AABBABBbBc 构造它的基本 LR(0)项目集; 构造它的 LR(0)项目集规范族; 构造识别该文法活前缀的 DFA; 该文法是 SLR文法吗?若是,构造它的 SLR分析表。7.2 给定文法:EEE+EEE*Ea 构造它的 LR(0)项目集规范族; 它是 SLR(1)文法吗?若是,构造它的 SLR(1)分析表; 它是 LR(1)文法吗?若是,构造它的 LR(1)分析表; 它是 LALR(1)文法吗?若是,构造它的 LALR分析表。7.3 给出一个非 LR(0)文法。7.4 给出一个 SLR(1)文法,但它不是 LR(0)文法,构造它的 SLR分

2、析表。7.5 给出一个 LR(1)文法,但它不是 LALR(1)文法,构造它的规范 LR(1)分析表。7.6 给定二义性文法: EE+E EE *E E(E) Eid用所述的无二义性规则和(或)另加一些无二义性规则,例如,给算符 *、+施加某种结合规则。 构造它的 LR(0)项目集规范族及识别活前缀的 DFA; 构造它的 LR分析表。习题参考答案7.1 解:文法的基本 LR(0)项目集为S.(A) S(.A) S(A.) S(A).A.ABB AA.BB AAB.B AABB.A.B AB. B.b Bb.B.c Bc.构造该文法的识别活前缀的 DFSA如下图所示:c S .(A) B b.

3、A ABB. S (.A) A .ABB A .B B .b B .c B c. S (A). S (A.) A A.BB B .b B .c A B. A AB.B B .b B .c I1 I0 I2 I3 ( ) B b c b c b I4 I5 I6 I8 I7 B B A 文法的识别活前缀的 DFSA该文法的 LR(0)项目集规范族=I 0,I 1,I 2,I 3,I 4,I 5,I 6,I 7,I 8因为在构造出来的识别活前缀的 DFA中,每一个状态对应的项目集都不含有移进-归约、归约-归约冲突,所以该文法是 LR(0)文法,当然也是 SLR文法。因为 FOLLOW(S)=#FO

4、LLOW(A)=FIRST)FIRST(BB)=),b,cFOLLOW(B)=FIRST(B)FOLLOW(A)=b,c,)其对应的 SLR(1)分析表如下表所示。文法 GS的 SLR(1)分析表ACTION GOTO状态b c ( ) # A B0 S11 S4 S5 2 32 S4 S5 S7 63 r3 r3 r34 r4 r4 r45 r5 r5 r56 S4 S5 87 acc8 r2 r2 r27.2 解:首先构造增广文法如下:SE 0EEE+ 1EEE * 2Ea 3(1) 构造它的 LR(0)项目集规范族如下图所示。该文法的 LR(0)项目集规范族=I 0,I 1,I 2,I

5、3,I 4,I 5(2) 因为在识别活前缀的 DFSA的每一个状态中,都不存在移进-归约冲突和归约-归约冲突,所以文法是 LR(0)文法,当然也是 SLR(1)文法。因为 FOLLOW(E)=#,+, *,a所以该文法对应的 SLR(1)分析表如下表所示。S .EE .E+E .E*E .aS E.E E.E+E E.E*E .E+E .E*E .aE E.+E E.*E E.E+E E.E*E .E+E .E*E .a E E*.E E+.E a.a+E*EEI1I0 I3I2I4I5aa文法的 LR(0)项目集规范族文法的 SLR(1)分析表ACTION GOTO状态a + * # E0

6、S2 11 S2 acc 32 r3 r3 r3 r33 S2 S4 S5 74 r1 r1 r1 r15 r2 r2 r2 r2(3) 该文法是 SLR(1)文法,当然也是 LR(1)文法。它的以 LR(1)项目集为状态的识别活前缀的 DFSA如下图所示。相应的 LR(1)分析表如表所示。S E., #E E.+, #/aE E.*, #/aE .E+, +/*/aE .E*, +/*/aE .a, +/*/aS .E, #E .E+, #/aE .E*, #/aE .a, #/aE E.+, #/aE E.*, #/aE E.+, +/*/aE E.*, +/*/aE .E+, +/*/a

7、E .E*, +/*/aE .a, +/*/aE a., #/aE a., +/*/aE E+., #/aE E*., #/aE*I3EE E.+, +/*/aE E.*, +/*/aE E.+, +/*/aE E.*, +/*/aE .E+, +/*/aE .E*, +/*/aE .a, +/*/a+E E+., +/*/aE E*., +/*/a*+I1I0I2EE a aaaI4 I7 I8I9I5I6文法的以 LR(1)项目集为状态的识别活前缀的 DFSA文法的 LR(1)分析表ACTION GOTO状态a + * # E0 S2 11 S4 acc 32 r3 r33 S4 S5 S

8、6 74 r3 r3 r35 r1 r16 r2 r27 S4 S8 S9 78 r1 r1 r19 r2 r2 r2(4) 由于文法的以 LR(1)项目集为状态的识别活前缀的 DFSA中,状态 I2和 I4、I 3和I7、I 5和 I8、I 6和 I9是同心项目集,将它们合并后不会产生冲突。因而可构造文法的LALR(1)分析表如下表所示。文法的 LALR(1)分析表ACTION GOTO状态a + * # E0 S24 11 S24 acc 3724 r3 r3 r3 r337 S24 S58 S69 3758 r1 r1 r1 r169 r2 r2 r2 r27.3 解:构造二义性文法 G

9、:SaAbScSSaAbSG 不是 LR(0)文法。7.4 解:构造下面文法 G:SbASB|bASdSa|bBcAa|c然后构造其 SLR分析表。 (略)7.5 解:构造下面的文法 G:SaAa|aBb|bAb|bBaAxBx然后构造其 LR(1)分析表。(略)7.6 解:首先构造增广文法如下:SE 0EE+E 1EE *E 2 E(E) 3Eid 4(1) 构造它的识别活前缀的 DFSA如下图所示。*( +S E.E .+ .*E E +.E .E .E* .( )E .idE ( .E) .+E .E* .( )E .id E *E. .+E .*EE +E. .E .*EE *.E .

10、+E .E* .( )E .idE ( E.) .+E .*EE ( E) .S .EE .+ .E*E .() idE id. (E(I1 +I0 EidI3*I4I5idI2id EEI7*I8*+I6I9)该文法的 LR(0)项目集规范族=I 0,I 1,I 2,I 3,I 4,I 5,I 6,I 7,I 8,I 9(2) 构造它的 LR分析表如下表所示。文法有冲突的 LR分析表ACTION GOTO 状态id + * ( ) # E0 S3 S2 11 S4 S5 acc2 S3 S2 63 r4 r4 r4 r4 r4 r44 S3 S2 r4 75 S3 S2 86 S4 S5 S

11、97 r1 r1/S4 r1/S5 r1 r1 r18 r2 r2/S4 r2/S5 r2 r2 r29 r3 r3 r3 r3 r3 r3由于识别文法活前缀的 DFSA中,状态 I7和 I8都存在“移进-归约”冲突,同时,FOLLOW(E)=#,),+, *即使构造 SLR分析表也无法避免冲突。为此规定*的优先级高于+,且它们均服从左结合,得到无冲突的 LR分析表如下表所示。文法无冲突的 LR分析表ACTION GOTO 状态id + * ( ) # E0 S3 S2 11 S4 S5 acc2 S3 S2 63 r4 r4 r4 r44 S3 S2 r4 75 S3 S2 86 S4 S5 S97 r1 S5 r1 r18 r2 r2 r2 r29 r3 r3 r3 r3

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报