if sym='(' or sym='a' or sym='b' or sym='^' then begin T; E' end else error
end
procedure E'; begin
if sym='+'
then begin advance; E end
else if sym<>')' and sym<>'#' then error
end
procedure T; begin
if sym='(' or sym='a' or sym='b' or sym='^' then begin F; T' end else error
end
procedure T'; begin
if sym='(' or sym='a' or sym='b' or sym='^' then T
else if sym='*' then error
end
procedure F; begin
if sym='(' or sym='a' or sym='b' or sym='^' then begin P; F' end else error
end
procedure F'; begin
if sym='*'
then begin advance; F' end
end
procedure P; begin
if sym='a' or sym='b' or sym='^' then advance
else if sym='(' then
begin
advance; E;
if sym=')' then advance
else error
end else error
end;
P81–3
/*************** (1) 是,满足三个条件。 (2) 不是,对于A不满足条件3。 (3) 不是,A、B均不满足条件3。 (4) 是,满足三个条件。 ***************/
P133–1
短语: E+T*F, T*F, 直接短语: T*F 句柄: T*F
P133–2
文法: (1) 最左推导: 最右推导: (2)
(((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,S) (T) S
“移进-归约”过程: 步骤 栈 0 # 1 #( 2 #((
输入串
动作
(((a,a),^,(a)),a)# 预备 ((a,a),^,(a)),a)# 进 (a,a),^,(a)),a)# 进
a,a),^,(a)),a)# 进 ,a),^,(a)),a)# 进 ,a),^,(a)),a)# 归
3 #((( 4 #(((a 5 #(((S
6 #(((T 7 #(((T,
,a),^,(a)),a)# 归 a),^,(a)),a)#
进
8 #(((T,a 9 #(((T,S 10 #(((T 11 #(((T) 12 #((S 13 #((T 14 #((T, 15 #((T,^ 16 #((T,S 17 #((T 18 #((T, 19 #((T,(
),^,(a)),a)# 进 ),^,(a)),a)# 归
),^,(a)),a)# 归 ,^,(a)),a)# 进 ,^,(a)),a)# 归 ,^,(a)),a)# 归 ^,(a)),a)# ,(a)),a)# ,(a)),a)# ,(a)),a)# (a)),a)# a)),a)#
)),a)# )),a)# )),a)# ),a)#
归 归 进
进 归 归 进 进 进 归 归 进
进
20 #((T,(a 21 #((T,(S 22 #((T,(T 23 #((T,(T) 24 #((T,S 25 #((T 26 #((T) 27 #(S
),a)# ),a)# ,a)#
归
,a)#