《编译原理》西北工业大学第三版课后答案1.docx

上传人:b****6 文档编号:3729209 上传时间:2022-11-25 格式:DOCX 页数:95 大小:352.14KB
下载 相关 举报
《编译原理》西北工业大学第三版课后答案1.docx_第1页
第1页 / 共95页
《编译原理》西北工业大学第三版课后答案1.docx_第2页
第2页 / 共95页
《编译原理》西北工业大学第三版课后答案1.docx_第3页
第3页 / 共95页
《编译原理》西北工业大学第三版课后答案1.docx_第4页
第4页 / 共95页
《编译原理》西北工业大学第三版课后答案1.docx_第5页
第5页 / 共95页
点击查看更多>>
下载资源
资源描述

《编译原理》西北工业大学第三版课后答案1.docx

《《编译原理》西北工业大学第三版课后答案1.docx》由会员分享,可在线阅读,更多相关《《编译原理》西北工业大学第三版课后答案1.docx(95页珍藏版)》请在冰豆网上搜索。

《编译原理》西北工业大学第三版课后答案1.docx

《编译原理》西北工业大学第三版课后答案1

第一章习题解答

1.解:

源程序是指以某种程序设计语言所编写的程序。

目标程序是指编译程序(或解释程序)将源程序处理加工而得的另一种语言(目标语言)的程序。

翻译程序是将某种语言翻译成另一种语言的程序的统称。

编译程序与解释程序均为翻译程序,但二者工作方法不同。

解释程序的特点是并不先将高级语言程序全部翻译成机器代码,而是每读入一条高级语言程序语句,就用解释程序将其翻译成一段机器指令并执行之,然后再读入下一条语句继续进行解释、执行,如此反复。

即边解释边执行,翻译所得的指令序列并不保存。

编译程序的特点是先将高级语言程序翻译成机器语言程序,将其保存到指定的空间中,在用户需要时再执行之。

即先翻译、后执行。

2.解:

一般说来,编译程序主要由词法分析程序、语法分析程序、语义分析程序、中间代码生成程序、代码优化程序、目标代码生成程序、信息表管理程序、错误检查处理程序组成。

3.解:

C语言的关键字有:

auto break casecharconst  continuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile。

上述关键字在C语言中均为保留字。

4.解:

C语言中括号有三种:

{},[],()。

其中,{}用于语句括号;[]用于数组;()用于函数(定义与调用)及表达式运算(改变运算顺序)。

C语言中无END关键字。

逗号在C语言中被视为分隔符和运算符,作为优先级最低的运算符,运算结果为逗号表达式最右侧子表达式的值(如:

(a,b,c,d)的值为d)。

5.略

第二章习题解答

 

1.

(1)答:

26*26=676

 

(2)答:

26*10=260

 (3)答:

{a,b,c,...,z,a0,a1,...,a9,aa,...,az,...,zz,a00,a01,...,zzz},共26+26*36+26*36*36=34658个

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

3.描述语言特点

 

(1)S→10S0S→aAA→bAA→a

  解:

本文法构成的语言集为:

L(G)={(10)nabma0n|n,m≥0}。

 

(2)S→SSS→1A0A→1A0A→ε

  解:

L(G)={1n10n11n20n2…1nm0nm|n1,n2,…,nm≥0;且n1,n2,…nm不全为零}该语言特点是:

产生的句子中,0、1个数相同,并且若干相接的1后必然紧接数量相同连续的0。

 (3)S→1AS→B0A→1AA→CB→B0B→CC→1C0C→ε

  解:

本文法构成的语言集为:

L(G)={1p1n0n|p≥1,n≥0}∪{1n0n0q|q≥1,n≥0},特点是具有1p1n0n或1n0n0q形式,进一步,可知其具有形式1n0mn,m≥0,且n+m>0。

 (4)S→bAdcA→AGSG→εA→a

  解:

可知,S=>…=>baSndcn≥0

  该语言特点是:

