回填拉链翻译举例_第1页
回填拉链翻译举例_第2页
回填拉链翻译举例_第3页
回填拉链翻译举例_第4页
回填拉链翻译举例_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

设程序结构定义如下:PSSifEthenSSifEthenSelseSS

whileEdoSSbeginLendSAL

L;SLS

布尔表达式E及赋值语句A定义见书上

为能及时地回填有关四元式串的转移地址,改写文法如下:PSCifEthenSCS1TpCSelseSTPS2WwhileWdWEdoSWdS3SbeginLendSALSL;LLSS1自底向上语法制导翻译方案实现过程分析(关于控制结构的翻译)翻译中使用回填-拉链技术翻译

while(a<b)doif(c>d)thenx=y+z步骤1:移进while,并按如下产生式归约

Wwhile{W.codebegin=nextstat;}

四元式表内容如下:

nextstat100

W.codebegin句型变为

W(a<b)doif(c>d)thenx=y+z步骤2:对于句型W(a<b)doif(c>d)thenx=y+z

移进(a<b)

并按如下产生式归约

Ei1relop

i2{E.true=nextstat;E.false=nextstat+1;E.codebegin=nextstat;

gen(ifa<bgoto_);gen(goto_);}E(E1){E.true=E1.true;E.false=E1.false;E.codebegin=E1.codebegin;}四元式表内容如下:

E.true100ifa<bgoto_W.codebeginE.false101goto_句型变为WEdoif(c>d)thenx=y+z步骤3:对于句型WEdoif(c>d)thenx=y+z

移进do

并按如下产生式归约

WdWEdo{backpatch(E.true,nextstat);Wd.chain=E.false;Wd.codebegin=W.codebegin;}四元式表内容如下:

100ifa<bgoto102Wd.codebegin

Wd.chain101goto_nextstat102句型变为

Wd

if(c>d)thenx=y+z步骤4:对于句型Wd

if(c>d)thenx=y+z

移进if(c>d),并按如下产生式归约

Ei1

relop

i2{E.true=nextstat;E.false=nextstat+1;E.codebegin=nextstat;gen(ifa<bgoto_);gen(goto_);}E(E1){E.true=E1.true;E.false=E1.false;E.codebegin=E1.codebegin;}四元式表内容:

100ifa<bgoto102Wd.codebegin

Wd.chain101goto_nextstat102ifc>dgoto_103goto_104E.trueE.false句型变为WdifEthenx=y+z步骤5:对于句型WdifEthenx=y+z

按如下产生式归约

CifEthen

{backpatch(E.true,nextstat); C.chain=E.false;}四元式表内容:

100ifa<bgoto102Wd.codebegin

Wd.chain101goto_nextstat102ifc>dgoto104103goto_104C.chain句型变为

WdCx=y+z步骤6:对于句型WdCx=y+z

移进x=y+z,按如下产生式归约Bi{p=lookup();if(pnil)E.place=pelseerror}BB1+B2{B.place=newtemp;gen(B.place=B1.place+B2.place;}Ai=B

{p=lookup();if(pnil)gen(p=E.place)elseerror}

四元式表内容:

100ifa<bgoto102Wd.codebegin

Wd.chain101goto_nextstat102ifc>dgoto104103goto_104t=y+zC.chain句型变为:WdC

A105x=t106步骤7:对于句型WdC

A,按如下产生式归约SA{S.chain=0}SCS1{S.chain=merge(C.chain,S1.chain);}//可能S1ifathenx=1elsex=2;四元式表内容:

100ifa<bgoto102Wd.codebegin

Wd.chain101goto_nextstat102ifc>dgoto104103goto_104t=y+zS.chain句型变为:WdS105x=t106步骤8:对于句型WdS,按如下产生式归约SWdS1{backpatch(S1.chain,Wd

.codebegin);

gen(gotoWd

.codebegin);S.chain=Wd

.chain}四元式表内容:

100ifa<bgoto102Wd.codebegin

S

.chain

101goto_nextstat102ifc>dgoto104103goto100104t=y+z句型变为:S105x=t106goto100107步骤9:对于句型S,按如下产生式归约(假设忽略说明语句)PS{backpatch(S.chain,nextstat);

gen(return//返回主函数}四元式表内容:

100ifa<bgoto102101goto107nextstat102ifc>dgoto104103goto100104t=y+z105x=t106goto100107return108递归下降语法制导翻译方案中实现控制结构的翻译:

翻译思路:布尔表达式求值,并设置标号避免回填<if>

if(E)@getlabel@gen(JZ,E.place,_,label1)S1@getlabel

@gen(JP,_,_,label2)@setlabel(

温馨提示

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

评论

0/150

提交评论