程序设计语言与编译习题解答.docx

上传人:b****5 文档编号:4548570 上传时间:2022-12-06 格式:DOCX 页数:17 大小:140.98KB
下载 相关 举报
程序设计语言与编译习题解答.docx_第1页
第1页 / 共17页
程序设计语言与编译习题解答.docx_第2页
第2页 / 共17页
程序设计语言与编译习题解答.docx_第3页
第3页 / 共17页
程序设计语言与编译习题解答.docx_第4页
第4页 / 共17页
程序设计语言与编译习题解答.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

程序设计语言与编译习题解答.docx

《程序设计语言与编译习题解答.docx》由会员分享,可在线阅读,更多相关《程序设计语言与编译习题解答.docx(17页珍藏版)》请在冰豆网上搜索。

程序设计语言与编译习题解答.docx

程序设计语言与编译习题解答

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.因为存在推导SSbFSbPSbcFbcFaPbc

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

2.语法树

4-11解:

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

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

9-2解:

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

A→SeA'|fA'③

A'→dA'|④

(2)消除间接左递归:

按S.A排序(按书上P116页的算法i=2,j=1时)将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('c');

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'→iAS'|

A→BA'

A'→+BA'

B→bS*|a

(2)FIRST集和FOLLOW集

FIRST

FOLLOW

S

b,a

#,*

S'

i,

#,*

A

b,a

#,*,i

A'

+,

#,*,i

B

b,a

#,*,i,+

预测分析表

a

i

+

b

*

#

S

S→AS'

S→AS'

S'

S'→iAS'

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-1解:

(1)规范规范推导(最右推导)最右推导SABASbAABbbBABb

(2)语法树(推导树)

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

直接短语bB,AB

句柄bB

最左素短语bB

10-2解:

(1)因为存在推导SSbFFbFFaPbFFaPbPFaPbc

所以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)

I0:

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}

I0:

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→·cBdB→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

10-10解:

(1)FIRSTVT(P)={A,(}LASTVT(P)={a,)}

FIRSTVT(F)={a}LASTVT(F)={a}

(2)优先关系表:

习题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=101

习题12

回边

7→4

9→1

10→7

12-1解:

(a)基本块程序流图

B1

(1)~(3)

B2(4)

B3(5)

B4(6)

B5(7)~(8)

B6(9)

B7(10)~(11)

B8(12)~(13)

B9(14)~(15)

B10(16)~(17)

(b)必经结点

D

(1)={1}D

(2)={1,2}D(3)={1,3}

D(4)={1,3,4}D(5)={1,3,4,5}D(6)={1,3,4,6}

D(7)={1,3,4,7}D(8)={1,3,4,7,8}D(9)={1,3,4,7,8,9}

D(10)={1,3,4,7,8,10}

由回边7→4组成的循环{7,4,5,6,8,10}。

(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

12-8解:

a

b

c

d

e

f

B1

1

2

2

2

1

1

B2

1

2

1

1

1

B3

1

2

2

1

2

B4

2

2

2

1

1

B5

1

1

1

1

2

2

Σ

6

9

8

6

3

7

分配给b,c,f,执行代价最省。

13-2解:

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

13-4解:

静态作用域规则下输出0.2500.250

0.2500.250

动态作用域规则下输出0.2500.125

0.2500.125

7-6解:

设x,y,z对应的形式单元为J1(和J'1),J2(和J'2),J3(和J'3)。

1.引用调用

A:

=2

B:

=3

T:

=A+B(T的值为5)

J1:

=T的地址

J2:

=A的地址

J3:

=A的地址

J2↑:

=J2↑+1(A的值为3)

J3↑:

=J3↑+J1↑(A的值为3+5=8)

打印A的值为8。

2.传值

A:

=2

B:

=3

T:

=A+B(T的值为5)

J1:

=T(J1的值为5)

J2:

=A(J2的值为2)

J3:

=A(J3的值为2)

J2:

=J2+1(J2的值为3)

J3:

=J3+J1(J3的值为7)

打印A的值为2。

3.结果调用

形式单元J1,J2,J3无初始化值,计算是不确定的,打印A的值仍为2。

4.传值得结果

A:

=2

B:

=3

T:

=A+B(T的值为5)

J1:

=T(J1的值为5)

J'1:

=T的地址

J2:

=A(J2的值为2)

J'2:

=A的地址

J3:

=A(J3的值为2)

J'3:

=A的地址

J2:

=J2+1(J2的值为3)

J3:

=J3+J1(J3的值为7)

J'3↑:

=J1(T的值为5,未变)

J'2↑:

=J2(A的值为3)

J'3↑:

=J3(A的值为7)

打印A的值为7。

5.名调用

计算时用实参原文替换形参

A:

=2

B:

=3

B:

=A+1(A替换y,A的值为3)

A:

=A+A+B(A的值为9)

打印A的值为9。

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

当前位置:首页 > 高中教育 > 高中教育

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

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