产生的句子中,是以ba开头dc结尾的串,且ba、dc个数相同。

 (5)S→aSSS→a

  解:

L(G)={a(2n-1)|n≥1}可知:

奇数个a

4.解:

此文法产生的语言是:

以终结符a1、a2…an为运算对象,以∧、∨、~为运算符,以[、]为分隔符的布尔表达式串

5.  5.1解:

由于此文法包含以下规则:

AA→e,所以此文法是0型文法。

     5.2证明:

6.解:

(1)最左推导:

<程序>T<分程序>T<标号>:

<分程序>TL:

<分程序>

TL:

<标号>:

<分程序>

TL:

L:

<分程序>

TL:

L:

<无标号分程序>

TL:

L:

<分程序首部>;<复合尾部>

TL:

L:

<分程序首部>;<说明>;<复合尾部>

TL:

L:

begin<说明>;<说明>;<复合尾部>

TL:

L:

begind;<说明>;<复合尾部>

TL:

L:

begind;d;<复合尾部>

TL:

L:

begind;d;<语句>;<复合尾部>

TL:

L:

begind;d;s;<复合尾部.

TL:

L:

begind;d;s;<语句>end

TL:

L:

begind;d;s;send

最右推导:

<程序>T<分程序>T<标号>:

<分程序>

T<标号>:

<标号>:

<分程序>

T<标号>:

<标号>:

<无标号分程序>

T<标号>:

<标号>:

<分程序首部>;<复合尾部>

T<标号>:

<标号>:

<分程序首部>;<语句>;<复合尾部>

T<标号>:

<标号>:

<分程序首部>;<语句>;<语句>;end

T<标号>:

<标号>:

<分程序首部>;<语句>;s;end

T<标号>:

<标号>:

<分程序首部>;s;s;end

T<标号>:

<标号>:

<分程序首部>;说明;s;s;end

T<标号>:

<标号>:

<分程序首部>;d;s;s;end

T<标号>:

<标号>:

begin说明;d;s;s;end

T<标号>:

<标号>:

begind;d;s;s;end

T<标号>:

L:

begind;d;s;s;end

TL:

L:

begind;d;s;s;end

(2)句子L:

L:

begind;d;s;send的相应语法树是:

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+↑

12.证明:

充分性:

当前文法下的每一符号串仅有一个句柄和一个句柄产生式T对当前符号串有唯一的最左归约T对每一步推导都有唯一的最右推导T有唯一的语法树。

必要性:

有唯一的语法树T对每一步推导都有唯一的最右推导T对当前符号串有唯一的最左归约T当前文法下的每一符号串仅有一个句柄和一个句柄产生式

13.化简下列各个文法

(1)解:

S→bCACdA→cSA|cCCC→cS|c

(2)解:

S→aAB|fA|gA→e|dDAD→eAB→f

(3)解:

S→ac

14.消除下列文法中的ε产生式

(1)解:

S→aAS|aS|bA→cS

(2)解:

S→aAA|aA|aA→bAc|bc|dAe|de

15.消除下列文法中的无用产生式和单产生式

(1)消除后的产生式如下:

S→aB|BC

B→DB|b

C→b

D→b|DB

(2)消除后的产生式如下:

S→SA|SB|()|(S)|[]|[S]

A→()|(S)|[]|[S]

Bà[]|[S]

(3)消除后的产生式如下:

E→E+T|T*F|(E)|P↑F|i

T→T*F|(E)|P↑F|i

F→P↑F|(E)|i

P→(E)|i

 

第三章习题解答

 

1.从略

2.

3假设W:

表示载狐狸过河,G:

表示载山羊过河,C:

表示载白菜过河

用到的状态1:

狐狸和山羊在左岸2:

狐狸和白菜载左岸3:

羊和白菜在左岸4:

狐狸和山羊在右岸5:

狐狸和白菜在右岸6:

山羊和白菜在右岸F:

全在右岸

4证明:

只须证明文法G:

A→αB或A→α(A,B∈VN,α∈VT+)

等价于G1:

