编译原理复习题答案
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
# Expr
id((id)) #
9
# ExprTail Var
id((id)) #
Expr →Var ExprTail
10 # ExprTail VarTail id
id((id)) #
Var→id VarTail
11 # ExprTail VarTail
((id)) #
12 # ExprTail )Expr(
(要求:先将正规式转化为 NFA,再将 NFA确定化,最小化) 答案: ( 一) 相应的正规式为 (a|b)*ab(a|b)* ( 二) ①与此正规式对应的 NFA为
②状态转换矩阵为:
③ 最小化:
{0 ,1,2} {3 ,4,5}
{0 , 2} ,1, {3 ,4, 5}
b
a
a
a
b
0
1
3
b
④所以此等价的 DFA为:开始状态为 0 ,终态集为 {3} ,状态集为 {0,1,3} ,
2、证明下面文法是 SLR(1)但不是 LR(0) 的。
S→ A
A→ Ab|bBa
B→ aAc|a|aAb
解:文法 G[S] : 0: S→A 1:A→Ab 2:A→bBa 3:B→aAc 4:B→a 5:B→aAb
构造 LR(0) 项目集规范族:
状态 项目集
转换函数
0
S→·A
GO[0,A] =1
答案:文法 G(S):S → AC A→ aaAbb/ab C→ ccCcc/cc
四、词法分析题
1、构造下面正规式相应的 DFA
*
**
((0|1) |(11) )
(要求:先将正规式转化为 NFA,再将 NFA确定化,最小化)
2、构造下面正规式相应的 DFA 1(0|1) * 101
答案:
I
I0
I1
)) #
ExprTail →ε
21 # ExprTail )
)#
22 # ExprTail
#
ExprTail →ε
23 #
#
分析成功
2、对下面的文法 G:
E→ TE’
E’→ +E| ε T→ FT’ T’→ T| ε F→ PF’ F’ →*F ’| ε P→(E)|a|b| ∧ (1) 计算这个文法的每个非终结符的 FIRST 和 FOLLO。W(8 分) 答案: FIRST(E)={(,a,b,^} FIRST(E')={+, ε} FIRST(T)={(,a,b,^} FIRST(T')={(,a,b,^, ε} FIRST(F)={(,a,b,^} FIRST(F')={*, ε} FIRST(P)={(,a,b,^} FOLLOW(E)={#,)} FOLLOW(E')={#,)} FOLLOW(T)={+,),#} FOLLOW(T')={+,),#} FOLLOW(F)={(,a,b,^,+,),#} FOLLOW(F')={(,a,b,^,+,),#} FOLLOW(P)={*,(,a,b,^,+,),#}
3
# ExprTail VarTail
_ _id((id)) #
4
# ExprTail
_ _id((id)) #
VarTail →ε
5
# Expr_
_ _id((id)) #
ExprTail →_ Expr
6
# Expr
_id((id)) #
7
# Expr_
_id((id)) # Expr→_Expr
A→· Ab
GO[0,A] =1
A→· bBa
GO[0,b] =2
1
S→A·
ACCEPT
A→A· b
GO[1,b] =3
2
A→b· Ba
GO[2,B] =4
B→· aAc
GO[2,a] =5
B→· a
GO[2,a] =5
B→· aAb
GO[2,a] =5
3
A→Ab·
R1
4
A→bB· a
GO[4,a] =6
(2) 证明这个文法是 LL(1) 的。(6 分)
答案:考虑下列产生式 :
E
E|
T T|
F *F |
P (E )|^| a|b
FIRST(+E)∩FIRST(ε)={+} ∩{ ε}= φ
FIRST(+E)∩FOLLOW(E')={+}∩{#,)}= φ
FIRST(T) ∩FIRST(ε)={(,a,b,^} ∩{ ε}= φ
答案
0. S S
1. S S
2. S AS 3. S A S
4. S AS 5. S b
6. S b
7. A SA
8. A S A 9. A SA 10. A a 11. A a
(2)给出识别文法所有活前缀的 DFA。(5 分) (3)求所有非终结符的 FOLLOW集。(5 分) (4)文法是 SLR文法吗?若是, 构造出它的 SLR分析表 , 否则说明理 由。(5 分) 不是 SLR文法 状态 3,6,7 有移进归约冲突 状态 3:FOLLOW(’S )={#} 不包含 a,b 状态 6:FOLLOW(S)={#,a,b} 包含 a,b, ;移进归约冲突无法消解 状态 7:FOLLOW(A)={a,b}包含 a,b ;移进归约冲突消解 所以不是 SLR文法。
2
024 #Db aba#
3
0245
#Dba
4
0246
#DbB
5
02467
#DbBb
6
024678 #DbBba #
7
0246
#DbB
8
01
#S
输入串 baba# baba#
ba# ba# a#ຫໍສະໝຸດ ##acc
六、语法分析题 考虑文法 :
S→AS|b A →SA|a
(1) 列出这个文法的所有 LR(0) 项目。(5 分)
((id)) # VarTail →(Expr)
13 # ExprTail )Expr
(id)) #
14 # ExprTail ) )Expr(
(id)) #
Expr → (Expr)
15 # ExprTail ) )Expr
id)) #
16
# ExprTail ) )
Var ExprTail
17 # ExprTail ) )
{X}
Ф
{A,B,C}
{A,B,C}
{ B,C}
{ B,C,D}
{B,C}
{ B,C}
{ B,C,D}
{B,C,D}
{ B,C,E}
{ B,C,D}
{B,C,E}
{ B,C}
{B,C,D,y}
{B,C,D,y}
{B,C,E}
{ B,C,D}
3、构造一个 DFA,它接受 S={a,b} 上所有包含 ab 的字符串。
输入字母表是 {a,b} 状态转换图如上。
4、构造与正规式 b(a|b)*ba 等价的 DFA
五、语法分析题 1、对下面的文法 G: Expr→- Expr Expr→(Expr)|Var ExprTail ExprTail →- Expr| ε Var→id VarTail VarTail →(Expr) | ε
七、证明题
1、证明下面文法是 LL(1) 的但不是 SLR(1)的。
S→ AaAb|BbBa
A→ε
B→ε
首先该文法无左递归存在 , 没有公共左因子。 其次 : 对于 S→AaAb|BbBa FIRST(AaAb)={a} FIRST(BbBa)={b} FIRST(AaAb)∩FIRST(BbBa)=Φ 所以该文法是 LL(1) 文法。 (2) 证明该文法不是 SLR的。 文法的 LR(0) 项目集规范族为 : I0={S ’→ .S S →.AaAb S→.BbBa A→. B →.} I1={ S ’→ S. } I2={ S →A.aAb } I3={ S →B.b Ba } I4={ S →Aa.Ab A→. } I5={ S →Bb.Ba B→. } I6={ S →AaA.b } I7={ S →BbB.a } I8={ S →AaAb. } I9={ S →BbBa. } 考察 I0: FOLLOW(A)={a,b} FOLLOW(B)={a,b} FOLLOW(A∩) FOLLOW(B)= {a,b} 产生规约 - 规约冲突。 所以该文法不是 SLR(1) 文法。
所以 , 该文法式 LL(1) 文法 .
(3) 构造它的预测分析表。(6 分)
3、已知文法 G[S] 为: S->a|(T) T->T,S|S
①消除文法 G[S] 中的左递归,得文法 G′[S] 。
② 文法 G′[S] 是否为 LL(1) 的?若是,给出它的预测分析表。
4、对下面的文法 G:
S ? S úaT| aT |
二、概念题 1、设有文法: P→P+Q|Q Q→ Q*R|R R→ (P)|i (1)证明 Q*R+Q+Q是它的一个句型。(3 分) (2)给出 Q*R+Q+Q的所有短语,直接短语和句柄。 (4 分) (3)给出句子i +i* i的最右推导。 (4 分) (4)给出句子i +i* i的最左推导。 (4 分) 2、设有文法: E→E+T|T T →T*F|F F →(E)|i (1)证明 E+T*F是它的一个句型。(3 分) 答案 : E E T E T * F
úaT
T ? ù aT | ùa
(1) 消除该文法的左递归和提取左公因子;
(2) 构造各非终结符的 FIRST和 FOLLOW集合;
(3) 构造该文法的 LL(1) 分析表,并判断该文法是否是 LL(1) 的。
答案:
5、文法 G(S) 及其 LR分析表如下,请给出串 baba#的分析过程。
(1) S → DbB
5
B→a· Ac
GO[5,A] =7
B→a·
R4
B→a· Ab
GO[5,A] =7
A→· Ab
GO[5,A] =7
A→· bBa
GO[5,b] =2
6
A→bBa·
R2
7
B→aA· c
GO[7,c] =8
B→aA· b
GO[7,b] =9
A→A· b
GO[7,b] =9
(1) 构造 LL(1) 分析表。(12 分) 答案: (1)FIRST(Expr)={_ , ( , id } FIRST(ExprTail)={_ , ε } FIRST(Var)={id} FIRST(VarTail)={ ( , ε} FOLLOW(Expr)={# , ) } FOLLOW(ExprTail) ={# , ) } FOLLOW(Var) ={_ , # , ) } FOLLOW(VarTail) ={_ , # , ) }
FIRST(T) ∩FOLLOW(T')={(,a,b,^} ∩{+,),#}= φ
FIRST(*F') ∩FIRST(ε )={*} ∩{ ε}= φ
FIRST(*F') ∩FOLLOW(F')={*} ∩{(,a,b,^,+,),#}= φ
FIRST((E)) ∩FIRST(a) ∩FIRST(b) ∩FIRST(^)= φ
(2) D → d
(4) B → a
(5) B → Bba
LR
分析表
b 0 r3 1 2 s4 3 r2 4 r6 5 r4 6 s7 7 8 r5
ACTION
D
a
#
s3
acc
S5 r6 r4 r1
S8 r5
(3) D → ε (6) B → ε
GOTO
S
B
D
1
2
6
答案:
步骤 状态
符号
0
0
#
1
02
#D
(1) - c d (2) * b (1) (3) + a (2)
三、词法分析题 给出下面语言的相应文法 L1={anbnambm|n,m ≥ 0} 答案: S→AB|A|B| ∑
A→ aAb|ab B→ aBb|ab 给出下面语言的相应文法 L2={anbnci |n ≥1,i ≥ 0} 答案: S→ AB|B A→ a|aA B→ bBc|bc 给出下面语言的相应文法 L3={ anbncm| m,n ≥1, n 为奇数, m为偶数 } 。
ExprTail Var
id)) #
Exp →
ExprTail VarTail id
id)) #
Var→id VarTail
18 # ExprTail ) )
ExprTail VarTail
)) #
19 # ExprTail ) )
ExprTail
)) #
VarTail →ε
20 # ExprTail ) )
(2) 给出对句子 id —id((id)) 的分析过程。(8 分)
步骤
符号栈
输入串
所用产生式
0
# Expr
id_ _id((id)) #
1
# ExprTail Var
id_ _id((id)) # Expr→Var ExprTail
2
# ExprTail VarTail id
id_ _id((id)) # Var→id VarTail
(2)给出 E+T*F的所有短语,直接短语和句柄。 (4 分) 短语 : E+T*F, T*F, 直接短语 : T*F 句柄 : T*F (3)给出句子i +i* i的最右推导。 (4 分) 3、写出表达式 a+b*(c-d) 对应的逆波兰式和三元式序列。 答案:逆波兰式: (abcd-*+)
三元式序列 : OP ARG1 ARG2