版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章语义分析和中间代码生成第四章
语义分析和中间代码生成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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年青岛市四方区事业编单位人员招聘笔试备考题库及答案详解
- 2026年承德市双滦区事业编单位人员招聘笔试备考试题及答案详解
- 2026年莆田市涵江区中小学编制教师招聘笔试备考试题及答案详解
- 2026年珠海市前山区中小学编制教师招聘笔试参考题库及答案详解
- 2026年西安市未央区事业编单位人员招聘笔试备考试题及答案详解
- 2026年乐山市市中区中小学编制教师招聘考试模拟试题及答案详解
- 2026年佛山市顺德区中小学编制教师招聘笔试备考试题及答案详解
- 2026年安顺市西秀区事业编单位人员招聘笔试备考题库及答案详解
- 2025年四川省乐山市中小学编制教师招聘考试试题及答案详解
- 2026年资阳市雁江区中小学编制教师招聘考试备考题库及答案详解
- 2026年四川省南充市中考历史试卷(含详细答案解析)
- 11-四年级数学期末模拟卷-含答案解析
- 2026年广西中考数学试卷(含答案)
- GB/T 451.3-2026纸和纸板第3部分:厚度的测定
- 2026年河南事业单位招聘(职业能力测验)考试真题及答案
- 2026年山东高考考生高考志愿填报指南课件
- 2026甘肃白银景泰县公安局招聘警务辅助人员25人笔试备考试题及答案详解
- 2025-2026学年福建省漳州市八年级下册期末考试数学试题 含答案
- 家用电器-5个问题理清海信集团旗下家电业务
- 2026年中国中医科学院广安门医院医护人员招聘笔试参考试题及答案详解
- 广东省广州市广大附中教育集团2022-2023学年九年级上学期自主招生数学试题(含答案解析)
评论
0/150
提交评论