A→aB或A→a(a∈VT+)

∙G1的产生式中A→aB,则B也有B→bC,C→cD….

所以有A→abc…B’,a,b,c…∈VT,B’∈VN

所以与G等价。

2)G的产生式A→αB,α∈VT+,因为α是字符串,所以肯定存在着一个终结符a,使A→aB

可见两者等价,所以由此文法产生的语言是正规语言。

6根据文法知其产生的语言是

L={ambnci|m,n,i≧1}

可以构造如下的文法VN={S,A,B,C},VT={a,b,c}

P={S→aA,A→aA,A→bB,B→bB,B→cC,C→cC,C→c}

其状态转换图如下:

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打头的串.

8从略。

9

(2)相应的3型文法

(i)S→aAS→bSA→aAA→bBB→a|aBB→b|bB

(ii)S→aA|aS→bBB→aB|bBA→aBA→b|bA

(iii)S→aAS→bBA→bAA→aCB→aBB→bCC→a|aCC→b|bC

(iv)S→bSS→aAA→aCA→bBB→aBB→bCC→a|aCC→b|bC

(3)用自然语言描述输入串的特征

(i)以任意个(包括0)b开头,中间有任意个(大于1)a,跟一个b,还可以有一个由a,b组成的任意字符串

(ii)以a打头,后跟任意个(包括0)b

(iii)以a打头,中间有任意个(包括0)b,再跟a,最后由一个a,b所组成的任意串结尾或者

以b打头,中间有任意个(包括0)a,再跟b,最后由一个a,b所组成的任意串结尾

(iv)以任意个(包括0)b开头,中间跟aa最后由一个a,b所组成的任意串结尾或者

以任意个(包括0)b开头,中间跟ab后再接任意(包括0)a再接b,最后由一个a,b所组成的任意串结尾

10

(1)G1的状态转换图:

G2的状态转换图:

(2)G1等价的左线性文法:

S→Bb,S→Dd,D→C,B→Db,C→Bc,B→Ab,B→ε,A→a

G2等价的右线性文法:

S→dD,S→aB,D→C,B→abC,B→bB,B→bA,B→ε,C→cA,A→a

(3)对G1文法,abb的推导序列是:

S=>aA=>abB=>abb

对G1’文法,abb的推导序列是:

S=>Bb=>Abb=>abb

对G2文法,aabca的推导序列是:

S=>Aa=>Cca=>Babca=>aabca

对G2’文法,aabca的推导序列是:

S=>aB=>aabC=>aabcA=>aabca

(4)对串acbd来说,G1,G1’文法都不能产生。

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作为一个状态。

状态转换图如图

15从略。

16从略。

(1)r*表示的正规式集是{ε,r,rr,rrr,…}

(ε|r)*表示的正规式集是{ε,εε,…}∪{r,rr,rrr,…}={ε,r,rr,rrr,…}

ε|rr*表示的正规式集是{ε,r,rr,rrr,…}

(r*)*=r*={ε,r,rr,rrr,…}

所以四者是等价的。

(2)(rs)*r表示的正规式集是{ε,rs,rsrs,rsrsrs,…}r={r,rsr,rsrsr,rsrsrsr,…}

r(sr)*表示的正规式集是r{ε,sr,srsr,srsrsr,…}={r,rsr,rsrsr,rsrsrsr,…}

所以两者等价。

18写成方程组

S=aT+aS

(1)

B=cB+c

(2)

T=bT+bB(3)

所以B=c*cT=b*bc*c

S=a*ab*bc*c

∙G1:

S=aA+B

(1)

B=cC+b

(2)

A=abS+bB(3)

C=D(4)

D=bB+d(5)

把(4)(5)代入

(2),得B=c(bB+d)+b=cbB+cd+b得B=(cb)*(cd|b),代入(3)得

A=abS+b(cb)*(cd|b)把它打入

(1)得

S=a(abS+b(cb)*(cd|b))+(cb)*(cd|b)

