回填拉链翻译举例.ppt

上传人:sh****n 文档编号:12723190 上传时间:2020-05-19 格式:PPT 页数:13 大小:270.81KB
返回 下载 相关 举报
回填拉链翻译举例.ppt_第1页
第1页 / 共13页
回填拉链翻译举例.ppt_第2页
第2页 / 共13页
回填拉链翻译举例.ppt_第3页
第3页 / 共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,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!