胡元与义编译原理教程第2版课后习题答案_第1页
胡元与义编译原理教程第2版课后习题答案_第2页
胡元与义编译原理教程第2版课后习题答案_第3页
胡元与义编译原理教程第2版课后习题答案_第4页
胡元与义编译原理教程第2版课后习题答案_第5页
已阅读5页,还剩26页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章语义分析和中间代码生成第四章

语义分析和中间代码生成4.1

完成下列选择题:(1)

四元式之间的联系是通过

实现的。a.指示器Ebv.a临lu时a变ti量on

only.ated

witch.A符s号po表se.Slidde.s程f序or变.量NET

3.5

Client

Pro间C接op三y元ri式g表ht示2法0的04优-点20为11

A。spose

Pty

Ltd.采用间接码表,便于优化处理节省存储空间,不便于表的修改便于优化处理,节省存储空间节省存储空间,不便于优化处理第四章语义分析和中间代码生成(3)

表达式(┐A∨B)∧(C∨D)的逆波兰表示为

。b.

A┐B∨CD∨∧d.

A┐B∨∧CD∨a.

┐AB∨∧CD∨c.

AB∨┐CD∨∧(4)有一语法制导翻译如下所示:S→bAb{prinEtv″a1l″u}ation

only.ated

wiAt→h(ABspose.{pSrliintd″es2″f}or

.NET

3.5

Client

ProA→a

Copyri{pgrhitnt2″030″4}-2011

Aspose

Pty

Ltd.B→Aa)

{print″4″}若输入序列为b(((aa)a)a)b,且采用自下而上的分析方法,则输出序列为

。第四章语义分析和中间代码生成a.

32224441c.

12424243【解答】b.

34242421d.

34442212(1)

b (2)

a (3)

b (4)

b4.2

何谓“语法制E导va翻l译u”at?i试on给o出n用ly语.法制导翻译ated生w成i中th间A代s码po的s要e.点S,li并d用e一s

简fo例r予.以NE说T明3。.5

Client

Pro【解答C】opy语r法ig制h导t

翻20译0(4S-DT2S0)1直1观A上sp说o就se是P为t每y个Lt产d.生式配上一个翻译子程序(称语义动作或语义子程序),并且在语法分析的同时执行这些子程序。也即在语法分析过程中,当一个产生式获得匹配(对于自上而下分析)或用于归约(对于自下而上分析)时,此产生式相应的语义子程序进入工作,完成既定的翻译任务。第四章语义分析和中间代码生成用语法制导翻译(SDTS)生成中间代码的要点如下:按语法成分的实际处理顺序生成,即按语义要求生成中间代码。注意地址返填问题。(3)不要遗漏必要的处理,如无条件跳转等。Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro例如C下o面py的r程ig序h段t

:2004-2011

Aspose

Pty

Ltd.if

(i>0)

a=i+e-b*d;

else

a=0;第四章语义分析和中间代码生成在生成中间代码时,条件“i>0”为假的转移地址无法确定,而要等到处理“else”时方可确定,这时就存在一个地址返填问题。此外,按语义要求,当处理完(i>0)后的语句(即“i>0”为真时执行的语句)时,则应转出当前的if语句E,va也l即ua此t时io应n加o入nl一y条.无条件ated

w跳i转th指A令s,po并s且e.这S个li转d移e地s

址fo也r需.要NE待T处3理.5完Cellsiee之nt

Pro后的语句C后op方y可ri获g得ht,2就0是0说4-同2样01存1在A着sp地o址se返P填t问y

Ltd.题。对于赋值语句a=i+e-b*d,其处理顺序(也即生成中间代码顺序)是先生成i+e的代码,再生成b*d的中间代码,最后才产生“-”运算的中间代码,这种顺序不能颠倒。第四章语义分析和中间代码生成4.3令S.val为文法G[S]生成的二进制数的值,例如对输入串101.101,则S.val=5.625。按照语法制导翻译方法的思想,给出计算S.val的相应的语义规则,G(S)如下:G[S]:

