编译作业答案.docx

上传人:b****7 文档编号:23811140 上传时间:2023-05-21 格式:DOCX 页数:16 大小:35.77KB
下载 相关 举报
编译作业答案.docx_第1页
第1页 / 共16页
编译作业答案.docx_第2页
第2页 / 共16页
编译作业答案.docx_第3页
第3页 / 共16页
编译作业答案.docx_第4页
第4页 / 共16页
编译作业答案.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

编译作业答案.docx

《编译作业答案.docx》由会员分享,可在线阅读,更多相关《编译作业答案.docx(16页珍藏版)》请在冰豆网上搜索。

编译作业答案.docx

编译作业答案

TYYGROUPsystemofficeroom【TYYUA16H-TYY-TYYYUA8Q8-TYYUA162】

 

编译作业答案

7-2给定文法G:

SAa|Ab|c

AAd|Se|f

请消除文法的左递归,并提取公共左因子。

解:

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

A→SeA'|fA'③

A'→dA'|④

(2)消除间接左递归:

按排序(按算法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)若按排序,得到的产生式组合是另外的形式,但它们是等价的文法。

7-3给定文法G:

S(L)|a

LL,S|S

消除文法G的左递归,并写出递归下降分析的相应递归过程。

解:

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

S→(L)|a

L→SL'

L'→,SL'|

递归下降过程:

procedureadvance()

begin

sym=getchar()

end

procedureS;

begin

ifsym='a'thenadvance()

elseifsym='('then

begin

advance()

L();

ifsym=')'thenadvance()elseerror()

end

else

error()

end

procudureL;

beginS;

L';

end

procudureL';

begin

ifsym=','thenbegin

advance()

S;

L'

end

end

7-5解:

(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)文法。

7-6解:

对习题7-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)文法。

8-1

已知文法G:

SAB

AAb|bB

Ba|Sb

(1)写出bBABb的规范推导。

(2)画出bBABb的语法树。

(3)求bBABb的短语、直接短语、句柄和最左素短语。

解:

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

(2)语法树(推导树)

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

直接短语bB,AB

句柄bB

最左素短语bB

8-2

已知文法G:

SSbF|F

FFaP|P

Pc

(1)试证明FaPbc是文法G的一个句型。

(2)画出FaPbc的语法树。

(3)求出FaPbc的短语、直接短语、句柄和最左素短语。

解:

(1)因为存在推导SSbFFbFFaPbFFaPbPFaPbc

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

(2)语法树

(3)短语FaP,c,FaPbc

直接短语FaP,c

句柄FaP

最左素短语FaP

8-3

已知文法G:

SAS|b

ASA|a

(1)列出G的LR(0)项目集规范族。

(2)这个文法是LR(0)文法吗是SLR

(1)文法吗若是,请构造出相应的分析表。

解:

拓广文法

'→S

→AS

→b

→SA

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

S→·bA→·SAS→·b

A→·SAA→·aA→·SA

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→·GO(I1,b)=I3GO(I2,a)=I4GO(I1,a)=I4GO(I2,A)=I2GO(I2,b)=I3

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)文法。

8-7

设有文法G:

SAB

BcBd|cd

AaAb|ab

它是否为SLR

(1)文法?

若是,请构造相应的SLR

(1)分析表。

解:

'→SFOLLOW(S)={$}

→ABFOLLOW(A)={b,c}

→cBdFOLLOW(B)={d,$}

→cd

→aAb

→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

8-9

设有文法G:

PP(F)|F

FabFda|a

(1)试求每个非终结符的FIRSTVT集和LASTVT集。

(2)试构造文法G的优先关系表。

解:

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

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

(2)优先关系表:

9-4

对下列翻译方案:

SPS{print“1”}

SPQ{print“2”}

Pa{print“3”}

QbR{print“4”}

QdQ{print“5”}

Rc{print“6”}

当输入串为“aaadb”时,翻译结果是什么?

解:

结果为。

9-5

试写出语句

ifCBdox:

=y+2*z的翻译过程。

解:

(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,

(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

9-6

9-7试写出语句

fori:

=1toNdoS1的语义子程序。

其语义为

i:

=1;

again:

ifiNthenbegin

S1;

i:

=i+1;

gotoagain

end

原文法

S→fori:

=1toNdoS1

改写为

F→fori:

=1toNdo

S→FS1

F→fori:

=1toNdo

{:

=entry(i);

emit(:

=,’1’,-);

:

=ip;:

ifBgoto0

:

gotoagain

原文法

S→repeatS1untilB

改写为

S→RB

R→PS1until

P→repeat

翻译方案:

P→repeat

{:

=ip}

R→PS1until

{backpatch,ip);

:

=}

S→RB

{backpatch,;

:

=}

回边

7→4

9→1

10→7

10-1

有如下三地址代码序列:

(1)readx(10)B:

=y+j

(2)ready(11)ifA=Bgoto(6)

(3)ifx

=y+i

(4)readi(13)ifA>Bgoto(16)

(5)readj(14)writeB

(6)ifi>jgoto(9)(15)goto(9)

(7)A:

=i+1(16)A:

=x*j

(8)goto(10)(17)goto(10)

(9)A:

=x*j

(a)请划分基本块,构造程序流图。

(b)根据必经结点找出回边及由回边组成的循环。

解:

(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}。

10-2

试将下面的程序段划分为基本块,构造其程序流图,并进行优化。

(1)C:

=100

(2)A:

=0

(3)B:

=10

(4)A:

=A+B

(5)ifB

Cthengoto(8)

(6)B:

=B+10

(7)goto(4)

(8)writeA

解:

(1)基本块

(2)程序流图

B1

(1)~(3)

B2(4)~(5)

B3(6)~(7)

B4(8)

10-7

对下列中间代码:

(1)t1:

=b+c(4)t4:

=e*f

(2)t2:

=a-c(5)t5:

=t3+t4

(3)t3:

=d+1(6)s:

=

/t5

用简单代码生成方法生成目标代码,可用寄存器为R0,R1。

解:

MOVbR0

ADDR0c

MOVaR1

SVBR1R0

MOVR0t1

MOVdR0

ADDR01

MOVR1t2

MOVeR1

MVLR1f

ADDR0R1

MOVt2R1

DIVR1R0

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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