回填拉链翻译举例.ppt
《回填拉链翻译举例.ppt》由会员分享,可在线阅读,更多相关《回填拉链翻译举例.ppt(13页珍藏版)》请在装配图网上搜索。
设程序结构定义如下:PSSifEthenSSifEthenSelseSSwhileEdoSSbeginLendSALL;SLS布尔表达式E及赋值语句A定义见书上,为能及时地回填有关四元式串的转移地址,改写文法如下:PSC,ifEthen,SCS1,TpCSelse,STPS2,Wwhile,WdWEdo,SWdS3,SbeginLend,SA,LSL;,LLSS1,自底向上语法制导翻译方案实现过程分析(关于控制结构的翻译),翻译中使用回填-拉链技术翻译while(ad)thenx=y+z,步骤1:移进while,并按如下产生式归约WwhileW.codebegin=nextstat;四元式表内容如下:,nextstat100,W.codebegin,句型变为W(ad)thenx=y+z,步骤2:对于句型W(ad)thenx=y+z移进(ab)并按如下产生式归约Ei1relopi2E.true=nextstat;E.false=nextstat+1;E.codebegin=nextstat;gen(ifad)thenx=y+z移进do并按如下产生式归约WdWEdobackpatch(E.true,nextstat);Wd.chain=E.false;Wd.codebegin=W.codebegin;四元式表内容如下:,100ifad)thenx=y+z,步骤4:对于句型Wdif(cd)thenx=y+z移进if(cd),并按如下产生式归约Ei1relopi2E.true=nextstat;E.false=nextstat+1;E.codebegin=nextstat;gen(ifabgoto_);gen(goto_);E(E1)E.true=E1.true;E.false=E1.false;E.codebegin=E1.codebegin;四元式表内容:,100ifadgoto_,103goto_,104,E.true,E.false,句型变为WdifEthenx=y+z,步骤5:对于句型WdifEthenx=y+z按如下产生式归约CifEthenbackpatch(E.true,nextstat);C.chain=E.false;四元式表内容:,100ifadgoto104,103goto_,104,C.chain,句型变为WdCx=y+z,步骤6:对于句型WdCx=y+z移进x=y+z,按如下产生式归约Bip=lookup(i.name);if(pnil)E.place=pelseerrorBB1+B2B.place=newtemp;gen(B.place=B1.place+B2.place;Ai=Bp=lookup(i.name);if(pnil)gen(p=E.place)elseerror四元式表内容:,100ifadgoto104,103goto_,104t=y+z,C.chain,句型变为:WdCA,105x=t,106,步骤7:对于句型WdCA,按如下产生式归约SAS.chain=0SCS1S.chain=merge(C.chain,S1.chain);/可能S1ifathenx=1elsex=2;四元式表内容:,100ifadgoto104,103goto_,104t=y+z,S.chain,句型变为:WdS,105x=t,106,步骤8:对于句型WdS,按如下产生式归约SWdS1backpatch(S1.chain,Wd.codebegin);gen(gotoWd.codebegin);S.chain=Wd.chain四元式表内容:,100ifadgoto104,103goto100,104t=y+z,句型变为:S,105x=t,106goto100,107,步骤9:对于句型S,按如下产生式归约(假设忽略说明语句)PSbackpatch(S.chain,nextstat);gen(return/返回主函数四元式表内容:,100ifadgoto104,103goto100,104t=y+z,105x=t,106goto100,107return,108,递归下降语法制导翻译方案中实现控制结构的翻译:翻译思路:布尔表达式求值,并设置标号避免回填,if(E)getlabelgen(JZ,E.place,_,label1)S1getlabelgen(JP,_,_,label2)setlabel(label1:)elseS1setlabel(label2:)whilegetlabelsetlabel(label1:)(E)getlabelgen(JZ,E.place,_,label2)doSgen(JP,_,_,label1)setlabel(label2:),label1,label2,label1,label2,for(E1;getlabelsetlabel(label1:)E2getlabelgetlabelgen(JZ,E2.place,_,label2)gen(JP,_,_,label3);getlabelsetlabel(label4:)E3gen(JP,_,_,label1)setlabel(label3:)Sgen(JP,_,_,label4)setlabel(label2:)readilookgen(IN,标准输入设备,_,i.place),label1,label2,label3,label4,write(E)gen(out,E.place,_,标准输出设备),name,nameplace,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 回填 拉链 翻译 举例
![提示](https://www.zhuangpeitu.com/images/bang_tan.gif)
关于本文