编译原理课后习题答案陈火旺+第三版doc.docx
《编译原理课后习题答案陈火旺+第三版doc.docx》由会员分享,可在线阅读,更多相关《编译原理课后习题答案陈火旺+第三版doc.docx(72页珍藏版)》请在冰豆网上搜索。
编译原理课后习题答案陈火旺+第三版doc
.
第二章
P36-6
(1)
L(G1)是0~9组成的数字串
(2)
最左推导:
N
ND
NDD
NDDD
DDDD
0DDD
01DD
012D0127
N
ND
DD
3D
34
N
ND
NDD
DDD
5DD
56D
568
最右推导:
N
ND
N7
ND7
N27
ND27
N127
D127
0127
N
ND
N4
D4
34
N
ND
N8
ND8
N68
D68
568
P36-7
G(S)
O1|3|5|7|9
N2|4|6|8|OD0|N
SO|AOAAD|N
P36-8
文法:
ET|ET|ET
TF|T*F|T/FF(E)|i
最左推导:
E
ET
TT
FTiT
iT*F
iF*F
ii*Fii*i
E
T
T*F
F*F
i*F
i*(E)i*(ET)
i*(TT)
i*(FT)
i*(i
T)
i*(i
F)
i*(i
i)
最右推导:
E
ET
ET*F
ET*i
EF*i
Ei*i
Ti*i
Fi*iii*i
E
T
F*T
F*F
F*(E)
F*(ET)
F*(EF)
F*(Ei)
F*(Ti)
F*(Fi)
F*(ii)
i*(ii)
语法树:
/********************************
.
.
E
E
E
E
+
T
E
+
T
E
-
T
E
+
T
F
T
T
*
F
E
-
T
F
T
F
i
F
F
i
T
F
i
F
i
i
i
F
i
i
i
i+i+i
i-i-i
i+i*i
*****************/
P36-9
句子iiiei有两个语法树:
SiSeSiSeiiiSeiiiiei
SiSiiSeSiiSeiiiiei
P36-10
/**************
STS|T
T(S)|()
***************/
P36-11
/***************
L1:
S
AC
A
aAb|ab
C
cC|
L2:
S
AB
A
aA|
B
bBc|bc
L3:
.
.
SAB
AaAb|BaBb|
L4:
SA|BA0A1|B1B0|A
***************/
第三章习题参考答案
P64–7
(1)
1(01|)*101
XY
0
1
1
0
1
X
1
2
3
4
5
Y
1
确定化:
0
1
{X}
φ
{1,2,3}
φ
φ
φ
{1,2,3}
{2,3}
{2,3,4}
{2,3}
{2,3}
{2,3,4}
{2,3,4}
{2,3,5}
{2,3,4}
{2,3,5}
{2,3}
{2,3,4,Y}
{2,3,4,Y}
{2,3,5}
{2,3,4,}
0
1
0
2
3
0
0
0
1
1
0
1
0
1
5
6
4
0
1
11
最小化:
.
.
{0,1,2,3,4,5},{6}
{0,1,2,3,4,5}0
{1,3,5}
{0,1,2,3,4,5}1
{1,2,4,6}
{0,1,2,3,4},{5},{6}
{0,1,2,3,4}0
{1,3,5}
{0,1,2,3},{4},{5},{6}
{0,1,2,3}0
{1,3}
{0,1,2,3}1
{12,,4}
{0,1},{
2,3}{4},{
5},{
6}
{0,1}0
{1}
{0,1}1
{1,2}
{2,3}0
{3}
{2,3}
1
{4}
{0},{1},{2,3},{4},{5},{6}
0
1
02
0010
0
1
1
3
4
5
0
1
11
P64–8
(1)
(1|0)*01
(2)
(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*(0|5)|(0|5)
(3)
0*1(0|10*1)*|1*0(0|10*1)*
P64–12
(a)
a
a,b
01
a
确定化:
a
b
{0}
{0,1}
{1}
{0,1}
{0,1}
{1}
{1}
{0}
φ
.
.
φφφ
给状态编号:
a
b
0
1
2
1
1
2
2
0
3
3
3
3
a
a
0
1
a
b
b
b
b
2
3
a
最小化:
{0,1},{
2,3}
{0,1}a
{1}
{0,1}b
{2}
{2,3}a
{0,3}
{2,3}b
{3}
{0,1},{
2},{
3}
a
a
b
b
0
1
2
a
b
(b)
b
b
a
0
2
3
a
b
a
ab
b
1
a
5
a
4
a
已经确定化了
进行最小化
.
.
最小化:
{{0,1},{2,3,4,5}}
{0,1}a
{1}
{0,1}b
{2,4}
{2,3,4,5}a{1,3,0,5}
{2,3,4,5}b{2,3,4,5}
{2,4}a
{1,0}
{2,4}b
{3,5}
{3,5}a
{3,5}
{3,5}b
{2,4}
{{0,1},{
2,4},{
3,5}}
{0,1}a
{1}
{0,1}b
{2,4}
{2,4}a
{1,0}
{2,4}b
{3,5}
{3,5}a
{3,5}
{3,5}b
{2,4}
bba
012
ab
a
P64–14
(1)0
1
0
1
0
(2):
X
(
|)
*
010
Y
2
0
1
X1Y
0
确定化:
01
{X,1,Y}{1,Y}{2}
.
.
{1,Y}
{1,Y}
{2}
{2}
{1,Y}
φ
φ
φ
φ
给状态编号:
0
1
0
1
2
1
1
2
2
1
3
3
3
3
0
0
0
1
1
0
1
1
1
2
3
0
最小化:
{0,1},{2,3}
{0,1}0
{1}
{0,1}1
{2}
{2,3}0
{1,3}
{2,3}1
{3}
{0,1},{2},{3}
0
1
1
1
0
1
3
0
0
第四章
P81–1
(1)按照T,S的顺序消除左递归
G(S)
Sa|^|(T)
TST
T,ST|
递归子程序:
procedureS;
begin
ifsym='a'orsym='^'
thenabvance
elseifsym='('
.
.
thenbegin
advance;T;
ifsym=')'thenadvance;
elseerror;
end
elseerror
end;
procedureT;
begin
S;T
end;
procedureT;
begin
ifsym=','
thenbegin
advance;
S;T
end
end;
其中:
sym:
是输入串指针IP所指的符号
advance:
是把IP调至下一个输入符号
error:
是出错诊察程序
(2)
FIRST(S)={a,^,(}
FIRST(T)={a,^,(}
FIRST(T)={,,}
FOLLOW(S)={),,,#}
FOLLOW(T)={)}
FOLLOW(T)={)}
预测分析表
a^(),#
SSaS^S(T)
TTSTTSTTST
TTT,ST
是LL
(1)文法
P81–2
文法:
.
.
ETE
EE|
TFT
TT|
FPF
F*F|
P(E)|a|b|^
(1)
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,^,+,),#}
(2)
考虑下列产生式:
EE|
TT|
F*F|
P(E)|^|a|b
FIRST(+E)∩FIRST(ε)={+}∩{ε}=φ
FIRST(+E)∩FOLLOW(E')={+}∩{#,)}=φ
FIRST(T)∩FIRST(ε)={(,a,b,^}∩{ε}=φ
FIRST(T)∩FOLLOW(T')={(,a,b,^}∩{+,),#}=φ
FIRST(*F')∩FIRST(ε)={*}∩{ε}=φ
FIRST(*F')∩FOLLOW(F')={*}∩{(,a,b,^,+,),#}=φ
FIRST((E))∩FIRST(a)∩FIRST(b)∩FIRST(^)=φ
所以,该文法式LL
(1)文法.
(3)
+*()ab^#
EETE'ETE'ETE'ETE'
E'EEEE
TTFTTFTTFTTFT
T'TTTTTTTTTTT
.
.
F
F'
P
FPFFPFFPFFPF
FF*FFFFFFF
P(E)PaPbP^
(4)
procedureE;
begin
ifsym='('orsym='a'orsym='b'orsym='^'
thenbeginT;E'end
elseerror
end
procedureE';
begin
ifsym='+'
thenbeginadvance;Eend
elseifsym<>')'andsym<>'#'thenerror
end
procedureT;
begin
ifsym='('orsym='a'orsym='b'orsym='^'
thenbeginF;T'end
elseerror
end
procedureT';
begin
ifsym='('orsym='a'orsym='b'orsym='^'
thenT
elseifsym='*'thenerror
end
procedureF;
begin
ifsym='('orsym='a'orsym='b'orsym='^'
thenbeginP;F'end
elseerror
end
procedureF';
begin
ifsym='*'
thenbeginadvance;F'end
end
procedureP;
begin
ifsym='a'orsym='b'orsym='^'
thenadvance
elseifsym='('then
.
.
begin
advance;E;
ifsym=')'thenadvance
elseerror
end
elseerror
end;
P81–3
/***************
(1)是,满足三个条件。
(2)不是,对于A不满足条件3。
(3)不是,A、B均不满足条件3。
(4)是,满足三个条件。
***************/
第五章
P133–1
EETET*F
短语:
E+T*F,T*F,
直接短语:
T*F
句柄:
T*F
P133–2
文法:
Sa|^|(T)TT,S|S
(1)
最左推导:
S(T)(T,S)(S,S)(a,S)(a,(T))(a,(T,S))(a,(S,S))(a,(a,S))(a,(a,a))
S(T,S)(S,S)((T),S)((T,S),S)((T,S,S),S)((S,S,S),S)(((T),S,S),S)
(((T,S),S,S)),S)(((S,S),S,S),S)(((a,S),S,S),S)(((a,a),S,S),S)
(((a,a),^,S),S)(((a,a),^,(T)),S)(((a,a),^,(S)),S)(((a,a),^,(a)),S)
(((a,a),^,(a)),a)
最右推导:
S(T)(T,S)(T,(T))(T,(T,S))(T,(T,a))(T,(S,a))(T,(a,a))
(S,(a,a))(a,(a,a))
S(T,S)(T,a)(S,a)((T),a)((T,S),a)((T,(T)),a)((T,(S)),a)
((T,(a)),a)((T,S,(a)),a)((T,^,(a)),a)((S,^,(a)),a)(((T),^,(a)),a)
(((T,S),^,(a)),a)(((T,a),^,(a)),a)(((S,a),^,(a)),a)(((a,a),^,(a)),a)
(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
#
(((
a,a),^,(a)),a)#
预备
1
#(
((
a,a),^,(a)),a)#
进
2
#((
(a,a),^,(a)),a)#
进
3
#(((
a,a),^,(a)),a)#
进
4
#(((a
a),^,(a)),a)#
进
5
#(((S
a),^,(a)),a)#
归
6
#(((T
a),^,(a)),a)#
归
7
#(((T,
a),^,(a)),a)#
进
8
#(((T,a
),^,(a)),a)#
进
9
#(((T,S
),^,(a)),a)#
归
10
#(((T
),^,(a)),a)#
归
11
#(((T)
^,(a)),a)#
进
12
#((S
^,(a)),a)#
归
13
#((T
^,(a)),a)#
归
14
#((T,
^,(a)),a)#
进
15
#((T,^
(a)),a)#
进
16
#((T,S
(a)),a)#
归
17
#((T
(a)),a)#
归
18
#((T,
(a)),a)#
进
19
#((T,(
a)),a)#
进
20
#((T,(a
)),a)#
进
21
#((T,(S
)),a)#
归
22
#((T,(T
)),a)#
归
23
#((T,(T)
),a)#
进
24
#((T,S
),a)#
归
25
#((T
),a)#
归
.
.
26
#((T)
a)#
进
27
#(S
a)#
归
28
#(T
a)#
归
29
#(T,
a)#
进
30
#(T,a
)#
进
31
#(T,S
)#
归
32
#(T
)#
归
33
#(T)
#
进
34
#S
#
归
P133–3
(1)
FIRSTVT(S)={a,^,(}
FIRSTVT(T)={,,a,^,(}
LASTVT(S)={a,^,)}
LASTVT(T)={,,a,^,)}
(2)
a
^
(
)
a
>
>
^
>
>
(
<
<
<
=
<
)
>
>
<
<
<
>
>
G6是算符文法,并且是算符优先文法
(3)优先函数
a
^
(
)
f
4
4
2
4
4
g
5
5
5
2
3
f
f
f
f
f
a
^
(
)
g
g
g
g
g
a
^
(
)
(4)
栈
输入字符串
动作
#
(a,(a,a))#
预备
#(
a,(a,a))#
进
#(a
(a,a))#
进
#(t
(a,a))#
归
.
.
#(t,
(a,a))#
进
#(t,
(
a,a))#
进
#(t,(a
a))#
进
#(t,(t
a))#
归
#(t,
(t,
a))#
进
#(t,
(t,a
))#
进
#(t,
(t,s
))#
归
#(t,(t
))#
归
#(t,
(t)
)#
进
#(t,s
)#
归
#(t
)#
归
#(t
)
#
进
#s
#
归
success
P134–5
(1)
0.
S
S
1.S
S
2.S
AS3.
S
AS
4.
S
AS5.
S
b
6.S
b
7.
A
SA
8.
A
SA9.
A
SA
10.
A
a
11.A
a
(2)
1
SA
S
7
8
9
a
0
10
11
A
S
2
3
4
d
56
确定化:
S
A
a
b
{0,2,5,7,10}
{1,2,5,7,8,10
{