对于状态5,因为包含项目[A?AS? a/b],所以遇到搜索符号a或b时,应该用A?AS归约。又因为状态5包含项目[A??a a/b],所以遇到搜索符号a时,应该移进。因此存在“移进-归约”矛盾,所以这个文法不是LR(1)文法。
b b b 1: 5: 8: A A A S a a S 3: S a S 0: 3: a a A a A 6: 9: S 4: b S A b
a a S b b
10: S b A A
5: 2: 7: 第六章
/********************第六章会有点难
P164–5
(1)
E?E1+T {if (E1.type = int) and (T.type = int )
then E.type := int else E.type := real} {E.type := T.type}
E?T
T?num.num {T.type := real} T?num (2)
{T.type := int}
P164–7
S?L1|L2 {S.val:=L1.val+(L2.val/2L2.length)} S?L {S.val:=L.val}
L?L1B {L.val:=2*L1.val + B.val;
L.length:=L1.length+1} L?B
{L.val:=B.c;
L.length :=1} B?0 {B.c:=0} B?1
{B.c:=1}
***********************/
第七章
P217–1
a*(-b+c)
ab@c+* a+b*(c+d/e) abcde/+*+ -a+b*(-c+d)
a@bc@d+*+
if (x+y)*z =0 then (a+b)↑c else a↑b↑c xy+z*0= ab+c↑abc↑↑
或 xy+z*0= P1 jez ab+c↑ P2 jump abc↑↑
P1 P2
P217–3
-(a+b)*(c+d)-(a+b+c)的 三元式序列:
¥ (1) +, a, b (2) @, (1), - (3) +, c, d (4) *, (2), (3) (5) +, a, b (6) +, (5), c (7) -, (4), (6) 间接三元式序列: 三元式表: (1) +, a, b (2) @, (1), - (3) +, c, d (4) *, (2), (3) (5) +, (1), c (6) -, (4), (5) 间接码表: (1) (2) (3) (4) (1) (5)
(6)
四元式序列: (1) +, a, b, T1 (2) @, T1, -, T2 (3) +, c, d, T3 (4) *, T2, T3, T4 (5) +, a, b, T5 (6) +, T5, c, T6 (7) -, T4, T6, T7
P218–4
自下而上分析过程中把赋值句翻译成四元式的步骤:A:=B*(-C+D) 步骤 输入串
栈
PLACE
四元式
(1) A:=B*(-C+D) (2) :=B*(-C+D) i (3) B*(-C+D) i:= (4) *(-C+D) (5) *(-C+D) (6) *(-C+D) (7) (-C+D) (8) -C+D) (9) C+D) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19)
A
A-
A-B A-B A-B
i:=i i:=E i:=E
i:=E* i:=E*(
A-B- A-B--
A-B---
i:=E*(-
+D) i:=E*(-i A-B---C
+D) i:=E*(-E A-B---C (@,C,-, T)
1+D) i:=E*(E A-B--T
1D) i:=E*(E+ A-B--T-
1) i:=E*(E+i A-B--T-D
1 ) i:=E*(E+E A-B--T-D (+,T,D,T)
112 ) i:=E(E A-B--T
2 i:=E*(E) A-B--T-
2 i:=E+E A-B-T (*,B,T,T)
223 i:=E A-T (:=,T,-,A)
33
编译原理第三版课后习题解答



