编译原理 第2版 第二版 课后习题答案2.docx
- 文档编号:5617260
- 上传时间:2022-12-29
- 格式:DOCX
- 页数:58
- 大小:698.58KB
编译原理 第2版 第二版 课后习题答案2.docx
《编译原理 第2版 第二版 课后习题答案2.docx》由会员分享,可在线阅读,更多相关《编译原理 第2版 第二版 课后习题答案2.docx(58页珍藏版)》请在冰豆网上搜索。
编译原理第2版第二版课后习题答案2
第7题
第9题
语法树
推导:
S=>SS*=>SS+S*=>aa+a*
11.推导:
E=>E+T=>E+T*F
语法树:
短语:
T*FE+T*F
直接短语:
T*F
句柄:
T*F
12.
第四章
1.1.构造下列正规式相应的DFA
(1)1(0|1)*101
NFA
(2)1(1010*|1(010)*1)*0
NFA
(3)NFA
(4)NFA
2.解:
构造DFA矩阵表示
0
1
{X}0
{z}
{x}
{Z}*
{X,z}
{y}
{X,z}*
{X,z}
{X,y}
{y}
{X,y}
{X,y}
{X,y,z}
{x}
{X,y,z}*
{X,y,z}
{X,y}
其中0表示初态,*表示终态
用0,1,2,3,4,5分别代替{X}{Z}{X,z}{y}{X,y}{X,y,z}
得DFA状态图为:
3.解:
构造DFA矩阵表示
构造DFA的矩阵表示
0
1
{S}0
{V,Q}
{Q,U}
{V,Q}
{Z,V}
{Q,U}
{Q,U}
{V}
{Q,U,Z}
{Z,V}*
{Z}
{Z}
{V}
{Z}
{Q,U,Z}*
{V,Z}
{Q,U,Z}
{Z}
{Z}
{Z}
其中0表示初态,*表示终态
替换后的矩阵
0
1
00
1
2
1
3
2
2
4
5
3*
6
6
4
6
5*
3
5
6
6
6
构造DFA状态转换图(略)
4.
(1)解
构造状态转换矩阵:
a
b
{0}0*
{0,1}
{1}
{0,1}*
{0,1}
{1}
{1}
{0}
转换为
a
b
0*
1
2
1*
1
2
2
0
{2,3}{0,1}
{2,3}a={0,3}
{2},{3},{0,1}
{0,1}a={1,1}{0,1}b={2,2}
确定化,构造DFA矩阵
a
b
S
A
Q
A
A
B,Z
B,Z
Q
D
Q
Q
D,Z
D
A
B
D,Z
A
D
B
Q
D
变换为
a
b
00
1
3
1
1
2
2*
3
4
3
3
5
4
1
6
5*
1
4
6
3
4
化简:
G={(0,1,3,4,6),(2,5)}
{0,1,3,4,6}a={1,3}
{0,1,3,4,6}b={2,3,4,5,6}
所以将{0,1,3,4,6}划分为{0,4,6}{1,3}
G={(0,4,6),(1,3),(2,5)}
{0,4,6}b={3,6,4}所以划分为{0},{4,6}
G={(0),(4,6),(1,3),(2,5)}
不能再划分,分别用0,4,1,2代表各状态,构造DFA状态转换图如下;
8.代入得
S=0(1S|1)|1(0S|0)
=01(S|ε)|10(S|ε)
=(01|10)(S|ε)
=(01|10)S|(01|10)
=(01|10)*(01|10)
构造NFA
由NFA可得正规式为(01|10)*(01|10)=(01|10)+
正规式:
b*a(da|c)*bb*
第五章
1.
S->a|^|(T)
T->T,S|S
(a,(a,a))
S=>(T)=>(T,S)=>(S,S)=>(a,S)=>(a,(T))=>(a,(T,S))=>(a,(S,S))=>(a,(a,a))
S=>(T)=>(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->a|^|(T)
T->T,S
T->S
消除直接左递归:
S->a|^|(T)
T->ST’
T’->,ST’|ξ
SELECT(S->a)={a}
SELECT(S->^)={^}
SELECT(S->(T))={(}
SELECT(T->ST’)={a,^,(}
SELECT(T’->,ST’)={,}
SELECT(T’->ξ)=FOLLOW(T’)=FOLLOW(T)={)}
构造预测分析表
a
^
(
)
#
S
->a
->^
->(T)
T
->ST’
->ST’
->ST’
T’
->ξ
->,ST’
分析符号串(a,a)#
分析栈剩余输入串所用产生式
#S(a,a)#S->(T)
#)T((a,a)#(匹配
#)Ta,a)#T->ST’
#)T’Sa,a)#S->a
#)T’aa,a)#a匹配
#)T’,a)#T’->,ST’
#)T’S,,a)#,匹配
#)T’Sa)#S->a
#)T’aa)#a匹配
#)T’)#T’->ξ
#))#)匹配
##接受
2.
E->TE’E’->+EE’->ξT->FT’T’->TT’->ξF->PF’F’->*F’F’->ξ
P->(E)P->aP->bP->∧
非终结符名
是否=>ε
FIRST集
FOLLOW集
E
否
{(,a,b,^}
{#,)}
E’
是
{+,ε}
{#,)}
T
否
{(,a,b,^}
{+,#,)}
T’
是
{ε,(,a,b,^}
{+,#,)}
F
否
{(,a,b,^}
{(,a,b,^,+,#,)}
F’
是
{*,ε}
{(,a,b,^,+,#,)}
P
否
{(,a,b,^}
{*,(,a,b,^,#,)}
SELECT(E->TE’)=FIRST(TE’)=FIRST(T)={(,a,b,^)
SELECT(E’->+E)={+}
SELECT(E’->ε)=FOLLOW(E’)={#,)}
SELECT(T->FT’)=FIRST(F)={(,a,b,^}
SELECT(T’—>T)=FIRST(T)={(,a,b,^)
SELECT(T’->ε)=FOLLOW(T’)={+,#,)}
SELECT(F->PF’)=FIRST(F)={(,a,b,^}
SELECT(F’->*F’)={*}
SELECT(F’->ε)=FOLLOW(F’)={(,a,b,^,+,#,)}
SELECT(M->bLM)={b}
构造LL
(1)分析表
a
b
e
d
f
o
#
S
->a
->MH
->MH
->MH
->MH
->MH
H
->LSo
->ξ
->ξ
->ξ
K
->ξ
->dML
->ξ
->ξ
L
->eHf
M
->bLM
->K
->K
->K
->K
4.文法含有左公因式,变为
S->C${b,a}
C->bA{b}
C->aB{a}
A->bAA{b}
A->aA’{a}
A’->ξ{$,a,b}
A’->C{a,b}
B->aBB{a}
B->bB’{b}
B’->ξ{$,a,b}
B’->C{a,b}
5.<程序>---S<语句表>――A<语句>――B<无条件语句>――C<条件语句>――D<如果语句>――E
<如果子句>--F
S->beginAendS->beginAend{begin}
A->BA->BA’{a,if}
A->A;BA’->;BA’{;}
A’->ξ{end}
B->CB->C{a}
B->DB->D{if}
C->aC->a{a}
D->ED->ED’{if}
D->EelseBD’->elseB{else}
D’->ξ{;,end}
E->FCE->FC{if}
F->ifbthenF->ifbthen{if}
非终结符是否为空
S-否A-否A’-是B-否C-否D-否D’-是E-否F-否
FIRST(S)={begin}
FIRST(A)=FIRST(B)∪FIRST(A’)∪{ξ}={a,if,;,ξ}
FIRST(A’)={;,ξ}
FIRST(B)=FIRST(C)∪FIRST(D)={a,if}
FIRST(C)={a}
FIRST(D)=FIRST(E)={if}
FIRSR(D’)={else,ξ}
FIRST(E)=FIRST(F)={if}
FIRST(F)={if}
FOLLOW(S)={#}
FOLLOW(A)={end}
FOLLOW(A’)={end}
FOLLOW(B)={;,end}
FOLLOW(C)={;,end,else}
FOLLOW(D)={;,end}
FOLLOW(D’)={;,end}
FOLLOW(E)={else,;end}
FOLLOW(F)={a}
SAA’BCDD’EFifthenelsebeginendab;
if
then
else
begin
end
a
b
;
#
S
->beginAend
A
->BA’
->BA’
A’
->ξ
->;BA’
B
->D
->C
C
->a
D
->ED’
D’
->elseBD’
->ξ
->ξ
E
->FC
F
->ifbthen
6.1.
(1)S->A|B
(2)A->aA|a
(3)B->bB|b
提取
(2),(3)左公因子
(1)S->A|B
(2)A->aA’
(3)A’->A|ξ
(4)B->bB’
(5)B’->B|ξ
2.
(1)S->AB
(2)A->Ba|ξ
(3)B->Db|D
(4)D->d|ξ
提取(3)左公因子
(1)S->AB
(2)A->Ba|ξ
(3)B->DB’
(4)B’->b|ξ
(5)D->d|ξ
3.
(1)S->aAaB|bAbB
(2)A->S|db
(3)B->bB|a
4
(1)S->i|(E)
(2)E->E+S|E-S|S
提取
(2)左公因子
(1)S->i|(E)
(2)E->SE’
(3)E’->+SE’|-SE’|ξ
5
(1)S->SaA|bB
(2)A->aB|c
(3)B->Bb|d
消除
(1)(3)直接左递归
(1)S->bBS’
(2)S’->aAS’|ξ
(3)A->aB|c
(4)B->dB’
(5)B’->bB’|ξ
6.
(1)M->MaH|H
(2)H->b(M)|(M)|b
消除
(1)直接左递归,提取
(2)左公因子
(1)M->HM’
(2)M’->aHM’|ξ
(3)H->bH’|(M)
(4)H’->(M)|ξ
7.
(1)
1)A->baB
2)A->ξ
3)B->Abb
4)B->a
将1)、2)式代入3)式
1)A->baB
2)A->ξ
3)B->baBbb
4)B->bb
5)B->a
提取3)、4)式左公因子
1)A->baB
2)A->ξ
3)B->bB’
4)B’->aBbb|b
5)B->a
(3)
1)S->Aa
2)S->b
3)A->SB
4)B->ab
将3)式代入1)式
1)S->SBa
2)S->b
3)A->SB
4)B->ab
消除1)式直接左递归
1)S->bS’
2)S’->BaS’|ξ
3)S->b
4)A->SB
5)B->ab
删除多余产生式4)
1)S->bS’
2)S’->BaS’|ξ
3)S->b
4)B->ab
(5)
1)S->Ab
2)S->Ba
3)A->aA
4)A->a
5)B->a
提取3)4)左公因子
1)S->Ab
2)S->Ba
3)A->aA’
4)A’->A|ξ
5)B->a
将3)代入1)5)代入2
1)S->aA’b
2)S->aa
3)A->aA’
4)A’->A|ξ
5)B->a
提取1)2)左公因子
1)S->aS’
2)S’->A’b|a
3)A->aA’
4)A’->A|ξ
5)B->a
删除多余产生式5)
1)S->aS’
2)S’->A’b|a
3)A->aA’
4)A’->A|ξ
AA’S’S
将3)代入4)
1)S->aS’
2)S’->A’b|a
3)A->aA’
4)A’->aA’|ξ
将4)代入2)
1)S->aS’
2)S’->aA’b
3)S’->a
4)S’->b
5)A->aA’
6)A’->aA’|ξ
对2)3)提取左公因子
1)S->aS’
2)S’->aS’’
3)S’’->A’b|ξ
4)S’->b
5)A->aA’
6)A’->aA’|ξ
删除多余产生式5)
1)S->aS’
2)S’->aS’’
3)S’’->A’b|ξ
4)S’->b
5)A’->aA’|ξ
第六章
1
Sa|∧|(T)
TT,S|S
解:
(1)增加辅助产生式S’#S#
求FIRSTVT集
FIRSTVT(S’)={#}
FIRSTVT(S)={a∧(}={a∧(}
FIRSTVT(T)={,}∪FIRSTVT(S)={,a∧(}
求LASTVT集
LASTVT(S’)={#}
LASTVT(S)={a∧)}
LASTVT(T)={,a∧)}
(2)
算符优先关系表
a
∧
(
)
#
a
·>
·>
·>
∧
·>
·>
·>
(
<·
<·
<·
=·
<·
)
·>
·>
·>
<·
<·
<·
·>
·>
#
<·
<·
<·
=·
因为任意两终结符之间至多只有一种优先关系成立,所以是算符优先文法
(3)
a∧(),#
F111111
g111111
f221321
g222121
f331331
g444121
f331331
g444121
(4)
栈优先关系当前符号剩余输入串移进或规约
#<·(a,a)#移进
#(<·a,a)#移进
#(a·>,a)#规约
#(T<·,a)#移进
#(T,<·a)#移进
#(T,a·>)#规约
#(T,T·>)#规约
#(T=·)#移进
#(T)·>#规约
#T=·#接受
4.扩展后的文法
S’#S#SS;GSGGG(T)GHHaH(S)
TT+STS
(1)
FIRSTVT(S)={;}∪FIRSTVT(G)={;,a,(}
FIRSTVT(G)={(}∪FIRSTVT(H)={a,(}
FIRSTCT(H)={a,(}
FIRSTVT(T)={+}∪FIRSTVT(S)={+,;,a,(}
LASTVT(S)={;}∪LASTVT(G)={;,a,)}
LASTVT(G)={)}∪LASTVT(H)={a,)}
LASTVT(H)={a,)}
LASTVT(T)={+}∪LASTVT(S)={+,;,a,)}
构造算符优先关系表
;
(
)
a
+
#
;
·>
<·
·>
<·
·>
·>
(
<·
<·
=·
<·
<·
)
·>
·>
·>
·>
·>
a
·>
·>
·>
·>
·>
+
<·
<·
·>
<·
·>
#
<·
<·
<·
=·
因为任意两终结符之间至多只有一种优先关系成立,所以是算符优先文法
(2)
句型a(T+S);H;(S)的
短语有:
a(T+S);H;(S)a(T+S);Ha(T+S)aT+S(S)H
直接短语有:
aT+SH(S)
句柄:
a
素短语:
aT+S(S)
最左素短语:
a
(3)
分析a;(a+a)
栈
优先关系
当前符号
剩余输入串
移进或规约
#
#a
#T
#T;
#T;(
#T;(a
#T;(T
#T;(T+
#T;(T+a
#T;(T+T
#T;(T
#T;(T)
#T;T
#T
<·
·>
<·
<·
<·
·>
<·
<·
·>
·>
=·
·>
·>
=·
a
;
;
(
a
+
+
a
)
)
)
#
#
#
;(a+a)#
(a+a)#
(a+a)#
a+a)#
+a)#
a)#
a)#
)#
#
#
#
移进
规约
移进
移进
移进
规约
移进
移进
规约
规约
移进
规约
规约
接受
分析a;(a+a)
栈
优先关系
当前符号
剩余输入串
移进或规约
#
#(
#(a
#(T
#(T+
#(T+a
#(T+T
#(T
#(T)
#T
<·
<·
·>
<·
<·
·>
·>
=·
·>
=·
(
a
+
+
a
)
)
)
#
#
a+a)#
+a)#
a)#
a)#
)#
#
#
#
移进
移进
规约
移进
移进
规约
规约
移进
规约
接受
(4)
不能用最右推导推导出上面的两个句子。
第七章
1、已知文法:
A→aAd|aAb|ξ
判断该文法是否是SLR
(1)文法,若是构造相应分析表,并对输入串ab#给出分析过程。
解:
(0)A’→A
(1)A→aAd
(2)A→aAb
(3)A→ξ
构造该文法的活前缀DFA:
a
I0:
A’→·A
A→·aAd
A→·aAb
A→·
I2:
A→a·Ad
A→a·Ab
A→·aAd
A→·aAb
A→·
a
I3:
A→aA·d
A→aA·b
A
I4:
A→aAd·
I5:
A→aAb·
d
b
I1:
A’→A·
A
Follow(A)∩{a}=∮
由上图可知该文法是SLR
(1)文法。
构造SLR
(1)的分析表:
状态
ACTION
GOTO
a
d
b
#
A
0
S2
R3
R3
R3
1
1
acc
2
S2
R3
R3
R3
3
3
S4
S5
4
R1
R1
R1
5
R2
R2
R2
输入串ab#的分析过程:
步骤
状态栈
符号栈
输入串
ACTION
GOTO
1
0
#
ab#
S2
2
02
#a
b#
R3
3
3
023
#aA
b#
S5
4
0235
#aAb
#
R2
1
5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 第2版 第二版 课后习题答案2 编译 原理 第二 课后 习题 答案