1、Homework 2向首兴20140134211. 对于一个文法若消除了左递归、提取了左公因子后是否一定为 LL(1)文法?试对下面文法进行改写,并对改写后的文法 进行判断。(1) A aABe | aB Bb | d答:对该文法消除左递归:B Bb | d = B dCC bC | 对该文法提取左公因子:A aABe | a = A aDD ABe | 改写后的文法:A aDB dCC bC | D ABe | First(A) = a Follow(A) = d, #First(B) = d Follow(B) = eFirst(C) = b, Follow(C) = eFirst(D)
2、= a, Follow(D) = d, #For C: First(bC) First() = b = First(bC) Follow(C) = b e = For D: First(ABe) First() = a = First(ABe) Follow(D) = a d, # = 由上验证:该文法是 LL(1)文法。(2) S Ab| BaA aA | aB a答:该文法没有左递归;对该文法提取左公因子:A aA | a = A aCC A | 改写后的文法:S Ab| BaA aCB aC A | First(S) = a Follow(S) = #First(A) = a Follo
3、w(A) = bFirst(B) = a Follow(B) = aFirst(C) = a, Follow(C) = bFor S: First(Ab) First(Ba) = a a = a由上验证:该文法不是 LL(1)文法。2. 给定文法 G(S):S a | | (T)T T,S | S写出如下句型的最左归约。(1) (a,a)答:(a,a) (S,a) (T,a) (T,S) (T) S(2) (a,(a,a)答:(a,(a,a) (S,(a,a) (T,(a,a) (T,(S,a) (T,(T,a) (T,(T,S) (T,(T) (T,S) (T) S(3) (a,a),(a)
4、,a)答:(a,a),(a),a) (S,a),(a),a) (T,a),(a),a) (T,S),(a),a) (T),(a),a) (S,(a),a) (T,(a),a) (T,S,(a),a) (T,(a),a) (T,(S),a) (T,(T),a) (T,S),a) (T),a) (S,a) (T,a) (T,S) (T) S3. 给定文法 G(S): S aAbA BcA | B B idt | 请分别写出下列句型的句柄。(1) aidtcBcAb答:树形图如下:句柄:BcA(2) aidtccb答:树形图如下:句柄:(3) ab答:树形图如下:黄色部分即为句柄:(4) aidtb
5、答:树形图如下:句柄: 或 idt4. 写出如下文法的 LR(0)项目集规范族。(1) S aS | bS | a答:设该文法的拓广文法为:S SS aS | bS | a如下计算其 LR(0)项目集规范族:C := CLOSURE (S .S)RepeatFor C 中每一项目集 I 和每一文法符号 XDo if GO(I, X)非空且不属于 CThen 把 GO(I, X)放入 C 中Until C 不再增大计算流程:C := CLOSURE (S .S, S .aS, S .bS, S .a) C := CLOSURE (S .S, S .aS, S .bS, S .a),CLOSURE
6、 (S S.),CLOSURE (S a.S, S a., S .aS, S .bS, S .a ),CLOSURE (S b.S, S .aS, S .bS, S .a ),CLOSURE (S aS.), CLOSURE (S bS.),所以项目集规范族为:C := CLOSURE (S .S, S .aS, S .bS, S .a),CLOSURE (S S.),CLOSURE (S a.S, S a., S .aS, S .bS, S .a ),CLOSURE (S b.S, S .aS, S .bS, S .a ),CLOSURE (S aS.), CLOSURE (S bS.),(
7、2) S (L) | aL L,S | S答:设该文法的拓广文法为:S SS (L) | aL L,S | S 计算流程:C := CLOSURE (S .S, S .(L), S .a) C := CLOSURE (S .S, S .(L), S .a),CLOSURE (S S.),CLOSURE (S (.L), L .L,S, L .S, S .(L), S .a),CLOSURE (S a.), CLOSURE (S L.,S, S (L.),CLOSURE (L S.), CLOSURE (S L,.S, S .(L), S .a), CLOSURE (S (L).),CLOSUR
8、E (S L,S.)所以项目集规范族为:C := CLOSURE (S .S, S .(L), S .a),CLOSURE (S S.),CLOSURE (S (.L), L .L,S, L .S, S .(L), S .a),CLOSURE (S a.), CLOSURE (S L.,S, S (L.),CLOSURE (L S.), CLOSURE (S L,.S, S .(L), S .a), CLOSURE (S (L).),CLOSURE (S L,S.)5. 写出如下文法的 LR(0)自动机。S SS | (S) | a答:该文法的拓广文法的 LR(0)自动机的状态表如下:L0 S
9、 .S S .SS S .(S) S .aL1 S S. S S.S S .SS S .(S) S .aL2 S (.S) S .SS S .(S) S .aL3 S a.L4 S SS. S S.S S .SS S .(S) S .aL5 S (S.) S S.S S .SS S .(S) S .aL6 S (S).该文法的拓广文法的 LR(0)自动机的状态转移表如下:(# - 起始状态, * - 终结状态)S ( ) a#L0 L1 L2 L3*L1 L4 L2 L3L2 L5 L2 L3*L3 *L4 L4 L2 L3L5 L4 L2 L6 L3*L6 6. 试为如下文法构造 SLR(1
10、)语法分析表, 要求画出 LR(0)自动机。bexpr bexpr or bterm | bterm bterm bterm and bfactor | bfactor bfactor not bfactor | ( bexpr ) | true | false 说明:bexpr, bterm, 和 bfactor 为非终结符,其它符号 为终结符。答:令 S = bexpr, A = bterm, B = bfactor.该文法的拓广文法为: (1)S S(2)S S or A(3)S A(4)A A and B(5)A B(6)B not B(7)B ( S )(8)B true(9)B f
11、alseFirst(S) = not, (, true, false Follow(S) = #First(S) = not, (, true, false Follow(S) = #, or, )First(A) = not, (, true, false Follow(A) = #, or, ), andFirst(B) = not, (, true, false Follow(B) = #, or, ), andLR(0)自动机的状态表如下:(# - 起始状态, * - 终结状态)L0 S .S S .S or A S .A A .A and B A .BB .not B B .( S
12、) B .true B .false*L1 S S. S S. or A*L2 S A. A A. and B*L3 A B.L4 B not .B B .not B B .( S ) B .true B .falseL5 B ( .S ) S .S or A S .A A .A and B A .BB .not B B .( S ) B .true B .false*L6 B true.*L7 B false.L8 S S or. A A .A and B A .BB .not B B .( S ) B .true B .falseL9 A A and .B B .not B B .( S
13、) B .true B .false*L10 B not B.L11 B ( S .) S S .or A*L12 S S or A. A A .and B*L13 A A and B.*L14 B ( S ).SLR(1)语法分析表如下:ACTION GOTO栈顶状态 or and not true false ( ) # S A B0 s4 s6 s7 s5 1 2 31 s8 acc2 r3 s9 r3 r33 r5 r5 r5 r54 s4 s6 s7 s5 105 s4 s6 s7 s5 11 2 36 r8 r8 r8 r87 r9 r9 r9 r98 s4 s6 s7 s5 12
14、 39 s4 s6 s7 s5 1310 r6 r6 r6 r611 s8 s1412 r2 s9 r2 r213 r4 r4 r4 r414 r7 r7 r7 r7LR(0)自动机如下:( 绿色:起始状态;蓝色:指针;黄色:终结 状态)7. 证明文法S A a A b | B b B aA B 是 LL(1)文法,但不是 SLR(1)文法。答: First(S) = a, b Follow(S) = #First(A) = Follow(A) = a, bFirst(B) = Follow(B) = a, bFor S: First(A a A b) First(BbBa) = a b = 由上验证:该文法是 LL(1)文法。下证该文法不是 SLR(1)文法:该文法的拓广文法为:(1)S S(2)S A a A b(3)S B b B a(4)A (5)B LR(0)自动机如下:(绿色:起始状态;蓝色:指 针;黄色:终结状态)SLR(1)语法分析表如下:ACTION GOTO栈顶状态a b # S A B0 r4, r5 r4, r5 1 2 31 acc2 s73 s44 r5 r5 55 s66 r37 r4 r4 88 s99 r2由上分析表中存在表项为多重定义,该文法不是 SLR(1)文法。故该文法是 LL(1)文法,但不是 SLR(1)文法,得证。感谢您的耐心阅读