南邮《编译原理》课后习题解答.docx
- 文档编号:14458165
- 上传时间:2023-04-23
- 格式:DOCX
- 页数:75
- 大小:101.06KB
南邮《编译原理》课后习题解答.docx
《南邮《编译原理》课后习题解答.docx》由会员分享,可在线阅读,更多相关《南邮《编译原理》课后习题解答.docx(75页珍藏版)》请在冰豆网上搜索。
南邮《编译原理》课后习题解答
《编译原理》习题解答:
第一次作业:
P142、何谓源程序、目标程序、翻译程序、汇编程序、编译程序和解释程序?
它们之间可能有何种关系?
答:
被翻译的程序称为源程序;
翻译出来的程序称为目标程序或目标代码;
将汇编语言和高级语言编写的程序翻译成等价的机器语言,实现此功能的程序称为翻译程序;
把汇编语言写的源程序翻译成机器语言的目标程序称为汇编程序;
解释程序不是直接将高级语言的源程序翻译成目标程序后再执行,而是一个个语句读入源程序,即边解释边执行;
编译程序是将高级语言写的源程序翻译成目标语言的程序。
关系:
汇编程序、解释程序和编译程序都是翻译程序,具体见P4图1.3。
P143、编译程序是由哪些部分组成?
试述各部分的功能?
答:
编译程序主要由8个部分组成:
(1)词法分析程序;
(2)语法分析程序;(3)语义分析程序;(4)中间代码生成;(5)代码优化程序;(6)目标代码生成程序;(7)错误检查和处理程序;(8)信息表管理程序。
具体功能见P7-9。
P144、语法分析和语义分析有什么不同?
试举例说明。
答:
语法分析是将单词流分析如何组成句子而句子又如何组成程序,看句子乃至程序是否符合语法规则,例如:
对变量x:
=y符合语法规则就通过。
语义分析是对语句意义进行检查,如赋值语句中x与y类型要一致,否则语法分析正确,语义分析则错误。
P155、编译程序分遍由哪些因素决定?
答:
计算机存储容量大小;编译程序功能强弱;源语言繁简;目标程序优化程度;设计和实现编译程序时使用工具的先进程度以及参加人员多少和素质等等。
补充:
1、为什么要对单词进行内部编码?
其原则是什么?
对标识符是如何进行内部编码的?
答:
内部编码从“源字符串”中识别单词并确定单词的类型和值;原则:
长度统一,即刻画了单词本身,也刻画了它所具有的属性,以供其它部分分析使用。
对于标识符编码,先判断出该单词是标识符,然后在类别编码中写入相关信息,以表示为标识符,再根据具体标识符的含义编码该单词的值。
补充:
2、赋值语句:
A:
=5*C的语法和语义指的是什么?
答:
语法分析将检查该语句是否符合赋值语句规则,语义是指将5*C的结果赋值为A。
第二次作业:
P381、设T1={11,010},T2={0,01,1001},计算:
T2T1,T1*,T2+。
T2T1={011,0010,0111,01010,100111,1001010}
T1*={ε,11,010,1111,11010,01011,010010……}
T2+={0,01,1001,00,001,01001,010,0101……}
P383、令A={0,1,2},写出集合A+和A*的七个最短符号串。
A+:
0,1,2,00,01,02,10(有多种可能)
A*:
ε,0,1,2,00,01,02(有多种可能)
P385、试证明:
A+=AA*=A*A。
证明:
A+=A1∪A2∪……∪An∪……
A*=A0(即{ε})∪A+
AA*=A(A0∪A+)=A∪A2∪A3∪A4……=A+=A+∪A=(A0∪A+)A=A*A(证毕)
P387、设有文法G[S]:
S∷=A
A∷=B|IFATHENAELSEA
B∷=C|B+C|+C
C∷=D|C*D|*D
D∷=X|(A)|-D试写出VN和VT。
VN={S,A,B,C,D}
VT={IF,THEN,ELSE,+,*,X,(,),-}
P38-398、设有文法G[S]:
S∷=aAb
A∷=BcA|B
B∷=idt|ε
试问下列符号串
(1)aidtcBcAb(3)ab(5)aidtcidtcidtb是否为该文法的句型或句子。
(1)S
aAb
aBcAb
aidtcAb
aidtcBcAb句型但不是句子;
(3)S
aAb
aBb
aεb
ab是句型也是句子;
(5)S
aAb
aBcAb
aidtcAb
aidtcBcAb
aidtcidtcBb
aidtcidtcidtb句型也是句子。
P3910、给定文法:
S∷=aB|bA
A∷=aS|bAA|a
B∷=bS|aBB|b该文法所描述的语言是什么?
L(G)={相同个数的a与b以任意次序连接而成的非空符号串}。
P3911、试分别描述下列文法所产生的语言(文法开始符号为S):
(1)S∷=0S|01
(2)S∷=aaS|bc
(3)S:
:
=aSd|aAd
A:
:
=aAc|bc
(4)S:
:
=AB
A:
:
=aAb|ab
B:
:
=cBd|ε
(1)L(G)={0n1|n≥1};{解题思路:
将文法转换为正规表达式}
(2)L(G)={a2nbc|n≥0};
(3)L(G)={aibcjdk|i,j,k≥1,i=j+k-1};或者L(G)={aj+k-1bcjdk|j,k≥1};
(4)L(G)={anbncmdm|m≥0,n≥1}。
P3912、试分别构造产生下列语言的文法:
(1){abna|n=0,1,2,3……}
(2){anbn|n=1,2,3,4……}
(3){aban|n≥1}
(4){anbam|n,m≥1}
(5){anbmcp|n,m,p≥0}
(6){ambmcp|m,p≥0}
(1)G={VN,VT,P,S},VN={S,A},VT={a,b},
P:
S∷=aAa或S∷=aB
A∷=bA|εB∷=bB|a
(2)G={VN,VT,P,S},VN={S},VT={a,b},
P:
S∷=aSb|ε
(3)G={VN,VT,P,S},VN={S,A},VT={a,b},
P:
S∷=abA或S∷=Sa|aba
A∷=aA|a
(4)G={VN,VT,P,S},VN={S,A},VT={a,b},
P:
S∷=aS|abA
A∷=aA|a
(5)G={VN,VT,P,S},VN={S,A,B,C},VT={a,b,c},
P:
S∷=ABC
A∷=aA|ε
B∷=bB|ε
C∷=cC|ε
(6)G={VN,VT,P,S},VN={S,A},VT={a,b,c},
P:
S∷=aSbA|ε
A∷=cA|ε
第三次作业:
P3915.设文法G规则为:
S:
:
=AB
B:
:
=a|Sb
A:
:
=Aa|bB
对下列句型给出推导语法树,并求出其句型短语,简单短语和句柄。
(2)baabaab(3)bBABb
(2)S
AB
AaSb
bBAB
abBa
a
句型baabaab的短语a,ba,baa,baab,baabaab,简单短语a,句柄a
S
(3)
AB
bB
Sb
AB
短语bB,AB,ABb,bBABb
简单短语bB,AB,
句柄bB
P4018.分别对i+i*i和i+i+i中每一个句子构造两棵语法树,从而证明下述文法G[<表达式>]是二义的。
<表达式>:
:
=i|(<表达式>)|<表达式><运算符><表达式>
<运算符>:
:
=+|-|*|/
1.i+i*i
<表达式>
<表达式><运算符><表达式>
i+<表达式><运算符><表达式>
i*i
<表达式>
<表达式><运算符><表达式>
<表达式><运算符><表达式>*i
i+i
由于句子i+i*i可构造两棵不同的语法树,所以证明该文法是二义的。
2.i+i+i
<表达式>
<表达式><运算符><表达式>
i+<表达式><运算符><表达式>
i+i
<表达式>
<表达式><运算符><表达式>
<表达式><运算符><表达式>+i
i+i
由于句子i+i+i可构造两棵不同的语法树,所以证明该文法是二义的。
P4019.证明下述文法是二义的
1)S:
:
=iSeS|iS|i
2)S:
:
=iEtS|iEtSeS|aE:
:
=b存在句子ibtibtaeibta或者ibtibtaea有两颗不同的语法树
3)S:
:
=A|B
A:
:
=aCbA|a
B:
:
=BCC|a
C:
:
=ba(最简单的就是a为句型)
1)对于句子iiieii可构造两棵不同的语法树,所以证明该文法是二义的。
S
iSeS
iSiS
ii
S
iS
iSeS
iiS
i
3)对于句子ababa可构造两棵不同的语法树,所以证明该文法是二义的。
S
A
aCbA
baa
S
B
BCC
ababa
P4121.令文法N:
:
=D|ND
D:
:
=0|1|2|3|4|5|6|7|8|9
给出句子0127,34,568最左推导和最右推导。
解:
0127的最左推导N=>ND=>NDD=>NDDD=>DDDD=>0DDD=>01DD=>012D=>0127
0127的最右推导N=>ND=>N7=>ND7=>N27=>ND27=>N127=>D127=>0127
34的最左推导N=>ND=>DD=>3D=>34
34的最右推导N=>ND=>N4=>D4=>34
568的最左推导N=>ND=>NDD=>DDD=>5DD=>56D=>568
568的最右推导N=>ND=>N8=>ND8=>N68=>D68=>568
P4123.设有文法如下:
<目标>:
:
=V1
V1:
:
=V2|V1iV2
V2:
:
=V3|V2+V3|iV3
V3:
:
=)V1*|(
试分析句子(,)(*,i(,(+(,(+(i(,(+)(i(*i(。
解<目标>=>V1=>V2=>V3=>(
<目标>=>V1=>V2=>V3=>)V1*=>)V2*=>)V3*=>)(*
<目标>=>V1=>V2=>iV3=>i(
<目标>=>V1=>V2=>V2+V3=>V3+V3=>(+V3=>(+(
<目标>=>V1=>V1iV2=>V1iV3=>V1i(=>V2i(=>V2+V3i(=>V2+(i(=>V3+(i(=>(+(i(
<目标>=>V1=>V1iV2=>V2iV2=>V2+V3iV2=>V3+V3iV2=>(+V3iV2=>(+)V1*iV2
=>(+)V1iV2*iV2=>(+)V2iV2*iV2=>(+)V3iV2*iV2=>(+)(iV2*iV2=>(+)(iV2*iV2=>(+)(iV3*iV2=>(+)(i(*iV2=>(+)(i(*iV3=>(+)(i(*i(
P4124.下面文法那些是短语结构文法,上下文有关文法,上下文无关文法,及正规文法?
1.S:
:
=aBB:
:
=cBB:
:
=bC:
:
=c
2.S:
:
=aBB:
:
=bCC:
:
=cC:
:
=ε
3.S:
:
=aAbaA:
:
=aBaA:
:
=aaAB:
:
=bA:
:
=a
4.S:
:
=aCdaC:
:
=BaC:
:
=aaAB:
:
=b
5.S:
:
=ABA:
:
=aB:
:
=bCB:
:
=bC:
:
=c
6.S:
:
=ABA:
:
=aB:
:
=bCC:
:
=cC:
:
=ε
7.S:
:
=aAS:
:
=εA:
:
=aAA:
:
=aBA:
:
=aB:
:
=b
8.S:
:
=aAS:
:
=εA:
:
=bAbA:
:
=a
正规文法127
上下文无关文法568
上下文有关文法3
短语结构文法4
P4126.给出产生下列语言L(G)={W|W∈{0,1}+且W不含相邻1}的正规文法。
G=({S,A,B},{0,1},P,S)
P:
S:
:
=0|1|0S|1A
A:
:
=0|0S
解题思路一:
写出满足要求的符号串,例如0,1,00,01,10,000,101,010,001等,根据符号串从左至右的次序画出状态转换图,然后根据状态转换图来推导出文法。
这将会得到S:
:
=0|1|0S|1A|0Z|1ZA:
:
=0|0S|0Z经过分析其中Z为多余状态可删去。
A
解题思路二:
写出其正规表达式(0|10)*(10|0|1)【如果仅有(0|10)*的话推导不出1,因为是连接关系,后面缺了10的话就会以1结尾,同样的道理还要推导出0,所以得到此正规式】,画出转换系统,然后根据转换系统来推导出文法。
也可以根据正规表达式直接写文法,例如正规表达式(0|10)*(10|0|1)可以看成是a*b,推导出A:
:
=(0|10)A|10|0|1,即A:
:
=0A|1B|10|0|1,其中B:
:
=0A,但是10此项不符合正规文法的选项,可以进行改写从而得到A:
:
=0A|1B|0|1B:
:
=0A|0。
P4127.给出一个产生下列语言L(G)={W|W∈{a,b}*且W中含a的个数是b个数两倍的前后文无关文法。
文法G=({S,A,B},{a,b},P,S)
P:
S:
:
=AAB|ABA|BAA|ε
A:
:
=aS
B:
:
=bS
或者
S:
:
=Saab|aSab|aaSb|aabS|Saba|aSba|abSa|abaS|Sbaa|bSaa|baSa|baaS|ε
或者
S:
:
=aaB|aBa|Baa|ε
B:
:
=SbS
P4128.给出一个产生下列语言L(G)={w|w∈{a,b,c}+且w由相同个数的a,b,c组成的前后文有关文法。
文法G=({S,A,B},{a,b,c},P,S)
P:
S:
:
=ABC
A:
:
=aS|a
B:
:
=bS|b
C:
:
=cS|c
AB:
:
=BA
BC:
:
=CB
AC:
:
=CA
P4229.用扩充的BNF表示以下文法规则:
1.Z:
:
=AB|AC|A
2.A:
:
=BC|BCD|AXZ|AXY
3.S:
:
=aABb|ab
4.A:
:
=Aab|ε
解:
1.Z:
:
=A(B|C|ε):
:
=A[B|C]
2.A:
:
=BC(ε|D){X(Z|Y)}:
:
=BC[D]{X(Z|Y)}
3.A:
:
=a((AB|ε)b):
:
=a[AB]b
4.A:
:
={ab}
第四次作业:
P742.什么叫超前搜索?
扫描缓冲区的作用是什么?
词法分析程序在识别单词的时候,为进一步判明情况,确定下一步要做什么,一般采用超前读字符的方法,称超前搜索,扫描缓冲区的作用是为了识别单词符号。
P744.画出下列文法的状态图:
Z:
:
=Be
B:
:
=Af
A:
:
=e|Ae并使用该状态图检查下列句子是否该文法的合法句子:
f,eeff,eefe。
由状态图可知只有eefe是该文法的合法句子。
P745.设右线性文法G=({S,A,B},{a,b},S,P),其中P组成如下:
S:
:
=bAA:
:
=bBA:
:
=aAA:
:
=bB:
:
=a
画出该文法的状态转换图。
第五次作业:
P746.构造下述文法G[Z]的自动机,该自动机是确定的吗?
它相应的语言是什么?
Z:
:
=A0A:
:
=A0|Z1|0
解1:
将左线性文法转换为右线性文法,由于在规则中出现了识别符号出现在规则右部的情形,因此不能直接使用书上的左右线性文法对应规则,可以引入非终结符号B,将左线性文法变为Z:
:
=A0A:
:
=A0|B1|0B:
:
=A0,具体为:
A:
=Z1A:
=B1
A:
=A01
Z:
=A0B:
=A0
将所得的新左线性文法转换成右线性文法:
此时利用书上规则,其对应的右线性文法为:
A:
:
=0A|0B|0Z:
:
=0AB:
:
=1A
解2:
先画出该文法状态转换图:
NFA=({S,A,Z},{0,1},M,{S},{Z})
其中M:
M(S,0)={A}M(S,1)=ø
M(A,0)={A,Z}M(A,1)=ø
M(Z,0)=øM(Z,1)={A}
显然该文法的自动机是非确定的;它相应的语言为:
{0,1}上所有满足以00开头以0结尾且每个1必有0直接跟在其后的字符串的集合;也可以通过求解正规表达式得到A=0(0|01)*,Z=0(0|01)*0
那么如何构造其相应的有穷自动机呢?
ε
先构造其转换系统:
根据其转换系统可得状态转换集、状态子集转换矩阵如下表所示:
(其中S’可以忽略,结果是一样的)
I
I0
I1
S
01
{S’,S}
{A}
Ф
0
1Ф
{A}
{A,Z,Z’}
Ф
1
2Ф
{A,Z,Z’}
{A,Z,Z’}
{A}
2
21
0
则其相应的DFA为:
P747.构造一个DFA,它接受{0,1}上所有满足下述条件的字符串,其条件是:
字符串中每个1都有0直接跟在右边,然后,再构造该语言的正规文法。
【其它解法可参考P41-26题】
0
解
(一):
其状态转换图为(状态S表示空串开始,状态A表明串的末尾是1,状态Z表示串的末尾是0)
0
1
S
Z
A
0
1
DFA=({S,A,Z},{0,1},M,S,{Z})
其中M:
M(S,0)=ZM(S,1)=A
M(A,0)=Z
M(Z,0)=ZM(Z,1)=A
该语言的正规文法G[Z]为:
右线性文法:
//S:
:
=0|1A|0Z左线性文法:
A:
:
=0|0ZA:
:
=1|Z1
Z:
:
=0|1A|0ZZ:
:
=0|A0|Z0
若终止状态只引入不引出则适合构造右线性文法,若开始状态只引出不引入则适合构造左线性文法,若终态和初态均既有引入又有引出,则构造文法要注意。
解
(二):
可以先写出该文法的正规表达式为(0|10)*,根据该正规式构造转换系统
0
0
对于该转换系统可以采用子集法将其转变为DFA,再根据DFA写出其正规文法;但是注意观察后,发现开始状态S通过ε到达A状态,可以直接删去S状态,由A状态作为新的开始状态,同理,只有A状态通过ε才能到达终止状态Z,因此可以删去Z状态,由A状态作为终止状态。
这样,A状态就既为开始状态又为终止状态。
可画出化简后的转换图。
可写出右线性文法为:
A:
:
=0|0A|1BB:
:
=0|0S
P748.设(NFA)M=({A,B},{a,b},M,{A},{B}),其中M定义如下:
M(A,a)={A,B}M(A,b)={B}M(B,a)=øM(B,b)={A,B}
请构造相应确定有穷自动机(DFA)M’。
解:
构造一个如下的自动机(DFA)M’,(DFA)M’={K’,{a,b},M’,S’,Z’}
K’的元素是[A][B][A,B]
由于M(A,a)={A,B},故有M’([A],a)=[A,B]
同样M’([A],b)=[B]
M’([B],a)=ø
M’([B],b)=[A,B]
由于M({A,B},a)=M(A,a)UM(B,a)={A,B}Uø={A,B}
故M’([A,B],a)=[A,B]
由于M({A,B},b)=M(A,b)UM(B,b)={B}U{A,B}={A,B}
故M’([A,B],b)=[A,B]
S’=[A],终态集Z’={[A,B],[B]}
重新定义:
令0=[A]1=[B]2=[A,B],则DFA如下所示:
P749.设有穷自动机M=({S,A,E},{a,b,c},M,S,{E}),其中M定义为
M(S,c)=AM(A,b)=AM(A,a)=E请构造一个左线性文法。
解:
先求右线性文法
S→cAA→bAA→a|aE{A→aE实际上是多余的规则,应该去掉}
其左线性文法G=(VN,VT,P,S)
VN={A,S}VT={a,b,c}根据书上左右线性文法的转换规则,得到
P:
A→cA→AbS→Aa{E→Aa实际上是多余的规则,应该去掉}
画出状态转换图之后就非常清晰。
P7410.已知正规文法G=({S,B,C},{a,b,c},P,S),其中P内包含如下产生式:
S:
:
=aS|aB……①
B:
:
=bB|bC……②
C:
:
=cC|c……③请构造一个等价的有穷自动机。
解:
M=({S,B,C,T},{a,b,c},M,{S},{T})
M(S,a)=SM(S,a)=BM(S,b)=øM(S,c)=ø
M(B,a)=øM(B,b)=BM(B,b)=CM(B,c)=ø
M(C,a)=øM(C,b)=øM(C,c)=TM(C,c)=C
第六次作业:
P7411.构造下列正规式相应的DFA:
(1)1(0|1)*101【老课本】
解:
先构造该正规式的转换系统:
1(0|1)*101
(0|1)*
1
由上述转换系统可得状态转换集K={S,1,2,3,4,5,Z},状态子集转换矩阵如下表所示:
I
I0
I1
K
01
{S}
Ф
{1,2,3}
0
Ф1
{1,2,3}
{2,3}
{2,3,4}
1
23
{2,3}
{2,3}
{2,3,4}
2
23
{2,3,4}
{2,3,5}
{2,3,4}
3
43
{2,3,5}
{2,3}
{2,3,4,Z}
4
25
{2,3,4,Z}
{2,3,5}
{2,3,4}
5
43
其对应的DFA状态转换图为:
0
0
现在对该DFA进行化简,最终得到下列化简后的状态转换图(先将其分成两组——终态组{5}和非终态组{0,1,2,3,4},再根据是否可继续划分来确定最后的组数):
(1)(0|11*0)*【新课本】
解:
先构造该正规式的转换系统:
(0|11*0)*
4
11*0
由上述转换系统可得状态转换集K={S,1,2,3,4,Z},状态子集转换矩阵如下表所示:
I
I0
I1
K
01
{S,1,Z}
{1,Z}
{2,3,4}
0
12
{1,Z}
{1,Z}
{2,3,4}
1
12
{2,3,4}
{1,Z}
{3,4}
2
13
{3,4}
{1,Z}
{3,4}
3
13
2
由状态子集转换矩阵可知,状态0和1是等价的,而状态2和3是等价的,因此,合并等价状态之后只剩下2个状态,也即是最少状态的DFA。
1
P74
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译原理 南邮 编译 原理 课后 习题 解答