1、韩太鲁修订版编译原理第四章第五章1第四章4.1 文法 G1 为:NND | D D0 | 1(1)L(G 1)如何表示?(2)给出句子 011100 的最左推导和最右推导。解答:(1) L(G 1)为无符号二进制数。(2)最左推导:NNDNDD NDDD NDDDD NDDDDNDDDDDDDDDDDDDDDDDDDDDDDDDD最右推导:NNDN0 ND0 N00 ND00N100ND100 N1100 ND1100 N11100 D111004.2 写一文法 G2,使其 L(G2)是正奇数集合,且每个数不以 0 打头。解答:令 G2= VN,VT,P, ,其中,V T =0,1,2,3,4
2、,5,6,7,8,9,VN =, , , , , ,P: 数字 1123456789 13579 024684.3 设文法 G3 为:EE+T | TTT*F | FF(E) | i试证明符号串 T*F+ i 是 G3 的句型,并给出此句型的所有短语以及句柄。解答:由于有推导 EE+TT+TT*F+T T*F+FT*F+i所以 T*F+i 是的 G3 的句型。此句型 T*F+i 的语法树如图 4-5:EE + TTT * FFi图 4-5 句型 T*F+i 的语法树根据语法树此句型的短语有:T*F, i, T*F+i.句柄为 T*F。4.4 证明文法 G4:S iSeS | iS | a 是二
3、义性文法。韩太鲁修订版编译原理第四章第五章2解答:要证明文法是二义性文法,只要找到它的任意一个句型有两个语法树即可。因为句型 iiaes 有两个语法树(图 4-6),所以 G4 是二义性文法。Si S e Si SaSi S e Si Sa图 4-6 句型 iiaes 的语法树4.5 设文法 G5 为:EE+T | TTT*F | FFPF | PP(E) | i(1)试给出 G5 的 FIRSTVT 和 LASTVT。(2)构造 G5 的算符优先关系表, G5 是算符优先文法吗?(3)给出 G5 的优先函数表。解答:由题意可得:(1) FIRSTVT(E)=+, *, , i, ( FIRS
4、TVT(T)= *, , i, ( FIRSTVT(F)= , i, ( FIRSTVT(P)= i, ( (2) G5 的算符优先关系表如表 44 所示表 44 G 5 的算符优先关系表1 2 + * i ( ) #+*i()#4.6 设所给文法为 G5(习题 4-5) ,(1)消除 G5 的左递归;LASTVT(E)=+, *, , i, ) LASTVT(T)= *, , i, ) LASTVT(F)= *, i, ) LASTVT(P)= i, ) 韩太鲁修订版编译原理第四章第五章3(2)设消除左递归的文法为 G6,给出 G6 所有非终极符的 FIRST 集和 FOLLOW 集;(3)
5、说明 G6 是否为 LL(1)文法;(4)构造 G6 的 LL(1)分析表;解答:(1)消除 G5 的左递归得 G6ETE E+TE |TFT T*F T |FPF | PP(E) | i(2) First(E)= First(T)= First(F) = First(P)= (, i First(E)=+, First(T)=*, Follow(E)= ), #Follow(E)= ), #Follow(T)=+, ), #Follow(T)=+, ), #Follow(F)=+,*, ), #Follow(P)=+,* , , ), #(3)因为 FP F | P 含有左公因子,所以 G6
6、 不是 ll(1)文法。(4)G 6的 LL(1)分析表如表 4-6。表 4-6 G6 的 LL(1)分 析 表i + * ( ) #E E TE E TEE E+TE E ET TF T TF TT T T*FT T TF FPF FP FPF FPP Pi P(E)4.7 解答:G 7 的拓广文法如下:(0)S S (1) SAAd (2)ScAd (3)Sb(4)AASc (5)ASb (6)A cd (7) Aa构造 G7 的 LR(0)项目集规范族如图 47韩太鲁修订版编译原理第四章第五章4S SS A A d S c A dS bA A S cA S bA c dA aS S A
7、S bSA S b bI0I1I5S A A d A A S cS A A d S c A dS bA A S cA S bA c dA aAI2S A A d A A S cS A A d S A A d S c A dS bA A S cA S bA c dA aAI7S c A dA c dA A S cA S bA c dA aS A A d S c A dS bcI3S b bA a aI4I6A c d I4 daS c A dA A S cS A A d S A A d S c A dS bA A S cA S bA c dA aAI1 1bcA S bSI1 2AS A A d
8、 dI8A A S cA S bSI9cI3aI6bI4S c A d dI1 4SI9cI3aI6bI4I7AI5bbI5A A S c cI1 0SI9cI3aI6bI4图 47 G 7 的 LR(0)项目集规范族G7 的 LR(0)分析表如表 4-7表 4-7 LR(0)分 析 表ACTION GOTO状态 a b c d # S A0 S6 S4 S3 1 21 S5 Acc2 S6 S4 S3 9 73 S6 S4 S3 S13 12 114 r3 r3 r3 r3 r35 r5 r5 r5 r5 r56 r7 r7 r7 r7 r77 S6 S4 S3 S8 9 78 r1 r1
9、r1 r1 r19 S5 S1010 r4 r4 r4 r4 r411 S6 S4 S3 S14 9 712 S5 S10韩太鲁修订版编译原理第四章第五章513 r6 r6 r6 r6 r614 r2 r2 r2 r2 r2由于 G7 的 LR(0)分析表无多重入口,所以 G7 为 LR(0)文法,同理可知 G7 为 SLR(1)文法。4.8 对如下文法 G8:SA ABAA BaBBb构造 LR(1)项目集规范族和 LR(1)分析表,并说明文法是否为 LR(1)文法。解答:文法 G8 的拓广文法为(0)S S (1)SA (2)ABA (3)A(4)BaB (5)Bb构造 G8 的 LR(1
10、)项目集规范族如图 48 S S , # S A , # A B A # A , # B a B , # / a / b B b , # / a / b S S , # SI0I1 A B A , # A B A , # A , # B a B , # / a / b B b , # / a / b BI2AI6I4 B b , / a / b baI5aB A B A , # I5 S A , # A B a B , # / a / b B a B , # / a / b B b , # / a / b abBI7 B a B , # / a / b I3图 48 G 8 的 LR(1)项目
11、集规范族构造 G8 的 LR(1)分析表如表 45由于 G8 的 LR(1)分析表无多重入口,所以 G8 为 LR(1)文法。表 48 G 8 的 LR(1)分析表ACTION GOTO状态 a b # S A B0 S4 S5 r3 1 2 31 Acc2 S4 S5 r33 S4 S5 r3 6 34 S4 S5 7韩太鲁修订版编译原理第四章第五章65 r5 r5 r56 r27 r4 r4 r48 r84.9 对如下文法 G9:(0)S S (1)SBB(2)S (3)BaB(4)Bb(1)构造 LR(1)项目集规范族,并说明是否为 LR(1)文法;(2)对 LR(1)项目集能否合并同心
12、集?解答:构造 G9 的 LR(1)项目集规范族如图 49S S, #S BB, #S , #B aB, a/bB b, a/bS S, #SI0 I1S BB, #B aB,#B b, #B BI5I3B b, a/bbI4aaS BB, #B aB, a/bB aB, a/bB b, a/baB I8B aB, a/bb B b, #I7aI6B aB, #B aB, #B b, #I9B aB, #a图 49 G9 的 LR(1)项目集规范族构造 G9 的 LR(1)分析表如表 49表 49 G 9 的 LR(1)分析表ACTION GOTO状态 a b # S B0 S3 S4 r2
13、1 21 Acc2 S6 S7 53 S3 S4 84 r3 r35 r16 S6 S77 r4 r4 r38 r2 r29 r2韩太鲁修订版编译原理第四章第五章7由于 G9 的 LR(1)分析表无多重入口,所以 G9 为 LR(1)文法。(2)由于 I3 与 I6 ,I 4 与 I7, I8 与 I9 合并同心集后项目集规范族无语法动作冲突,所以能否合并同心集。第五章5.3 分别写出下面表达式相应的逆波兰表示、三元式和四元式:a*b+(c-d)/ea*b-c*d/e-(a+b/c*d)abbc解答:5.4 分别写出条件语句:if a0 then xx+1 else x4* (x-1)的逆波兰
14、表示、三元式和四元式。解答:1. a*b+(c-d)/e逆波兰式:ab*cd-e/+三元式序列:(1)(*, a, b)(2)(-, c, d)(3)(/, (2), e)(4)(+ ,(1), (3) )四元式序列:(1)(*, a, b, T1 )(2)(-, c, d, T2)(3)(/, T2, e, T3)(4)(+ ,T1, T3, T4)2. a*b-c*d/e逆波兰式:ab*cd*e/-三元式序列:(1)(*, a, b)(2)(*, c, d)(3)(/, (2), e)(4)(- , (1), (3))四元式序列:(1)(*, a, b, T1 )(2)(*, c, d,
15、T2 )(3)(/, T2, e, T3)(4)(- ,T1, T3, T4)3. -(a+b/c*d)的逆波兰式:abc/d*+-三元式序列:(1)(/, b, c)(2)(*, (1), d)(3)(+, a, (2))(4)(- , (3),-)四元式序列:(1)(/, b, c, T1)(2)(*, T1, d, T2)(3)(+, a, T2, T3)(4)(- , T3, -, T4)四元式序列:(1)(j, a, 0, (3))(2)(j, -, -, (6)(3)(+, x, 1, T1)(4)(=, T1, - , x)(5)(j, -, -, (9)(6)(-, x, 1,
16、 T2)(7)(*, 4, T2, T3)(8)(=, T3, - , x)(9)三元式序列:(1)(, a, 0)(2)(jz, (1), (6)(3)(+, x, 1)(4) (=, x, (3)(5) (j, -, (9)(6) (-, x, 1)(7) (*, 4, (6)(8) (=, x, (7)(9)逆波兰式:(1)a 0 13 jez(6) x x 1 + =(11) 20 j(13) x 4 x 1- * =(20) 韩太鲁修订版编译原理第四章第五章85.5 把下面的程序段:a0; b0;100: aa+1;if a3 dobegin aa+4*b;ba+b-b*cend;的
17、逆波兰表示、三元式和四元式。解答:四元式序列:(1)( + , x , y, T1)(2)(j , T1, 3, (4) )(3)( j, - , -, (10))(4)( * , 4 , b, T2 )(5)( + , a , T2, a)(6)( * , b , c , T3)(7)( + , a , b , T4)(8)( - , T3 , T4, b)(9)( j , , (1))(10)三元式序列:(1)( + , x , y )(2)( , (1) , 3 )(3)( jf,(2) , (12)(4)( * , 4 , b )(5)( + , a , (4))(6)( = , a , (5) )(7)( * , b , c )(8)( + , a , b )(9)( - , (8) , (7) )(10)( , b , (9)(11)( j , , (1))(12)逆波兰式:(1) block(2) x y + 327 jez(9) a a 4 b * + =(16) b a b+ b c * - =(25) 2 j(27)