蒋立源《编译原理》第3版桂电期末复习作业答案.docx
- 文档编号:24254150
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:33
- 大小:122.72KB
蒋立源《编译原理》第3版桂电期末复习作业答案.docx
《蒋立源《编译原理》第3版桂电期末复习作业答案.docx》由会员分享,可在线阅读,更多相关《蒋立源《编译原理》第3版桂电期末复习作业答案.docx(33页珍藏版)》请在冰豆网上搜索。
蒋立源《编译原理》第3版桂电期末复习作业答案
《编译原理》课后习题答案
第一章
1.解:
源程序是指以某种程序设计语言所编写的程序。
目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。
翻译程序是将某种语言翻译成另一种语言的程序的统称。
编译程序与解释程序均为翻译程序,但二者工作方法不同。
解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。
即边解释边执行,翻译所得的指令序列并不保存。
编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。
即先翻译、后执行。
2.解:
一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。
3.解:
C语言的关键字有:
auto break casecharconst continuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile。
上述关键字在C语言中均为保留字。
4.解:
C语言中括号有三种:
{},[],()。
其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。
C语言中无END关键字。
逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:
(a,b,c,d)的值为d)。
5.略
第二章
2.构造产生下列语言的文法
(1){anbn|n≥0}
解:
对应文法为G(S)=({S},{a,b},{S→ε|aSb},S)
(2){anbmcp|n,m,p≥0}
解:
对应文法为G(S)=({S,X,Y},{a,b,c},{S→aS|X,X→bX|Y,Y→cY|ε},S)
(3){an#bn|n≥0}∪{cn#dn|n≥0}
解:
对应文法为G(S)=({S,X,Y},{a,b,c,d,#},{S→X,S→Y,X→aXb|#,Y→cYd|#},S)
(4){w#wr#|w?
{0,1}*,wr是w的逆序排列}
解:
G(S)=({S,W,R},{0,1,#},{S→W#,W→0W0|1W1|#},S)
(5)任何不是以0打头的所有奇整数所组成的集合
解:
G(S)=({S,A,B,I,J},{-,0,1,2,3,4,5,6,7,8,9},{S→J|IBJ,B→0B|IB|e,I→J|2|4|6|8,Jà1|3|5|7|9},S)
(6)所有偶数个0和偶数个1所组成的符号串集合
解:
对应文法为S→0A|1B|e,A→0S|1CB→0C|1SC→1A|0B
7.解:
aacb是文法G[S]中的句子,相应语法树是:
最右推导:
S=>aAcB=>aAcb=>aacb
最左推导:
S=>aAcB=>aacB=>aacb
(2)aabacbadcd不是文法G[S]中的句子
因为文法中的句子不可能以非终结符d结尾
(3)aacbccb不是文法G[S]中的句子
可知,aacbccb仅是文法G[S]的一个句型的一部分,而不是一个句子。
(4)aacabcbcccaacdca不是文法G[S]中的句子
因为终结符d后必然要跟终结符a,所以不可能出现…dc…这样的句子。
(5)aacabcbcccaacbca不是文法G[S]中的句子
由
(1)可知:
aacb可归约为S,由文法的产生式规则可知,终结符c后不可能跟非终结符S,所以不可能出现…caacb…这样的句子。
8.证明:
用归纳法于n,n=1时,结论显然成立。
设n=k时,对于α1α2...αkT*b,存在βi:
i=1,2,..,k,αiT*bi成立,现在设
α1α2...αkαk+1T*b,因文法是前后文无关的,所以α1α2...αk可推导出b的一个前缀b',αk+1可推导出b的一个后缀=b"(不妨称为bk+1)。
由归纳假设,对于b',存在βi:
i=1,2,..,k,b'=β1β2...βk,使得
αiT*bi成立,另外,我们有αk+1T*b"(=bk+1)。
即n=k+1时亦成立。
证毕。
9.证明:
(1)用反证法。
假设α首符号为终结符时,β的首符号为非终结符。
即设:
α=aω;β=Aω’且α=>*β。
由题意可知:
α=aωT…TAω’=β,由于文法是CFG,终结符a不可能被替换空串或非终结符,因此假设有误。
得证;
(2)同
(1),假设:
β的首符号为非终结符时,α首符号为终结符。
即设:
α=aω;β=Aω’且α=aωT…TAω’=β,与
(1)同理,得证。
10.证明:
因为存在句子:
abc,它对应有两个语法树(或最右推导):
STABTAbcTabc
STDCTDcTabc
所以,本文法具有二义性。
11.解:
(1)STABTAaSbTAacbTbAacbTbbAacbTbbaacb
上面推导中,下划线部分为当前句型的句柄。
对应的语法树为:
全部的短语:
第一个a(a1)是句子bbaacb相对于非终结符A(A1)(产生式A?
a)的短语(直接短语);
b1a1是句子bbaacb相对于非终结符A2的短语;
b2b1a1是句子bbaacb相对于非终结符A3的短语;
c是句子bbaacb相对于非终结符S1(产生式S?
c)的短语(直接短语);
a2cb3是句子bbaacb相对于非终结符B的短语;
b2b1a1a2cb3是句子bbaacb相对于非终结符S2的短语;
注:
符号的下标是为了描述方便加上去的。
(2)句子(((b)a(a))(b))的最右推导:
ST(AS)T(A(b))T((SaA)(b))T((Sa(a))(b))
T(((b)a(a))(b))
相应的语法树是:
(3)解:
iii*i+↑对应的语法树略。
最右推导:
ETT=>F=>FP↑TFE↑TFET+↑TFEF+↑TFEP+↑TFEi+↑
TFTi+↑TFTF*i+↑TFTP*i+↑TFTi*i+↑TFFi*i+↑TFPi*i+↑
TFii*i+↑TPii*i+↑Tiii*i+↑
13.化简下列各个文法
(1)解:
S→bCACdA→cSA|cCCC→cS|c
(2)解:
S→aAB|fA|gA→e|dDAD→eAB→f
(3)解:
S→ac
第三章
7
(1)其对应的右线性文法是:
A→0D,B→0A,B→1C,C→1|1F,C→1|0A,F→0|0E|1A,D→0B|1C,E→1C|0B
(2)最短输入串011
(3)任意接受的四个串
011,0110,0011,000011
(4)任意以1打头的串.
11将右线性文法化为左线性文法的算法:
o
(1)对于G中每一个形如A→aB的产生式且A是开始符,将其变为B→a,否则若A不是开始符,B→Aa;
o
(2)对于G中每一个形如A→a的产生式,将其变为S→Aa
12
(1)
状态矩阵是:
记[S]=q0[B]=q1[AB]=q2[SA]=q3,最小化和确定化后如图
(2)记[S]=q0,[A]=q1,[BS]=q2最小化和确定化后的状态转换图如下
13
(1)将具有ε动作的NFA确定化后,其状态转换图如图:
记{S0,S1,S3}=q0{S1}=q1{S2S3}=q2{S3}=q3
(2)记{S}=q0{Z}=q1{UR}=q2{SX}=q3{YUR}=q4{XSU}=q5{YURZ}=q6{ZS}=q7
14
(1)从略
(2)化简后S0和S1作为一个状态,S5和S6作为一个状态。
状态转换图如图
22构造NFA
其余从略。
第四章
1.解:
(1)S→(S)Z21|()Z21|[S]Z31|[]Z31
A→(S)Z22|()Z22|[S]Z32|[]Z32
B→(S)Z23|()Z23|[S]Z33|[]Z33
Z11→ε|AZ11|BZ21
Z12→AZ12|BZ22Z13→AZ13|BZ23
Z21→Z11Z22→ε|Z12
Z23→Z13Z31→Z21
Z32→Z22Z33→ε|Z23
(2)S→bZ11|aZ21A→bZ12|aZ22
Z11→ε|AZ21Z12→AZ22Z21→SZ21Z22→ε|SZ22
(3)S→(T)Z11|aZ11|Z11S→(T)Z12|aZ12|Z12
Z11→ε|Z21Z12→Z22Z21→,SZ21Z22→ε|,SZ22
∙4.解:
∙
∙5.证:
因为是左递归文法,所以必存在左递归的非终结符A,及形如A→α|β的产生式,且αT*Ad.
则first(Ad)∩first(β)≠φ,从而
first(α)∩first(β)≠φ,即文法不满足LL
(1)文法条件。
得证。
∙6.证:
LL
(1)文法的分析句子过程的每一步,永远只有唯一的分析动作可进行。
现在,假设LL
(1)文法G是二义性文法,则存在句子α,它有两个不同的语法树。
即存在着句子α有两个不同的最左推导。
从而可知,用LL
(1)方法进行句子α的分析过程中的某步中,存在两种不同的产生式替换,且均能正确进行语法分析,即LL
(1)分析动作存在不确定性。
与LL
(1)性质矛盾。
所以,G不是LL
(1)文法。
∙7.解:
(1)D产生式两个候选式fD和f的first集交集不为空,所以不是LL
(1)的。
(2)此文法具有左递归性,据第5题结论,不是LL
(1)的。
∙12.解:
(1)
S
A
(
a
)
b
S
=
=
A
=
<
=
<
(
=
=
<
<
<
a
>
=
<
>
<
>
>
)
>
>
>
>
>
b
>
>
不是简单优先文法。
(2)
S
R
T
(
)
∧
a
S
>
=
R
=
T
>
(
<
=
<
<
<
<
)
>
>
∧
>
>
a
>
>
<
=
<
<
<
是简单优先文法。
(3)
S
R
(
a
)
S
=
<
<
R
>
>
(
=
<
<
a
>
>
=
<
<
)
>
>
是简单优先文法。
o首先消去无用产生式Z→E,Z→E+T
S
Z
T
#
i
(
)
S
Z
=
=
T
>
>
#
=
<
<
<
I
>
>
(
=
<
<
<
)
>
>
化简后的文法是简单优先文法;
31.
(1)算符优先矩阵:
+
*
↑
(
)
i
#
+
>
<
<
<
>
<
>
*
>
>
<
<
>
<
>
↑
>
>
<
<
>
<
>
(
<
<
<
<
=
<
)
>
>
>
>
>
I
>
>
>
>
>
#
<
<
<
<
<
(2)用Floyd方法将优先矩阵线性化得到得的优先函数为:
+
*
↑
(
)
i
#
F
3
5
5
1
7
7
1
G
2
4
6
6
1
6
1
35解:
(1)识别全部活前缀的DFA如下:
(以表格的形式来表示,很容易可以转化为图的形式,本章中其余的题目也是采用这种形式表示。
)
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·aSb
S→·aSc
S→·ab
S
a
I1
I2
I1
S’→S·
I2
S→a·Sb
S→a·Sc
S→a·b
S→·aSb
S→·aSc
S→·ab
S
a
b
I3
I2
I4
I3
S→aS·b
S→aS·c
b
c
I5
I6
I4
S→ab·
I5
S→aSb·
I6
S→aSc·
(2)识别全部活前缀的DFA如下:
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·cA
S→·ccB
S
c
·
I1
I
I1
S’→S·
I2
S→c·A
S→c·cB
A→·cA
A→·a
A
c
a
I3
I4
I5
I3
S→cA·
I4
S→cc·B
A→c·A
B→·ccB
B→·b
A→·cA
A→·a
B
A
c
b
a
I6
I5
I7
I8
I5
I5
A→a·
I6
S→ccB·
I7
B→c·cB
A→c·A
A→·cA
A→·a
C
A
a
I9
I10
I5
I8
B→b·
I9
B→cc·B
A→c·A
B→·ccB
B→·b
A→·cA
A→·a
B
A
c
b
a
I11
I10
I7
I8
I5
I10
A→cA·
I11
B→ccB·
所求的LR(0)项目规范族C={I0,I1,…,I11}
(3)
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·aSSb
S→·aSSS
S→·c
S
c
a
I1
I2
I3
I1
S’→S·
I2
S→c·
I3
S→a·SSb
S→a·SSS
S→·aSSb
S→·aSSS
S→·c
S
c
a
I4
I2
I3
I4
S→aS·Sb
S→aS·SS
S→·aSSb
S→·aSSS
S→·c
S
c
a
I5
I2
I3
I5
S→aSS·b
S→aSS·S
S→·aSSb
S→·aSSS
S→·c
S
a
b
c
I7
I3
I6
I2
I6
S→aSSb·
I7
S→aSSS·
(4)
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·A
A→·Ab
A→·a
S
A
a
I1
I2
I3
I1
S’→S·
I2
S→A·
S→A·b
b
I4
I3
A→a·
I4
S→Ab·
38解:
(1)
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·Sab
S→·bR
S
b
I1
I2
I1
(冲突项目)
S’→S·
S→S·ab
a
acc
I3
I2
S→b·R
R→·S
R→·a
S→·Sab
S→·bR
R
S
a
b
I4
I5
I6
I2
I3
S→Sa·b
b
I7
I4
S→bR·
r2
I5
(冲突项目)
R→S·
S→S·ab
a
I3
I6
R→a·
I7
S→Sab·
项目I1,I5同时具有移进和归约项目,对于I5={R→S·,S→S·ab},follow(R)={a},follow(R)∩{a}={a},所以SLR
(1)规则不能解决冲突,从而该文法不是SLR
(1)文法。
(2)
状态
项目集
经过的符号
到达的状态
I0
S’→·S
S→·aSAB
S→·BA
B→·b
S
a
B
b
I1
I2
I3
I4
I1
S’→S·
I2
S→a·SAB
S→·aSAB
S→·BA
B→·b
S
a
B
b
I5
I2
I3
I4
I3
S→B·A
A→·aA
A→·B
B→·b
A
a
B
b
I6
I7
I8
I4
I4
B→b·
r5
I5
S→aS·AB
A→·aA
A→·B
B→·b
A
a
B
b
I9
I7
I8
I4
I6
S→BA·
r2
I7
A→a·A
A→·B
A→·aA
B→·b
A
B
a
b
I10
I8
I7
I4
I8
A→B·
r4
I9
S→aSA·B
B→·b
B
b
I11
I4
I10
A→aA·
r3
I11
S→aSAB·
r1
不存在冲突项目,故该文法是LR(0)文法,也是SLR
(1)文法。
SLR
(1)分析表如下:
ACTION
GOTO
a
b
#
S
A
B
0
S2
S4
1
3
1
ACC
2
S2
S4
5
3
3
S7
S4
6
8
4
R5
R5
R5
5
S7
S4
9
8
6
R2
R2
R2
7
S7
S4
10
8
8
R4
R4
R4
9
S4
11
10
R3
R3
R3
11
R1
R1
R1
40解:
求LR
(1)项目集和状态转换表:
状态
项目集
经过的符号
到达的状态
I0
S’→·S#
S→·A#
A→·BA#
A→·#
B→·aB#,a,b
B→·b#,a,b
S
A
B
a
b
I1
I2
I3
I4
I5
I1
S’→S·#
I2
S→A·#
I3
A→B·A#
A→·#
A→·BA#
B→·aB#,a,b
B→·b#,a,b
A
B
a
b
I6
I3
I4
I5
I4
B→a·B#,a,b
B→·aB#,a,b
B→·b#,a,b
B
a
b
I7
I4
I5
I5
B→b·#,a,b
I6
A→BA·#
I7
B→aB·#,a,b
相应的LR
(1)分析表为:
STATE
ACTION
GOTO
a
b
#
S
A
B
0
S4
S5
R3
1
2
3
1
ACC
2
R2
3
S4
S5
R3
6
3
4
S4
S5
7
5
R5
R5
R5
6
R2
7
R4
R4
R4
用LR
(1)分析表对输入符号串abab的分析过程:
步骤
状态
栈中符号
余留符号
分析动作
下一状态
1
0
#
abab#
S4
4
2
04
#a
bab#
S5
5
3
045
#ab
ab#
R5
7
4
047
#aB
ab#
R4
3
5
03
#B
ab#
S4
4
6
034
#Ba
b#
S5
5
7
0345
#Bab
#
R4
7
8
0347
#BaB
#
R4
3
9
033
#BB
#
R3
6
10
0336
#BBA
#
R2
6
11
036
#BA
#
R2
1
12
01
#A
#
acc
第五章
5.4解:
∙A-BC+*DE-^
∙ad*c+d/e+f*g+
∙ax+4<=cd3*/\\/
∙de*c+b/\a\/f^
∙s0=;i1=;i100<=BZssii*+=;ii1+=;BRS2’
5.5解:
∙a+b*c
∙a*(b-c)-(c+d)/e
∙有误
∙if(a
5.8解:
∙(+,B,C,T1)
(*,A,T1,T2)
(+,T2,D,T3)
(=,T3,0,X)
2)如下所示:
∙当前句型(方框括起来部分为句柄)A/\(BV(CVD/\?
F))用产生式Expr→iden归约,得
(1)Expr.TC→(jnz,A,0,0);
(2)Expr.FC→(j,0,0,0);
∙当前句型Expr/\(BV(CVD/\?
F))用产生式Expr^→Expr’/\’归约,得
(1)(jnz,A,0,3);
(2)Expr^.FC→(j,0,0,0);
∙当前句型Expr^(BV(CVD/\?
F))用产生式Expr→iden归约,得
(1)(jnz,A,0,0);
(2)Expr^.FC→(j,0,0,0);
(3)Expr.TC→(jnz,B,0,0);
(4)Expr.FC→(j,0,0,0);
∙当前句型Expr^(ExprV(CVD/\?
F))用产生式Exprv→Expr'V'归约,得
(1)(jnz,A,0,3);
(2)Expr^.FC→(j,0,0,0);
(3)Exprv.TC→(jnz,A,0,0);
(4)(j,0,0,5);
∙当前句型Expr^(Exprv(CVD/\?
F))用产生式Expr→iden归约,得
(1)(jnz,A,0,3);
(2)Expr^.FC→(j,0,0,0);
(3)Exprv.TC→(jnz,A,0,0);
(4)(j,0,0,5);
(5)Expr.TC→(jnz,C,0,0);
(6)Expr.FC→(j,0,0,0);
∙当前句型Expr^(Exprv(ExprVD/\?
F)),用产生式Exprv→Expr’V’归约,得
(1)(jnz,A,0,3);
(2)Expr^.FC→(j,0,0,0);
(3)Exprv.TC→(jnz,A,0,0);
(4)(j,0,0,5);
(5)Exprv.TC→(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 蒋立源 编译 原理 版桂电 期末 复习 作业 答案