编译原理4语义3控制语句的翻译ppt课件_第1页
编译原理4语义3控制语句的翻译ppt课件_第2页
编译原理4语义3控制语句的翻译ppt课件_第3页
编译原理4语义3控制语句的翻译ppt课件_第4页
编译原理4语义3控制语句的翻译ppt课件_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、第第 11 11 讲讲西北农林科技大学本科教程西北农林科技大学本科教程 主讲教师:赵建邦主讲教师:赵建邦 第四章第四章 语义分析和中间代码生成语义分析和中间代码生成l4.1 4.1 语义分析概述语义分析概述l4.2 4.2 属性文法属性文法l4.3 4.3 几种常见的中间语言几种常见的中间语言l4.4 4.4 表达式及赋值语句的翻译表达式及赋值语句的翻译l4.5 4.5 控制语句的翻译控制语句的翻译l4.6 4.6 数组元素的翻译数组元素的翻译l4.7 4.7 过程或函数调用语句的翻译过程或函数调用语句的翻译l4.8 4.8 说明语句的翻译说明语句的翻译l4.9 4.9 递归下降语法制导翻译方

2、法简介递归下降语法制导翻译方法简介u第四章第四章 y) if(a b) m=m+1;else m=m-1;else x=y;解答解答:解题技巧:不需要根据语义子程序,只需要画出:解题技巧:不需要根据语义子程序,只需要画出 代码结构图,根据转换关系来翻译四元式:代码结构图,根据转换关系来翻译四元式:if (xy) if(a b) m=m+1;else m=m-1;else x=y; 一个布尔分量对应一个布尔分量对应 个四元式;个四元式; else对应对应 个无条件跳转四元式;个无条件跳转四元式; 注意真假出口的预留与回填。注意真假出口的预留与回填。21TFTFTF4.5 4.5 控制语句的翻译控

3、制语句的翻译u4.5.2 条件循环语句条件循环语句while的翻译的翻译u1.循环语句的代码结构图:循环语句的代码结构图:while (E) S(1) 图图4-12 4-12 条件循环语句条件循环语句whilewhile的代码结构的代码结构1:E的真出口是的真出口是S(1)2:E的假出口是循环的假出口是循环体外体外3:S(1)的后面无条件的后面无条件转移,重新判断转移,重新判断E4.5 4.5 控制语句的翻译控制语句的翻译l2.2.翻译思想:翻译思想:S while (E) S(1) S while (E) S(1) l (1) (1)翻译翻译E E代码段,并留两个待填的代码段,并留两个待填的

4、E.tcE.tc和和E.fc;E.fc;l (2) (2) 扫描过扫描过“)”“)”之后,就可回填之后,就可回填E.tc;E.tc;l (3) (3) 翻译翻译S(1) S(1) ,然后无条件转移到,然后无条件转移到E E的第一条四元式;的第一条四元式;l 因而:因而:l 1. 1. 为了保证为了保证(3)(3)的无条件转移,必须保存的无条件转移,必须保存E E的第一条的第一条四元式序号;四元式序号;l 2. E 2. E为假时,需要回填,需要用为假时,需要回填,需要用S.chainS.chain保存保存E.fc;E.fc;4.5 4.5 控制语句的翻译控制语句的翻译l3. 给出易于及时处理和

5、回填的条件循环语句给出易于及时处理和回填的条件循环语句while的文法的文法GS如下:如下: GS: (1) SWdS(1) (2) WdW(E) (3) Wwhilel语义子程序语义子程序l 例:例:while(ab) S(1) l (1) 使用使用(3) Wwhile进行规约。保存条件的开始位置,进行规约。保存条件的开始位置,也就是无条件语句转移的位置。也就是无条件语句转移的位置。l Wwhile W.quad=nxq; 4.5 4.5 控制语句的翻译控制语句的翻译l例:例:while(ab) S(1) l (2)使用使用(2) WdW(E)进行规约。进行规约。l 由于由于E的真出口已经确

6、定为的真出口已经确定为nxq,回填,回填E.tc;l E.fc无法确定,无法确定,Wd.chain用于保存待填信息,以备回填;用于保存待填信息,以备回填;l 的首入口的首入口(W.quad)用用Wd.quad保存,以备强制转移。保存,以备强制转移。l WdW(E) Backpatch(E.tc,nxq); Wd.chain=E.fc; Wd.quad= W.quad; 4.5 4.5 控制语句的翻译控制语句的翻译l例:例:while(ab) S(1) l (3)使用使用(1) SWdS(1)进行规约。进行规约。l 如果如果S(1)也是也是if-else语句,语句,S(1).chain表示表示S

7、(1)后续的四后续的四元式序列,但不是元式序列,但不是while循环体外的四元式。这时的跳转一定循环体外的四元式。这时的跳转一定是再回到是再回到E条件,因此需要回填条件,因此需要回填S(1).chain对应的四元式串;对应的四元式串;l 产生无条件跳转四元式,回到产生无条件跳转四元式,回到E条件,进行循环;条件,进行循环;l 整个整个while语句的出口,是语句的出口,是Wd 的出口,也就是的出口,也就是E.fc。l SWd S(1) Backpatch (S(1).chain,Wd.quad); emit(j,_,_,Wd.quad); S.chain= Wd .chain; 课堂练习:将下

