编译原理习题参考答案.docx

上传人:b****5 文档编号:6917697 上传时间:2023-01-12 格式:DOCX 页数:14 大小:125.98KB
下载 相关 举报
编译原理习题参考答案.docx_第1页
第1页 / 共14页
编译原理习题参考答案.docx_第2页
第2页 / 共14页
编译原理习题参考答案.docx_第3页
第3页 / 共14页
编译原理习题参考答案.docx_第4页
第4页 / 共14页
编译原理习题参考答案.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

编译原理习题参考答案.docx

《编译原理习题参考答案.docx》由会员分享,可在线阅读,更多相关《编译原理习题参考答案.docx(14页珍藏版)》请在冰豆网上搜索。

编译原理习题参考答案.docx

编译原理习题参考答案

程序设计语言与编译——语言的设计与实现(第2版)

习题4答案

4-5解:

上下文有关文法(1型文法),产生的语言L(G){=aibici|i≥1,i为整数}

4-6解:

3型文法,L(G)={ai|i≥1,i为奇数}

4-7解:

2型文法,L(G)={aibi|i≥1,i为整数}

4-8解:

1型文法,L(G)={aibici|i≥1,i为整数}

4-9解:

1.最左推导最右推导

S⇒(A)⇒(B)⇒(SdB)S⇒(A)⇒(B)⇒(SdB)

⇒((A)dB)⇒((B)dB)⇒(SdS)⇒(Sda)

