蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx

上传人:b****1 文档编号:22794755 上传时间:2023-04-28 格式:DOCX 页数:33 大小:122.74KB
下载 相关 举报
蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx_第1页
第1页 / 共33页
蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx_第2页
第2页 / 共33页
蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx_第3页
第3页 / 共33页
蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx_第4页
第4页 / 共33页
蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx

《蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx》由会员分享,可在线阅读,更多相关《蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx(33页珍藏版)》请在冰豆网上搜索。

蒋立源《编译原理》第3版桂电期末复习作业答案概论.docx

蒋立源《编译原理》第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→(jnz,C,0,0);

(6)(j,0,0,7);

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

当前位置:首页 > 人文社科 > 广告传媒

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

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