8、列语句翻译成四元式重点)课堂练习:将下列语句翻译成四元式重点)4.5 4.5 控制语句的翻译控制语句的翻译(课本(课本P121 例例4.6)while(AB) if (CD) X = Y+Z;解答解答:只需要画出代码结构图,根据转换关系来翻译四元式:只需要画出代码结构图,根据转换关系来翻译四元式: 一个布尔分量对应一个布尔分量对应 个四元式;个四元式; else对应对应 个无条件跳转四元式;个无条件跳转四元式; while的循环体的循环体S最后必须有最后必须有 个强制跳转四元式。个强制跳转四元式。211 while(AB) if (CD) X = Y+Z; jump q:while后面的语句后

9、面的语句TTFF课堂练习:将下列语句翻译成四元式重点)课堂练习:将下列语句翻译成四元式重点)4.5 4.5 控制语句的翻译控制语句的翻译(课本(课本P121 例例4.7)if (a b) while (xn) x = x + y; /(+,x,y,x)TTTTjumpFFFFqTF4.5 4.5 控制语句的翻译控制语句的翻译u4.5.4 多分支控制语句多分支控制语句case的翻译的翻译(自学自学)u4.5.5 语句标号和转移语句的翻译语句标号和转移语句的翻译u程序语言中直接改变控制流程的语句是程序语言中直接改变控制流程的语句是goto L语句,其中语句,其中L是源是源程序中的语句标号。标号程序

10、中的语句标号。标号L在源程序中可以以两种方式出现在源程序中可以以两种方式出现(1) 定义性出现。定义性出现的语句形式为定义性出现。定义性出现的语句形式为L: S此时,带标号的语句此时,带标号的语句S所生成的第一个四元式地址即为标号所生成的第一个四元式地址即为标号L的值。的值。(2) 引用性出现。引用性出现的语句形式为引用性出现。引用性出现的语句形式为 goto L它引用它引用L的值作为四元式的值作为四元式(j,_,_,L)中转向的目标地址。中转向的目标地址。4.5 4.5 控制语句的翻译控制语句的翻译l翻译翻译goto L 语句需要查询符号表,根据语句需要查询符号表,根据L是否已经定值,将该是

11、否已经定值,将该语句的使用分为以下几种情况:语句的使用分为以下几种情况:l1. 先定义,后使用:先定义,后使用:l (1)形式:形式:l L:Sl l GOTO Ll l (2)文法:文法:l S goto L (使用标号使用标号)l Label i: (定义标号定义标号)4.5 4.5 控制语句的翻译控制语句的翻译 (3) (3)翻译过程:遇到标号语句时,先将标号规约为翻译过程:遇到标号语句时,先将标号规约为Lable,Lable,再再将将L L填入符号表中:填入符号表中: 其中,其中,S.QUADS.QUAD为为S S对应的入口四元式序号;对应的入口四元式序号; 当后面的程序中遇到当后面的

12、程序中遇到GOTO LGOTO L时,便产生时,便产生(j,_,_,S.QUAD)(j,_,_,S.QUAD)。 4.5 4.5 控制语句的翻译控制语句的翻译l翻译翻译goto L 语句需要查询符号表,根据语句需要查询符号表,根据L是否已经定值,将该是否已经定值,将该语句的使用分为以下几种情况:语句的使用分为以下几种情况:l2. 先使用,后定义:先使用,后定义:l (1)形式:形式: GOTO Ll l GOTO Ll l L:Sl (2)翻译过程:当遇到符号翻译过程:当遇到符号L时,符号表中还未定义,填入时,符号表中还未定义,填入符号表中的信息与之前有些不同,如下:符号表中的信息与之前有些不

13、同,如下:4.5 4.5 控制语句的翻译控制语句的翻译 第一次遇到第一次遇到L L的翻译过程:的翻译过程: (a) (a)填符号表,将填符号表,将“定义否定义否一栏填写一栏填写“未未”,地址栏暂时,地址栏暂时填写即将生成的四元式序号,填写即将生成的四元式序号,CATCAT栏填写栏填写“标号标号”; (b) (b)生成四元式生成四元式(p)(j,_,_,0)(p)(j,_,_,0)等待回填;等待回填;4.5 4.5 控制语句的翻译控制语句的翻译 第二次遇到第二次遇到L L的翻译过程:的翻译过程: (c) (c)修改符号表,仅将地址栏内容修改为即将生成的四元式修改符号表,仅将地址栏内容修改为即将生成的四元式序号序号q q; (d) (d)生成四元式生成四元式(q)(j,_,_,p),(q)(j,_,_,p),其中第四字段的其中第四字段的p p取自取自L L的地的地址栏修改前的内容,即形成一个需要回填的链,反复址栏修改前的

温馨提示

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

评论

0/150

提交评论