=aabS+ab(cb)*(cd|b)+(cb)*(cd|b)

=(aab)*(ab(cb)*(cd|b)|(cb)*(cd|b))

G2:

S=Aa+B

(1)

A=Cc+Bb

(2)

B=Bb+a(3)

C=D+Bab(4)

D=d(5)

可得D=dB=ab*C=ab*ab|bA=(ab*ab|b)c+ab*b

S=(ab*ab|b)ca+ab*ba+ab*

=(ab*ab|b)ca|ab*ba|ab*

20

∙识别此语言的正规式是S=’LABEL’d(d|,d)*;

∙从略。

21从略。

22构造NFA

其余从略。

23下面举一个能够识别1,2,3,10,20,100的例子,读者可以推而广之。

%{

#include

#include

#include

#defineON1

#defineTW2

#defineTHRE3

#defineTE10

#defineTWENT20

#defineHUNDRE100

#defineWHITE9999

%}

upper[A-Z]

%%

ONEreturnON;

TWOreturnTW;

THREEreturnTHRE;

TENreturnTE;

TWENTYreturnTWENT;

HUNDREDreturnHUNDRE;

""+|\treturnWHITE;

\nreturn0;

%%

main(intargc,char*argv[])

{

intc,i=0;

chartmp[30];

if(argc==2)

{

if((yyin=fopen(argv[1],"r"))==NULL)

{

printf("can'topen%s\n",argv[1]);exit(0);

}

}

while((c=yylex())!

=0)

{

switch(c)

{

caseON:

c=yylex();

if(c==0)goto{i+=1;label;}

c=yylex();

if(c==HUNDRE)

i+=100;

elsei+=1;

break;

caseTW:

c=yylex();

c=yylex();

if(c==HUNDRE)

i+=200;

elsei+=2;

break;

caseTWENT:

i+=20;

break;

caseTE:

i+=10;

break;

default:

break;

}

}/*while*/

label:

printf("%d\n",i);

return;

}

24

(1)Dn表示的正规集是长度为2n任意a和b组成的字符串。

∙此正规式的长度是2n

∙用来识别Dn的DFA至多需要2n+1个状态。

25从略。

26

(1)由{}括住的,中间由任意个非{组成的字符串,如{},{}},{a},{defg}等等。

(2)匹配一行仅由一个大写字母和一个数字组成的串,如A1,F8,Z2等。

(3)识别\r\n和除数字字符外的任何字符。

∙由’和’括住的,中间由两个’’或者非’和\n组成的任意次的字符串。

如’’’’,‘a’,’bb’,’def’,’’’’’’等等

27O[Xx][0-9]*[a-fA-F]*|[0-9]+|(\’([a-zA-Z]|\\[Xx][0-7][0-7a-fA-F]|\\0[01][0-7][0-7]|\\[a-z])\’)

28^[a-zA-Z_]+[0-9]*[a-zA-Z_]*

29参考程序如下:

%{

#include

#include

#include

#defineUPPER2

#defineWHITE3

%}

upper[A-Z]

%%

{upper}+returnUPPER;

\t|""+returnWHITE;

%%

main(intargc,char*argv[])

{

intc,i;

if(argc==2)

{

if((yyin=fopen(argv[1],"r"))==NULL)

{

printf("can'topen%s\n",argv[1]);exit(0);

}

}

while((c=yylex())!

=EOF)

{

if(c==2)

{

for(i=0;yytext[i];i++)

printf("%c",tolower(yytext[i]));

yytext[0]='\000';

}

if(c==3)

printf("");

elseprintf("%s",yytext);

}

return;

}

yywrap()

{

return;

}

30从略。

 

第四章习题解答

 

第四章习题参考答案

∙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

∙2.解:

S

AbB1,1.1(表示第1步,用产生式1.1推导,以下同)

CAbbB2,2.1

edAbbB3,4.1

edCAbbB4,2.1

ededAbbbB5,4.1

edaAbbbB5,4.2(不符合,改写第5步,用4.2)

edBfbb

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1