S→L.L|LL→LB|BS→L1·L2L2.val/2L2

}.length{S.val:=L1.val

+Evaluation

only.ated

withBA→s0p|o1se.Slides

for

.NET

3.5

Client

Pro【解答C】opy计ri算gSh.tva2l的00文4法-2G0′1[1S]A及s语po义s动e

作Pt如y下L:td.产生式 语义动作G′[S]:S′→S

{print(S.val)}第四章语义分析和中间代码生成S→LL→L1B{

S.val:=L.val

}{L.val:=L1.val*2

+

B.valL.length:=L1.length

+1}L→B

{L.val:=B.valL.length:=2}B→0

{B.val:=0}Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProBC→o1pyright

2004-2011

A{Bs.pvoals:e=1P}ty

Ltd.第四章语义分析和中间代码生成4.4

下面的文法生成变量的类型说明:试构造一个翻译方案,仅使用综合属性,把每个D→id

LL→,id

L|:TT→integer|realEvaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro标识符的类型填入符号表中(对所用到的过程,仅说明功能即可C,op不y必ri具g体ht写2出0)0。4-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成【解答】

此题只需要对说明语句进行语义分析而不需要产生代码,但要求把每个标识符的类型填入符号表中。对D、L、T,为其设置综合属性type,而过程enter(name,type)用来把名字name填入到符号表中,并且给出此名字的类型Etvyaple。ua翻t译io方n案o如nl下y:.ated

witDh→AisdpLose.Slides

for

.NET

3.5

Client

Pro{enter

(idC.onpamyer,iLg.httyp2e0);0}4-2011

Aspose

Pty

Ltd.L→,id

L(1){enter

(,

L(1).type);L.type=L(1).type;}第四章语义分析和中间代码生成L→:T{L.type=T.type;}T→integer{T.type=integer;}T→realEvaluation

only.ated

w{Ti.tthypAes=rpeoasl;e}.Slides

for

.NET

3.5

Client

Pro4.5

Co写p出yr翻i译gh过t程2调00用4语-句20的1语1

义As子p程os序e。P在ty所Ltd.生成的四元式序列中,要求在转子指令之前的参数四元式par按反序出现(与实现参数的顺序相反)。此时,在翻译过程调用语句时,是否需要语义变量(队列)queue?第四章语义分析和中间代码生成【解答】 为使过程调用语句的语义子程序产生的参数四元式par按反序方式出现,过程调用语句的文法为S→call

i(arglist)arglistE→vEaluation

only.ated

with

Asposaer.gSlilsitd→easrgfloisrt(.1)N,EET

3.5

Client

Pro按照C该o文py法r,ig语h法t

制20导0翻4-译2程01序1不A需sp要o语se义变Pt量y

Ltd.队列queue,但需要一个语义变量栈STACK,用来实现按反序记录每个实在参数的地址。翻译过程调用语句的产生式及语义子程序如下:第四章语义分析和中间代码生成arglist→E

{建立一个

arglist.STACK栈,它仅包含一项E.place}arglist→arglist(1),E {将E.place压入arglist(1).STACK栈,arglist.STACK=arglist(1).STACK}(3)

S→call i

(arglist)

{whilebegin将arglist.STACK栈顶项弹出并送入p单元之中;emit

(par,_,_

,p);end;emit

(call,_

,_

,

entry

(i));}Evaluation

only.ated

warigtlhisAts.SpToAsCKe≠.Snullilddeos

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成4.6 设某语言的while语句的语法形式为

S→while

E

do

S(1)其语义解释如图4-1所示。(1)写出适合语法制导翻译的产生式;Evaluation

only.ated

with

(A2s)p写os出e每.S个l产id生e式s

对fo应r的.语NE义T动3作.5。Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成图4-1习题4.6的语句结构图Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成【解答】

本题的语义解释图已经给出了翻译后的中间代码结构。在语法制导翻译过程中,当扫描到

while时,应记住E的代码地址;当扫描到do时,应对E的“真出口”进行回填,使之转到S(1)代码的入口处;当扫描到S(1)时,除了应将E的入口地址传给S(1).chain之外,还要形成一个转E向vaEl入u口a处ti的o无n

条on件l转y.移的四元ated

w式i,th并A且s将poE.sfec.继S续li传d下es去。fo因r此.N,E应T把3S.→5

wChlilieenEt

Prodo

S(1)改Co写p为yr如i下gh的t三2个0产04生-式20:11

Aspose

Pty

Ltd.W→whileA→W

E

doS→A

S(1)第四章语义分析和中间代码生成每个产生式对应的语义子程序如下:W→while{

W.quad=nxq;}A→W

E

do{

Backpatch(E.tEc,vnaxlq)u;ation

only.ated

witAh.cAhsapino=sEe..fcS;lides

for

.NET

3.5

Client

ProA.quCaod=pWy.rqiuagdh;t}

2004-2011

Aspose

Pty

Ltd.S→A

S(1){

Backpatch(S(1).chain,A.quad);emit(j,_,_,A.quad);S.chain=A.chain;}第四章语义分析和中间代码生成(jnrop,

i(1),

i(2),

0)4.7 改写布尔表达式的语义子程序,使得i(1)ropi(2)不按通常方式翻译为下面的相继两个四元式:(jrop,

i(1),

i(2),

0)(j

,

,

,0)而是翻译成如下的E一va个l四u元at式i:on

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.使得当i(1)rop

i(2)为假时发生转移,而为真时并不发生转移(即顺序执行下一个四元式),从而产生效率较高的四元式代码。第四章语义分析和中间代码生成【解答】程序如下:(1)

E→i按要求改造描述布尔表达式的语义子{E.tc=null;E.fc=nxq;emit(jez,entry(i),

,0);}(2)

E→i(1)

rop

i(2)E→(E(1))E→┐E(1){E.tc=E(1).tc;

E.fc=E(1).fc;}{E.fc=nxq;emit(j,

,

,0);Backpatch(E(1).fc,nxq);}Evaluation

only.ated

w{Ei.tthc=Ansulplo;sE.ef.cS=nlxiqd;eemsitf(ojrnr.opN,EeTnt3ry.(5i(C1)l),ieenntrtyPro(i(2));)Copyright

2004-2011

Aspose

Pty

Ltd./*

nrop表示关系运算符与rop相反*/第四章语义分析和中间代码生成(8)

E→E0E(2){E.fc=E(2).fc;Backpatch(E0.tc,nxq);}EA→E(1)

{EA.fc=E(1).fc;}E→EAE(2){E.tc=E(2).tc;E.fc=merg(EA.fc,E(2).fc);}E0→E(1)∨

{E0.tc=nxq;emit(j,

,

,0);Backpatch(E(1).fcE,vnxaql)u;}ation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成else

while

(A≤D)A=A+2;4.8

按照三种基本控制结构文法将下面的语句翻译成四元式序列:while

(A<C∧B<D){if

(A≥1)

C=C+1;Evaluation

only.}ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成【解答】该语句的四元式序列如下(其中E1、E2和E3分别对应A<C∧B<D、A≥1和A≤D,并且关系运算符优先级高):100

(j<,A,C,102)111/*E2为T*/101(j,_,_,113)Evalu/a*Eti为oFn*/only.ated

wit1h02As(pj<o,sBe,D.,S1l0i4)des

/f*oEr为.TN*E/T

3.5

Client

Pro103

C(oj,p_y,r_,i1g1h3t)2004/-*2E0为1F1*/Aspose

Pty

Ltd.104

(j=,A,1,106)第四章语义分析和中间代码生成105(j,_,_,108)/*E2为F*/106(+,

C,

1,

C)/*C:=C+1*/107(j,_,_,112)/*跳过else后的语句*/108

(j≤,A,D,110)/*E3为T*/109

(j,_,_,112) /*E3为F*//*转回内层while语句开始处*//*转回外层while语句开始处*/111

(j,_,_,108)112

(j,_,_,100)113Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro110

(+,

A,Co2p,

yAr)ight/*2A0:0=A4+-22*0/

11

Aspose

Pty

Ltd.第四章语义分析和中间代码生成4.9

已知源程序如下:prod=0;i=1;while

(i≤20){Evaluation

only.ated

with

Aspproods=epr.oSdl+ai[die]*sb[fio]r;

.NET

3.5

Client

Proi=i+1;Copyright

2004-2011

Aspose

Pty

Ltd.}试按语法制导翻译法将上述源程序翻译成四元式序列(设A是数组a的起始地址,B是数组b的起始地址;机器按字节编址,每个数组元素占四个字节)。第四章语义分析和中间代码生成【解答】 源程序翻译为下列四元式序列:100

(=

,0

,_

,prod)101

(=

,1

,_

,

i

)102

(j≤,i

,20,104

)Evaluation

only.ated

wit1h03As(pjos,e_.,S_l,i1d1e4s)for

.NET

3.5

Client

Pro104

C(o*py,r4i,gih,tT12)004-2011

Aspose

Pty

Ltd.105

(

-

,A

,4

,T2

)106

(=[

],T2

,T1

,T3

)第四章语义分析和中间代码生成107

(

*

,4

,i

,T4

)108

(

-

,B

,4

,T5

)109

(=[

],T5

,T4

,T6

)110

(

*

,T3

,T6

,T7

)111

(

+,prod,T7,prod)Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro112

C(o+p,yri,ig1h,ti2)004-2011

Aspose

Pty

Ltd.113

(j,_

,_

,102

)114第四章语义分析和中间代码生成4.10 给出文法G[S]:S→SaA

|

AA→AbB

|

BB→cSd

|

e请证实AacAbcBaAdbed是文法G[S]的一个句型;请写出该句E型va的l所u有at短i语on、o素n短ly语.以及句柄;ated

wit(h3)As为p文os法eG.[SSl]的id每e个s

产fo生r式.写NE出T相3应.5的C翻l译ie子n程t

Pro序,使句C型opAaycrAibcgBhatAd2be0d0经4-该2翻0译11方A案s后po,s输e

出Pt为y

Ltd.131042521430。第四章语义分析和中间代码生成【解答】 (1)

根据文法G[S]画出AacAbcBaAdbed对应的语法树如图4-2所示。由图4-2可知AacAbcBaAdbed是文法G[S]的一个句型。Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成图4-2AacAbcBaAdbed对应的语法树Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.第四章语义分析和中间代码生成(2)由图4-2可

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论