⇒((S)dB)⇒((b)dB)⇒((A)da⇒((B)da)

⇒((b)dS)⇒((b)da)⇒((s)da⇒((b)da)

2.语法树

4-10解:

1.因为存在推导S⇒SbF⇒SbP⇒Sbc⇒Fbc⇒FaPbc

所以FaPbc是文法G(S)的一个句型。

2.语法树

4-11解:

因为串aaabaa可有下列两棵不同的语法树

所以文法G(S)是二义文法。

4-12解:

因为串i(*可有下列两棵不同的语法树

习题9答案

9-2解:

(1)消除文法G的②产生式直接左递归。

A→SeA'|fA'③

A'→dA'|ε④

(2)消除间接左递归:

按S.A排序,将S的①产生式代入③有

A→AaeA'|AbeA'|ceA'|fA'⑤

(3)消除⑤的直接左递归有

A→ceA'A"|fA'A"⑥

A"→aeA'A"|beA'A"|ε⑦

(4)对S的①产生式提公因子有

S→AB|c⑧

B→|a|b⑨

(5)最后,文法G提取公因子,消除左递归后的产生式由⑧,⑨,⑥,⑦和④组成,无

多余的产生式。

(6)若按A.S排序,得到的产生式组合是另外的形式,但它们是等价的文法,读者可以试试。

9-3解:

消除左递归后,得文法G':

S→(L)|a

L→SL'

L'→,SL'|ε

递归下降过程:

Procedurematch(t:

token);

begin

iflookahead=tthenlookahead=nexttoken

elseerror

end

procedureS;

begin

iflookahead='a'thenmatch('a')

elseiflookahead='('

then

begin

match('(');

L;

iflookahead=')'

thenmatch(')')

elseerror

end

end

procudureL;

beginS;

L';

end

procudureL';

begin

iflookahead=','thenbegin

match(',')

S;

L'

end

end

9-6解:

(1)G'(S):

S→AS'

S'→:

AS'|ε

A→BA'

A'→+BA'|ε

B→bS*|a

(2)FIRST集和FOLLOW集

FIRST

FOLLOW

S

b,a

#,*

S'

:

,ε

#,*

A

b,a

#,*,:

A'

+,ε

#,*,:

B

b,a

#,*,:

,+

预测分析表

a

:

+

b

*

#

S

S→AS'

S→AS'

S'

S'→:

AS'

S'→ε

S'→ε

A

A→BA'

A→BA'

A'

A→ε

A→+BA'

A→ε

A→ε

B

B→a

B→bS*

(3)因为预测分析表无多重定义入口,所以G'是LL

(1)文法。

9-7解:

对习题9-3的文法G消除左递归后,得文法G':

S→(L)|a

L→SL'

L'→,SL'|ε

FIRST集和FOLLOW集

FIRST

FOLLOW

S

(,a

),’,#

L

(,a

L'

’,ε

预测分析表

a

#

S

S→(L)

S→a

L

L→SL'

L→SL'

L'

L'→ε

L'→,SL'

因为预测分析表无多重定义入口,所以文法G是LL

(1)文法。

习题10答案

10-1解:

(1)规范规范推导(最右推导)最右推导S⇒AB⇒ASb⇒AABb⇒bBABb

(2)语法树(推导树)

(3)短语bB,AB,ABb,bBABb

直接短语bB,AB

句柄bB

最左素短语bB

10-2解:

(1)因为存在推导S⇒SbF⇒FbF⇒FaPbF⇒FaPbP⇒FaPbc

所以FaPbc是文法G的一个句型。

(2)语法树

(3)短语FaP,c,FaPbc

直接短语FaP,c

句柄FaP

最左素短语FaP

10-3解:

拓广文法

0.S'→S

1.S→AS

2.S→b

3.A→SA

4.A→a

LR(0)项目集规范族

I0=closure{S'→·S}I1=GO(I0,S)I2=GO(I0,A)I3=GO(I0,b)

S'→·SS'→S·S→A·SS→b·

S→·ASA→S·AS→·ASGO(I1,a)=I4

S→·bA→·SAS→·bGO(I2,A)=I2

A→·SAA→·aA→·SAGO(I2,b)=I3

A→·aS→·ASA→·a

S→·b

I4=GO(I0,a)I5=GO(I1,A)I6=GO(I1,S)I7=GO(I2,S)

A→a·A→SA·A→S·AS→AS·

S→A·SA→·SAA→S·A

S→·ASA→·bA→·SA

S→·bS→·ASA→·a

A→·SAS→·bS→·AS

A→·aS→·b

GO(I1,b)=I3

GO(I2,a)=I4

FOLLOW(S)={a,b,#}FOLLOW(A)={a,b}

∵状态5在输入a时有S4和r3的移进归约矛盾。

状态5在输入b时有S3和r3的移进归约矛盾。

状态7在输入a时有S4和r1的移进归约矛盾。

状态7在输入b时有S3和r1的移进归约矛盾。

∴文法G既不是LR(0)文法,也不是SLR

(1)文法。

10-4解:

(1)最左推导

S⇒(T)⇒(T,S)⇒(S,S)⇒(a,S)⇒(a,(T))

⇒(a,(T,S))⇒(a,(S,S))⇒(a,(a,S))⇒(a,(a,a))

最右推导

S⇒(T)⇒(T,S)⇒(T,(T))⇒(T,(T,S))⇒(T,(T,a)

⇒(T,(S,a))⇒(T,(a,a))⇒(S,(a,a))⇒(a,(a,a))

最左推导

S⇒(T)⇒(T,S)⇒(S,S)⇒((T),S)⇒((S),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)),S)⇒(((a,a),∧,(a)),a)

最右推导

S⇒(T)⇒(T,S)⇒(T,a)⇒(S,a)⇒((T),a)⇒((T,S),a)

⇒((T,(T)),a)⇒((T,(S)),a)⇒((T,(a)),a)⇒((T,S,(a)),a)

⇒((T,∧,(a)),a)⇒((S,∧,(a)),a)⇒(((T),∧,(a)),a)

⇒(((T,S),∧,(a)),a)⇒(((T,a),∧,(a)),a)⇒(((S,a),∧,(a)),a)

⇒(((a,a),∧,(a)),a)

(2)对句子(a,(a,a))的移进归约栈的变迁如下:

其中,(3),(4),(8),(9),(12),(13),(15),(16),(18)共进行9次归约,最右推导也是9次推导,正好是递过程。

归约(3)的句柄是a,语法树如图

(1)所示。

归约(4)的句柄是S,语法树如图

(2)所示。

归约(8)的句柄是a,语法树如图(3)所示。

归约(9)的句柄是S,语法树如图(4)所示。

归约(12)的句柄是S,语法树如图(5)所示。

归约(13)的句柄是T,S,语法树如图(6)所示。

归约(15)的柄是(T),语法树如图(7)所示。

归约(16)的句柄是T,S,语法树如图(8)所示。

归约(18)的句柄是(T),语法树如图(9)所示。

图(9)即是完整的语法树。

图中的下标是为了区分归约过程中同名文法符号和便于理解而添加的,实际是没有的。

对句子(((a,a),∧,(a)),a)的规约栈变迁如图(10)所示。

图(10)

规范推导(最右推导)一共进行17步推导,归约过程也进行了17次归约,语法树如图(11)所示,其中的下标可表明其形成的先后。

图(11)

10-7解:

0.S'→SFOLLOW(S)={$}

1.S→ABFOLLOW(A)={b,c}

2.B→cBdFOLLOW(B)={d,$}

3.B→cd

4.A→aAb

5.A→ab

I0=closure{S'→·S}

S'→·SI4=GO(I2,B)I9=GO(I5,d)

S→·ABS→AB·B→cd·

A→·aAbI5=GO(I2,c)I10=GO(I6,b)

A→·abB→c·BdA→aAb·

I1=GO(I0,S)B→·cBdI11=GO(I8,d)

S'→S·B→·cdB→cBd·

I2=GO(I0,A)B→c·d

S→A·BI6=GO(I3,A)

B→·cBdA→aA·b

B→·cdGO(I3,a)=I3

I3=GO(I0,a)I7=GO(I3,b)

A→a·AbA→ab·

A→a·bI8=GO(I5,B)

A→·aAbB→cB·d

A→·abGO(I5,c)=I5

上述状态集没有移进—归约冲突,(a)是SLR文法,分析表如下:

a

b

c

d

$

S

A

B

0

S3

1

2

1

acc

2

S5

4

3

S3

S7

6

4

r1

5

S5

S9

8

6

S10

7

r5

r5

8

S11

9

r3

r3

10

r4

r4

11

r2

r2

习题11答案

11-1解:

11-3解:

推导树如下:

(1)E→iE·VAL=B设四元式初始编号ip=100

(2)E→iE·VAL=C

(3)E→-EE·VAL=T1(101)(@,c,-,T1)

(4)E→iE·VAL=D

(5)E→E+EE·VAL=T2(101)(+,T1,D,T2)

(6)E→E*EE·VAL=T3(103)(*,B,T2,T3)

(7)S→i:

=E(104)(:

=,T3,-,A)

11-4解:

结果为333645211。

11-5解:

(1)E1→C

(2)W→whileW·code=102(101)(j,-,-,103)

(3)E2→A>BE2·F=103(102)(>,A,B,104)

(4)E1→E*EE1·VAL=T1(103)(j,-,-,0)

(5)E2→E+EE2·VAL=T2(104)(*,2,z.T1)

(6)A→i:

=E2A·chain=0(105)(+,y,T1,T2)

(7)S→AS1·chain=0(106)(:

=,T2,-,x)

(8)S→WS1S1·chain=103(107)(j,-,-,102)

(9)S→ifE1thenS1S·chain=103

习题12答案

(3)优化结果

(3)B:

=10

(4)A:

=A+8

(5)ifB≥100thengoto(8)

(6)B:

=B+10

(7)goto(4)

(8)writeA

12-2解:

(1)基本块

(2)程序流图

B1

(1)~(3)

B2(4)~(5)

B3(6)~(7)

B4(8)

12-7解:

MOVbR0

ADDR0c

MOVaR1

SVBR1R0

MOVR0t1

MOVdR0

ADDR01

MOVR1t2

MOVeR1

MVLR1f

ADDR0R1

MOVt2R1

DIVR1R0

习题13答案

13-2解:

当运行到C调用B时,活动记录栈的状态如下图。

13-4解:

静态作用域规则下输出0.2500.250

0.2500.250

动态作用域规则下输出0.2500.125

0.2500.125

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

当前位置:首页 > 工作范文

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

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