编译原理试题及答案(二)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2020/5/8
a
22
CH.4.练习题1(P81.)
解(1) 不带回溯的递归子程序: S→a|^|(T)
Procedure S;
Begin
if sym=‘a’ or sym=‘^’ then advance
else if sym=‘(‘ then
begin advance;
T;
if sym=‘)’ then advance
程序设计语言
Chapter 4. 自上而下 语法分析
CH.4.练习题1(P81.)
1.考虑下面文法G1: S→a|^|(T) T→T,S|S
(1) 消去G1的左递归。然后对每个非终结符,写出 不带回溯的递归子程序。
解(1) 消左后的文法G1’: S→a|^|(T) T→ST’ T’→ ,ST’|ε
FIRST(C)={ c,d } 均不含ε。
所以,文法是LL(1)文法。
a
11 11
程序设计语言
begin
advance;
S;
T’
end
End;
a
44
CH.4.练习题1(P81.)
(2) 经改写后的文法是否是LL(1)的? 给出它的预测分析表。
消左后的文法G1’ : S→a|^|(T)
T→ST’
(2) 因为G1’ : ① 文法不含左递归;
T’→ ,ST’|ε
② 对 S→a|^|(T)
FIRST(a)={a}, FIRST(^)={^}, FIRST( (T) )={ ( },
集合互不相交且不含ε;
③ 对 T’→,ST’|ε
FIRST( ,ST’ )={ , }, FIRST(ε)={ε}, 其交集为空。
但ε∈FIRST(T’)=FIRST( ,ST’ )∩FIRST(ε)={,,ε},
然而,FOLLOW(T’)={ ) } FIRST(T’)={,,ε} ,两者 不
相交。
解,因为
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a,b,c}
② 对 A→a|ε
候选式的FIRST集合互不相交; ε∈ FIRST(A)
但, FOLLOW(A)={b,c} FIRST(A)={a,ε} 两者不相交。
③ B→b|ε
其候选式的FIRST集合互不相交; ε∈ FIRST(B)
FOLLOW(A)={ a, b, # }, FIRST(A)={ a,ε} 两者相交。
所以,文法不是LL(1)文法。
a
10 10
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (4) S→aSe|B B→bBe|C C→cCe|d。
解, 因为 ① 文法不含左递归;
FIRST(S)={a,b}
FIRST(B)={b,ε}与FIRST(ε)={ε}相交;
所以文法不是LL(1)文法。
解(2) 对 A→a|ε
因为ε∈FIRST(A)={ a,b,ε} ,FOLLOW(A)={b}, FOLLOW和FIRST两者相交。 所以文法不是LL(1)文法。
a
99
CH.4.练习题3(P82.)
匹配a; 用T’ , , 查表
T’→ ,ST’, 展开T’
匹配, ;用 S , ^查表
S→ ^, 展开S
匹配^ ;用 T’ , )查表
T’→ε,展 开T’
匹配 )
分析成功, 结束分析
a
77
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (1) S→ABc A→ a|ε B→ b|ε。
② 对 S→aSe|B、B→bBe|C 和 C→cCe|d
各产生式的候选式的FIRST集合均不相交; 即
FIRST(aSe) ∩ FIRST(B)= ;
FIRST(bBe) ∩ FIRST(C)= ;
FIRST(cCe) ∩ FIRST(d)= ;
③ FIRST(S)={ a,b,c,d } ,FIRST(B)={ b,c,d }
预测分析表:
FOLLOW(T’)={)}
a S S→a T T→ST’ T’
2020/5/8
^ S→^ T→ST’
( S→(T) T→ST’
) T’→ε
, T’→ ,ST’
a
#
66
CH4.1.(3) 给出对符号串(a,^) 的分析过程
步骤
0 1 2 3 4
5 6 7 8 9 10 11 12
符号栈
3.下面文法中, 哪些是LL(1)的, 说明理由。 (3) S→ABBA A→ a|ε B→ b|ε。
解,虽然
FOLLOW(S)={#}
① 文法不含左递归;
FIRST(S)={a, b,ε}
② 对 A→a|ε,其候选式的FIRST集合不相交;
对 B→b|ε,其候选式的FIRST集合也不相交;
但 对 A→a|ε (由 B→b|ε出发证明也可)
但, FOLLOW(B)={c} FIRST(B)={b,ε} 两者也不相交。
所以,文法是LL(1)文法。
a
88
CH.4.练习题3(P82.)
3.下面文法中, 哪些是LL(1)的, 说明理由。 (2) S→Ab A→ a|B|ε B→ b|ε。
解(1) 因为
FOLLOW(S)={#}
对 A→a|B|ε ;
else error
end
else error
End;
a
33
wk.baidu.com
CH.4.练习题1(P81.)
解(1) 不带回溯的递归 子程序: T→ST’ Procedure T; Begin S; T’ end;
解(1) 不带回溯的递归 子程序:
T’→,ST’|ε
procedure T’;
begin
if sym=‘,’ then
所以,G1’是LL(1)文法。 a
55
CH.4.练习题1(P81.)
(2)构造G1’的预测分析表:
① 对S→a|^|(T)
② 对T→ST’
FIRST(a)={a}
FIRST(ST’)={a,^,(}
FIRST(^)={^}
③ 对 T’→,ST’|ε
FIRST((T))={(}
FIRST(,ST’)={,}
#S #)T( #)T #)T’S #)T’a
#)T’ #)T’S, #)T’S #)T’^ #)T’ #) # #
输入串
(a,^)# (a,^)# a,^)# a,^)# a,^)#
,^)# ,^)# ^)# ^)#
)# )# # #
动作, 所用产生式 .
初始;用 S , ( 查表 S→(T), 展开S 匹配(;用 T , a 查表 T→ST’ , 展开T; 用 S ,a 查表 S→ a, 展开S