《编译原理》期末复习资料完整版.docx
《《编译原理》期末复习资料完整版.docx》由会员分享,可在线阅读,更多相关《《编译原理》期末复习资料完整版.docx(21页珍藏版)》请在冰豆网上搜索。
《编译原理》期末复习资料完整版
1.给出语言{anbnambm|n,m≥0}的一个上下文无关文法。
(6分)
解:
G[S]:
S—>AB
A—>aAb|ε
B—>aBb|ε
2.给出语言{1n0m1m0n|n,m≥0}的一个上下文无关文法。
解:
G[S]:
S—>1S0|A
A—>0A1|ε
3.P48第6题(5)、(6).画语法树
6、已知文法G:
<表达式>:
:
=<项>|<表达式>+<项>
<项>:
:
=<因子>|<项>*<因子>
<因子>:
:
=(<表达式>)|i
(5)i+(i+i) (6)i+i*i
解:
(5)语法树:
(6)语法树:
4.P48第13题 直接短语等
13、一个上下文无关文法生成句子abbaa的推导树如下:
(3)求直接短语
解:
直接短语有:
a ε b
P102例题6.1及其分析.(后加画语法树)
例6.1设文法G[S]为:
(1)S—>aAcBe
(2)A—>b
(3)A—>Ab
(4)B—>d
对输入串abbcde#进行分析,检查该符号串是否是G[S]的句子。
解:
设一个先进后出的符号符,并把句子左括号“#”号放入栈底,其分析过程如下:
步骤
符号栈
输入符号串
动作
(1)
#
abbcde#
移进
(2)
#a
bbcde#
移进
(3)
#ab
bcde#
归约(A—>b)
(4)
#aA
bcde#
移进
(5)
#aAb
cde#
归约(A—>Ab)
(6)
#aA
cde#
移进
(7)
#aAc
de#
移进
(8)
#aAcd
e#
归约(B—>d)
(9)
#aAcB
e#
移进
(10)
#aAcBe
#
归约(S—>aAcBe)
(11)
#S
#
接受
语法树如下:
一、计算分析题(60%)
1、正规式→NFA→DFA→最简DFA
P72第1题
(1)、(4);
第一题1、构造下列正规式相应的DFA.
(1)1(0|1)*101
解:
先构造NFA
用子集法将NFA确定化
0
1
S
A
A
A
AB
AB
AC
AB
AC
A
ABZ
ABZ
AC
AB
除S,A外,重新命名其他状态,令AB为B、AC为C、ABZ为D,因为D含有Z(NFA的终态),所以D为终态,因此有:
0
1
S
A
A
A
B
B
C
B
C
A
D
D
C
B
得到DFA如下所示:
(4)b((ab)*|bb)*ab
解:
先构造NFA
得到DFA如下所示:
P72第4题(a)
4、把下图确定化和最小化
解:
确定化:
用子集法将NFA确定化
a
b
0
01
1
01
01
1
1
0
重新命名,以A、B、C代替{0}、{01}、{1},其中A为初态,A,B为终态,因此有:
a
b
A
B
C
B
B
C
C
A
最小化:
:
初始分划得终态组{A,B},非终态组{C}
Π0:
{A,B},{C},对终态组进行审查,判断A和B是等价的,故这是最后的划分。
重新命名,以A、C代替{A,B}、{C},因此有:
a
b
A
A
C
C
A
即DFA最小化如下:
第7题
7、给文法G[S]:
S→aA|bQ
A→aA|bB|b
B→bD|aQ
Q→aQ|bD|b
D→bB|aA
E→aB|bF
F→bD|aE|b
构造相应的最小的DFA。
解:
先构造NFA:
用子集法将NFA确定化:
a
b
S
A
Q
A
A
BZ
BZ
Q
D
B
Q
D
Q
Q
DZ
DZ
A
B
D
A
B
将S、A、BZ、B、Q、DZ、D重新命名,分别用0、1、2、3、4、5、6表示。
因为2、5中含有Z,所以它们为终态。
因此有:
a
b
0
1
4
1
1
2
2
4
6
3
4
6
4
4
5
5
1
3
6
1
3
初始分划得:
终态组{2,5},非终态组{0,1,3,46}
Π0:
{2,5},{0,1,3,4,6}
对{0,1,3,4,6}进行审查:
{1,4}输入b到达{2,5},而{0,3,6}输入b到达{3,4,6},故得到新分划{1,4},{0,3,6}
Π1:
{2,5},{1,4},{0,3,6}
对{0,3,6}进行审查:
{0}经过b到达{2},{3,6}经过b到达{3,6},故得到新分划{0},{3,6}
Π3:
得到最后划分{0},{1,4},{2,5},{3,6}
重新命名,以A,B,C,D分别代替{0},{1,4},{2,5},{3,6},其中A为始态,C为终态,可得到最小DFA如下:
2、自顶向下方法
(一)设文法G(E):
E→E+T|T
T→T*F|F
F→i|(E)
(1)判断是否为LL
(1)文法.
(2)构造文法的预测分析表.
解:
详见P93-96例题。
(1)由于文法中含有左递归,所以必须先消除左递归,使文法变为:
E→TE`
E`→+TE`|ε
T→FT`
T`→*FT`|ε
F→i|(E)
FIRST集合如下:
FIRST(E)={(,i}
FIRST(E`)={+,ε}
FIRST(T)={(,i}
FIRST(T`)={*,ε}
FIRST(F)={(,i}
FOLLOW集合如下:
FOLLOW(E)={),#}
FOLLOW(E`)={),#}
FOLLOW(T)={+,),#}
FOLLOW(T`)={+,),#}
FOLLOW(F)={+,*,),#}
各产生式的SELECT集合如下:
SELECT(E→TE`)={(,i}
SELECT(E`→+TE`)={+}
SELECT(E`→|ε)={),#}
SELECT(T→FT`)={(,i}
SELECT(T`→*FT`)={*}
SELECT(T`→|ε)={+,),#}
SELECT(F→i)={i}
SELECT(F→(E))={(}
由上可知有相同左部产生式的SELECT集合的交集为空,故文法是LL
(1)文法。
(2)构造文法的预测分析表如下:
i
+
*
(
)
#
E
→TE`
→TE`
E`
→+TE`
→ε
→ε
T
→FT`
→FT`
T`
→ε
→*FT`
→ε
→ε
F
→i
→(E)
(二)P1016.(4)改写下面文法为LL
(1)文法,井对每个LL
(1)文法构造相应的预测分析表。
解:
3、自底向上方法
已知文法G(E):
[0]S'→E
[1]E→E+T[2]E→T
[3]T→T*F[4]T→F
[5]F→(E) [6]F→i
(1)证明该文法是SLR
(1)文法.
(2)若已给出下面的SLR
(1)分析表,试分析句子(i+(*i))#输入串出错的位置。
状态
ACTION
GOTO
i
+
*
(
)
#
E
T
F
0
S5
S4
1
2
3
1
S6
acc
2
r2
S7
r2
r2
3
r4
r4
r4
r4
4
S5
S4
8
2
3
5
r6
r6
r6
r6
6
S5
S4
9
3
7
S5
S4
10
8
S6
S11
9
r1
S7
r1
r1
10
r3
r3
r3
r3
11
r5
r5
r5
r5
3、解:
(1):
先分析LR(0)项目:
由上可见:
I1,I2,I9存在移进—归约冲突.分析FOLLOW集:
因为:
对I1FOLLOW(S’)={#}∩{+}=ф
对I2FOLLOW(E)={+,#,)}∩{*}=ф
对I9FOLLOW(E)={+,#,)}∩{*}=ф
所以是SLR
(1)文法。
(2):
STEP
S
X
(i+(*i)#
action
goto
1
0
#
(i+(*i)#
S4
2
04
#(
i+(*i)#
S5
3
045
#(i
+(*i)#
r6
3
4
043
#(F
+(*i)#
r4
2
5
042
#(T
+(*i)#
r2
8
6
048
#(E
+(*i)#
S6
7
0486
#(E+
(*i)#
S4
8
04864
#(E+(
*i)#
error
4、
(一)给出语句ifa+b>b+c*dthenwhilex*y>3dox:
=x-a*belse
whileb+c*d>10dob:
=b-(x*y+5)相应的三地址代码.
(1)
t1=a+b
(12)
goto(6)
(2)
t2=c*d
(13)
goto(23)
(3)
t3=b+t2
(14)
t7=c*d
(4)
ift1>t3goto(6)
(15)
t8=b+t7
(5)
goto(14)
(16)
ift8>10goto(18)
(6)
t4=x*y
(17)
goto(23)
(7)
ift4>3goto(9)
(18)
t9=x*y
(8)
goto(13)
(19)
t10=t9+5
(9)
t5=a*b
(20)
t11=b-t10
(10)
t6=x-t5
(21)
b=t11
(11)
x=t6
(22)
goto(14)
(23)
(二)While a>0∨b<0 do
Begin
X:
=X+1;
ifa>0thena:
=a-1
elseb:
=b+1
End;
翻译成四元式序列.(10分)
●解:
(1)(j>,a,0,5)
(2)(j,_,_,3)
(3)(j<,b,0,5)
(4)(j,_,_,15)
(5)(+,x,1,T1)
(6)(:
=,T1,_,x)
(7)(j>,a,0,9)
(8)(j,_,_,12)
(9)(-,a,1,T2)
(10)(:
=,T2,_,a)
(11)(j,_,_,1)
(12)(+,b,1,T3)
(13)(:
=,T3,_,b)
(14)(j,_,_,1)
(15)
5、
(一)设有基本块(10分)
T1:
=2
T2:
=10∕T1
T3:
=S-R
T4:
=S+R
A:
=T2*T4
B:
=A
T5:
=S+R
T6:
=T3*T5
B:
=T6
(1)画出DAG图;
(2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
5
(一)、解:
(1)DAG:
(3分)
(2)优化后的四元式
T3:
=S-R
T4:
=S+R
A:
=5*T4
B:
=T3+T4
(二)P255-257DAG图
例试构造以下基本块G的DAG
(1)T0:
=3.14
(2)T1:
=2*T0
(3)T2:
=R+r
(4)A:
=T1*T2
(5)B:
=A
(6)T3:
=2*T0
(7)T4:
=R+r
(8)T5:
=T3*T4
(9)T6:
=R-r
(10)B:
=T5*T6
(11)ifB<=10goto
(1)
(1)画出DAG图;
(2)假设基本块出口时只有A,B还被引用,请写出优化后的四元序列。
解:
(1)DAG图如下:
(2)四元序列如下:
T2:
=R+r
T6:
=R-r
A:
=6.28*T2
B:
=A*T6
四、
●1.1
先给出NFA图:
画状态转换表:
I
0
1
A
B
C'
D'
E'
A
B
BC
BD
CBE
B
BD
B
BD
B
BC
BC
BCE
BC
得DFA如下图:
1.4
画状态转换表:
I
0
1
A
B
C
D
E
0
1
24
5
13
24
24
1
5
13
1
5
由NFA,得DFA如图:
●P72第4题(a)
画状态转换表:
I
Ia
Ib
A
B
C
0
01
1
01
01
0
1
1
得DFA如下图:
第7题.解:
画状态转换表(设G为终态):
I
a
b
S
A
Q
BG
DG
D
B
E
F
A
A
Q
Q
A
A
Q
B
E
Q
BG
DG
D
B
B
D
F
DG
用划分法化简DFA如下:
得最简DFA如下图: