编译原理课后答案第三版.docx
《编译原理课后答案第三版.docx》由会员分享,可在线阅读,更多相关《编译原理课后答案第三版.docx(15页珍藏版)》请在冰豆网上搜索。
![编译原理课后答案第三版.docx](https://file1.bdocx.com/fileroot1/2023-1/27/5518fe2d-2ece-462f-9089-caa114afe7ab/5518fe2d-2ece-462f-9089-caa114afe7ab1.gif)
编译原理课后答案第三版
三
12将图a确定化最小化
a,b
a
a
图a
解:
引入新的初态结点X和终态结点Y(X,Y不属于源非确定集)得图如下:
a
εεεε
a,ba
列出状态转换矩阵如下所示:
ab
A{X,0,Y}{0,1,Y}{1}
B{0,1,Y}{0,1,Y}{1}
C{1}{0,Y}ø
D{0,Y}{0,1,Y}{1}
DFA如下:
a
ab
bb
ba
最少化:
终态{A,B,D}a={A,B}∈{A,B,D}
{A,B,D}b={B,}∈{A,B,D}
∴最少化为:
a
b
a
(b)将图b最少化
b
ba
b
a
a
a
b
ba
ab
图b
解:
终态{0,1}a∈{0,1}
{0,1}b={2,4}∈{2,3,4,5}
∴{0,1}不能再分
非终态{2,3,4,5}a={0,1,3,5}
{2,4}a={0,1}{2,4}b={3,5}
{3,5}a={3,5}{3,5}b={2,4}
0代表{0,1},2代表{2,4},3代表{3,5}得最少化为:
aba
bb
a
14.构造一个DFA,它接收∑={0,1}上所有满足如下条件的字符串:
每个1都有0直接跟在右边。
解:
构造正规式为:
(0|10)*
则可构造如下NFA:
ε
0
εε
εε
ε10
ε
ε
列出状态转换矩阵如下:
01
A{q0,F,A,C,qf}{B,G,F,A,C,qf}{D}
B{B,G,F,A,C,qf}{B,G,F,A,C,qf}{D}
C{D}{E,G,F,A,B,C,qf}ø
D{E,G,F,A,B,C,qf}{B,G,F,A,C,qf}{D}
则得DFA如下:
0
0
0
1
10
1
最少化得{A,B,D}0={B}{A,B,D}1={C}
0
1
0
15.给定右线性文法G:
S->0S|1S|1A|0B
A->1C|1
B->0C|0
C->0C|1C|0|1
求出一个与G等价的左线性文法。
解:
由G得NFA=<{S,A,B,C}∪{f},{0,1},δ,S,{f}>
1
0,111
0,10,1
00
0
由NFA得左线性文法:
GL=<{0,1},{A,B,C,f},f,ρ’>
ρ’:
A->1
B->0
C->A1|B0|C0|C1
f->A1|B0|C0|C1
四
1.考虑下面文法G:
S->a|^|(T)
T->T,S|S
(1)消除G的左递归
(2)改写后的文法是否是LL
(1)的?
给出预分析表。
解:
(1)S->a|^|(T)
T->ST’
T’->,ST’|ε
(2)
FIRSTFOLLOW
Sa,^,(#,,,)
Ta,^,()
T’,,ε)
预分析表:
a^(),#
SS->aS->^S->(T)
TT->ST’T->ST’T->ST’
T’T’->εT->,ST’
是LL
(1)的。
五
5.文法S->AS|b
A->SA|a
(1)列出所有LR(0)项目
(2)构造LR(0)项目集规范族及识别活前缀的DFA
(3)
该文法是SLR的么?
若是构造它的SLR分析表。
解:
扩展文法:
S’->SS
S->AS|b
A->SA|ab
A
a
S
A
a
SbA
bbS
aa
S
AbA
aaS
b
A
(3)
FollowFirst
S’#a,b
S#,a,ba,b
Aa,ba,b
冲突项目I1中:
有接受项目和移进冲突,可解决.
#a,b
I5,I7存在移进,归约冲突,不可解决.
∵Follow(S)∩a∩b≠○
所以,该文法不是SLR的
8.证明下面的文法S->AaAb|BbBa
A->ε
B->ε
是LL
(1)文法。
①不含左递归;
②First(α1)∩First(α2)∩…=○
③First(A)∩Follow(A)=○
∴该文法是LL
(1)文法
七
1.给出下面表达式的逆波兰表示(后缀式):
a*(-b+c)
a+b*(c+d/e)
notAornot(CornotD)
(AandB)or(notCorD)
后缀式分别为:
ab-c+*
abcde/+*+
AnotCDnotornotor
ABandCnotDoror
3.请将表达式-(a+b)*(c+d)-(a+b+c)分别表示成三元式、间接三元式和四元式序列。
三元式:
(0)(+,a,b)
(1)(-,(0),_)
(2)(+,c,d)
(3)(*,
(1),
(2))
(4)(+,a,b)
(5)(+,(4),c)
(6)(-,(3),(5))
间接三元式:
(1)(+,a,b)
(2)(-,
(1),_)
(3)(+,c,d)
(4)(*,
(2),(3))
(5)(+,
(1),c)
(6)(-,(4),(5))
间接代码:
(1)
(2)
(3)
(4)
(1)
(5)
(6)
四元式:
(0)(+,a,b,T1)
(1)(-,T1,_,T2)
(2)(+,c,d,T3)
(3)(*,T2,T3,T4)
(4)(+,a,b,T5)
(5)(+,T5,c,T6)
(6)(-,T4,T6,T7)
7.用7.5.1节的方法,把下面语句翻译成四元式序列:
WhileAIfA=1thenC:
=C+1
ElsewhileA≤DdoA:
=A+2;
100(j<,A,C,102)
101(j,_,_,115)
102(j<,B,D,104)
103(j,_,_,115)
104(j=,A,1,106)
105(j,_,_,109)
106(+,C,1,T1)
107(:
=,T1,_,C)
108(j,_,_,114)
109(j≤,A,D,111)
110(j,_,_,115)
111(+,A,2,T2)
112(:
=,T2,_,A)
113(j,_,_,109)
114(j,_,_,100)
115
十
3.试对以下基本块B1和B2:
B1:
A:
=B*C
D:
=B/C
F:
=2*E
G:
=B*C
H:
=G*G
F:
=H*G
L:
=F
M:
=L
B2:
B:
=3
D:
=A+C
E:
=A*C
G:
=B*F
H:
=A+C
I:
=A*C
J:
=H+I
K:
=B*5
L:
=K+J
M:
=L
分别应用DAG对它们进行优化,并就以下两种情况分别写出优化后的四元式序列:
(1)假设只有G,L,M在基本块后面还要被引用;
(2)假设只有L在基本块后面还要被引用。
解:
B1:
F,L,M
*E
H
2+
*
A,GD
/
*
BC
B1优化后:
A:
=B*C
(1)G:
=B*C
(2)G:
=B*C
D:
=B/CH:
=G*GH:
=G*G
E:
=A+DL:
=G*HL:
=G*H
G:
=AM:
=L
H:
=G*G
F:
=H*G
L:
=F
M:
=L
B2:
L,M
+
+
E,I
D,H
G
+*
*K
B
F315AC
„‘
B2优化后:
B:
=3
(1)G:
=3*F
(2)H:
=A+C
D:
=A+CH:
=A+CI:
=A*C
E:
=A*CI:
=A*CJ:
=H+I
G:
=B*FJ:
=H+IL:
=15+J
H:
=DL:
=15+J
I:
=EM:
=L
J:
=H+I
K:
=15
L:
=K+J
M:
=L
5.以下程序是某程序的最内循环,试对它进行循环优化
A:
=0
I:
=1
L1:
B:
=J+1
C:
=B+I
A:
=C+A
IfI=100GOTOL2
I:
=I+1
GOTOL1
L2:
解:
代码外提:
B:
=J+1
删除归纳变量I:
由C:
=B+I可知I和C成线性关系
所以I=100和C=B+100等价,即替换为:
R:
=100+B
IFC=BGOTOL2
同理I:
=I+1可替换成C:
=C+1
综上所述代码优化后为:
A:
=0
B:
=J+1
C:
=B+1
R:
=100+B
L1:
A:
=C+A
IfC=RGOTOL2
C:
=C+1
GOTOL1
L2: