编译原理语义3(控制语句的翻译).ppt

上传人:zhu****ei 文档编号:3529935 上传时间:2019-12-17 格式:PPT 页数:27 大小:1.18MB
返回 下载 相关 举报
编译原理语义3(控制语句的翻译).ppt_第1页
第1页 / 共27页
编译原理语义3(控制语句的翻译).ppt_第2页
第2页 / 共27页
编译原理语义3(控制语句的翻译).ppt_第3页
第3页 / 共27页
点击查看更多>>
资源描述
第11讲,编译原理,西北农林科技大学本科教程,主讲教师:赵建邦,第四章语义分析和中间代码生成,4.1语义分析概述4.2属性文法4.3几种常见的中间语言4.4表达式及赋值语句的翻译4.5控制语句的翻译4.6数组元素的翻译4.7过程或函数调用语句的翻译4.8说明语句的翻译4.9递归下降语法制导翻译方法简介,第四章语义分析和中间代码生成4.5控制语句的翻译条件语句if条件循环语句while多分支控制语句case(自学)转移语句goto重点掌握通过代码结构图翻译if、while语句(重点),本讲目标,4.5控制语句的翻译,4.5程序流程控制的三种基本结构顺序结构:一般用复合语句实现;选择结构:if-elseif-else,switch-case;循环结构:for,while,do-while,4.5控制语句的翻译,图4-11if(E)S的代码结构,图4-10条件语句if(E)S1;elseS2的代码结构,4.5控制语句的翻译,为了在扫描条件语句过程中不失时机地处理和回填有关信息,可将GS改写为如下的GS:GS:(1)SCS(1)(2)Cif(E)(3)STPS(2)(4)TPCS(1);else,4.5控制语句的翻译,(1)无论是哪种if语句,首先用产生式(2)Cif(E)进行归约,这时E的真出口即为S(1)的第一个四元式;E的假出口地址则作为待填信息放在C的语义变量C.chain中等待回填;所以:,4.5控制语句的翻译,Cif(E)Backpatch(E.tc,nxq);C.chain=E.fc;,(1)SCS(1)(2)Cif(E),扫描到“)”,立即回填E的真出口,C.chain中只保存E的待填假出口,(2)不含else时,用(1)SCS(1)进行规约,E的假出口是S(1)的出口,将C.chain和S(1).chain一起作为S的待填信息链用函数merge链在一起保留在S的语义值S.chain中:,4.5控制语句的翻译,(1)SCS(1)(2)Cif(E),SCS(1)S.chain=merge(C.chain,S(1).chain),CS(1),规约后:,S(1).chain,(3)用产生式(2)Cif(E)进行归约之后,如果:条件语句后有else,用(4)继续规约。,4.5控制语句的翻译,(2)Cif(E)(3)STPS(2)(4)TPCS(1);else,TPCS(1);elseq=nxq;emit(j,_,_,0);Backpatch(C.chain,nxq);TP.chain=merge(S(1).chain,q);,注意1:只要遇到有else的规约,必须先产生一条无条件转移。,if(E)S(1);elseS(2),CS(1);elseS(2),TPS(2),2:S(2)就是C.chain,3:q就是S(1).chain,(4)最后用产生式(3)STPS(2)进行归约,S(2)语句序列处理完后继续翻译if语句之后的后继语句。后继语句的四元式地址与S(2)语句序列的出口一致,故将TP.chain与S(2).chain链接后挂入链头为S.chain的链中,即:,4.5控制语句的翻译,(2)Cif(E)(3)STPS(2)(4)TPCS(1);else,STPS(2)S.chain=merge(TP.chain,S(2).chain);,课堂练习:将下列语句翻译成四元式(重点),4.5控制语句的翻译,(课本P120例4.5),if(xy)if(ab)m=m+1;elsem=m-1;elsex=y;,解答:解题技巧:不需要根据语义子程序,只需要画出代码结构图,根据转换关系来翻译四元式:,if(xy)if(ab)m=m+1;elsem=m-1;elsex=y;,一个布尔分量对应个四元式;else对应个无条件跳转四元式;注意真假出口的预留与回填。,2,1,4.5控制语句的翻译,4.5.2条件循环语句while的翻译1.循环语句的代码结构图:while(E)S(1),图4-12条件循环语句while的代码结构,1:E的真出口是S(1),2:E的假出口是循环体外,3:S(1)的后面无条件转移,重新判断E,4.5控制语句的翻译,2.翻译思想:Swhile(E)S(1)(1)翻译E代码段,并留两个待填的E.tc和E.fc;(2)扫描过“)”之后,就可回填E.tc;(3)翻译S(1),然后无条件转移到E的第一条四元式;因此:1.为了保证(3)的无条件转移,必须保存E的第一条四元式序号;2.E为假时,需要回填,需要用S.chain保存E.fc;,4.5控制语句的翻译,3.给出易于及时处理和回填的条件循环语句while的文法GS如下:GS:(1)SWdS(1)(2)WdW(E)(3)Wwhile语义子程序例:while(ab)S(1)(1)使用(3)Wwhile进行规约。保存条件的开始位置,也就是无条件语句转移的位置。,WwhileW.quad=nxq;,4.5控制语句的翻译,例:while(ab)S(1)(2)使用(2)WdW(E)进行规约。由于E的真出口已经确定为nxq,回填E.tc;E.fc无法确定,Wd.chain用于保存待填信息,以备回填;的首入口(W.quad)用Wd.quad保存,以备强制转移。,WdW(E)Backpatch(E.tc,nxq);Wd.chain=E.fc;Wd.quad=W.quad;,4.5控制语句的翻译,例:while(ab)S(1)(3)使用(1)SWdS(1)进行规约。如果S(1)也是if-else语句,S(1).chain表示S(1)后续的四元式序列,但不是while循环体外的四元式。这时的跳转一定是再回到E条件,因此需要回填S(1).chain对应的四元式串;产生无条件跳转四元式,回到E条件,进行循环;整个while语句的出口,是Wd的出口,也就是E.fc。,SWdS(1)Backpatch(S(1).chain,Wd.quad);emit(j,_,_,Wd.quad);S.chain=Wd.chain;,课堂练习:将下列语句翻译成四元式(重点),4.5控制语句的翻译,(课本P121例4.6),while(AB)if(CD)X=Y+Z;,解答:只需要画出代码结构图,根据转换关系来翻译四元式:,一个布尔分量对应个四元式;else对应个无条件跳转四元式;while的循环体S最后必须有个强制跳转四元式。,2,1,1,课堂练习:将下列语句翻译成四元式(重点),4.5控制语句的翻译,(课本P121例4.7),if(ab)while(xn)x=x+y;/(+,x,y,x),T,T,T,T,jump,F,F,F,F,q,T,F,4.5控制语句的翻译,4.5.4多分支控制语句case的翻译(自学)4.5.5语句标号和转移语句的翻译程序语言中直接改变控制流程的语句是gotoL语句,其中L是源程序中的语句标号。标号L在源程序中可以以两种方式出现,(1)定义性出现。定义性出现的语句形式为L:S此时,带标号的语句S所生成的第一个四元式地址即为标号L的值。,(2)引用性出现。引用性出现的语句形式为gotoL它引用L的值作为四元式(j,_,_,L)中转向的目标地址。,4.5控制语句的翻译,翻译gotoL语句需要查询符号表,根据L是否已经定值,将该语句的使用分为以下几种情况:1.先定义,后使用:(1)形式:L:SGOTOL(2)文法:SgotoL(使用标号)Labeli:(定义标号),4.5控制语句的翻译,(3)翻译过程:遇到标号语句时,先将标号规约为Lable,再将L填入符号表中:其中,S.QUAD为S对应的入口四元式序号;当后面的程序中遇到GOTOL时,便产生(j,_,_,S.QUAD)。,4.5控制语句的翻译,翻译gotoL语句需要查询符号表,根据L是否已经定值,将该语句的使用分为以下几种情况:2.先使用,后定义:(1)形式:GOTOLGOTOLL:S(2)翻译过程:当遇到符号L时,符号表中还未定义,填入符号表中的信息与之前有些不同,如下:,4.5控制语句的翻译,第一次遇到L的翻译过程:(a)填符号表,将“定义否”一栏填写“未”,地址栏暂时填写即将生成的四元式序号,CAT栏填写“标号”;(b)生成四元式(p)(j,_,_,0)等待回填;,4.5控制语句的翻译,第二次遇到L的翻译过程:(c)修改符号表,仅将地址栏内容修改为即将生成的四元式序号q;(d)生成四元式(q)(j,_,_,p),其中第四字段的p取自L的地址栏修改前的内容,即形成一个需要回填的链,重复(c)(d);,4.5控制语句的翻译,(e)遇到定义性语句L:S出现时,用S语句第一个四元式序号r回填L所对应的链。修改“定义否”为“是”,修改地址栏为r.,课后习题:4.84.9,4.5控制语句的翻译,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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