compiler8_中间代码.ppt

compiler8_中间代码.ppt

ID:48183081

大小:270.50 KB

页数:29页

时间:2020-01-18

compiler8_中间代码.ppt_第1页
compiler8_中间代码.ppt_第2页
compiler8_中间代码.ppt_第3页
compiler8_中间代码.ppt_第4页
compiler8_中间代码.ppt_第5页
资源描述:

《compiler8_中间代码.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第8章中间代码一、教学目的了解中间代码生成的相关概念,熟悉几种常见的中间代码形式,掌握掌握赋值语句、if语句、循环语句的常见的语句的中间代码的生成。二、教学的难点与重点1、中间代码形式2、几种常见语句的中间代码的生成何谓中间代码:(Intermediatecode/Intermediaterepresentation/Intermediatelanguage)源程序的一种内部表示,不依赖目标机的结构,易于机械生成目标代码的中间表示。为什么要此阶段主要优点是可移植(与具体目标程序无关),且易于目标

2、代码优化中间代码的几种形式逆波兰、N-元表示(四元式、三元式)、树、抽象机代码第8章中间代码(源程序的中间形式)例:A+B*(C-D)+E/(C-D)^N逆波兰:ABCD-*+ECD–N^/+四元式:(1)(-CDT1)(2)(*BT1T2)(3)(+AT2T3)(-CDT4)(^T4NT5)(6)(/ET5T6)(7)(+T3T6T7)三元式:(1)(-CD)(2)(*B(1))(3)(+A(2))(4)(-CD)(5)(^(4)N)(6)(/E(5))(7)(+(3)(6))if语句的波兰表

3、示:有如下if语句:ifthenelse波兰表示为:BZBRBZ:二目操作符,如果的计算结果为0,则产生一个的转移,而label1是的头一个符号BR:一目操作符,它产生一个的转移,而是一个紧跟在后面的符号(即是if语句后的第一个语句的头一个符号)8.1中间代码的几种形式——波兰表示由i

4、f语句的波兰表示可生成如下的目标程序框架:BZlabel1BRlabel2label1:label2:其他语言结构很容易将其翻译成波兰表示,使用波兰表示优化不是十分方便。波兰表示为:BZBRX-yBZ,label1Z:=XBR,label2Label:Z:=Y+1Label2:M=z+2:例:Ifx>ythenz:=xelsez:=y+1;M=z+2;有如下if语句:ift

5、henelse在该表示中,每条指令由n个域所组成,通常第一个域表示标识符,其余位操作符。常用的n元表示是:三元式四元式三元式:操作符左操作符右操作符表达式的三元式:w*x+(y+z)(1)*,w,x(2)+,y,z(3)+,(1),(2)第三个三元式中的操作数(1)(2)表示第(1)和第(2)条三元式的计算结果。8.1中间代码的几种形式——N-元表示条件语句的三元式:Ifx>ythenz:=x;elsez:=y+1;-,x,yBZ,(1),(5):=,Z,XBR,,(

6、7)+,Y,1:=,Z,(5)::其中:BZ:是二目(元)操作符,测试第二个域的值,若<0,则按第3个域的地址转移,若为正值则该指令作废。BR:一目(元)操作符,按第3个域作无条件转移。使用三元式不便于代码优化因为优化要删除一些三元式,或对某些三元式的位置要进行变更,由于三元式的结果(表示为编号),可以是某个三元式的操作数,随着三元式位置的变更也将作相应的修改,很费事。间接三元式:为了便于在三元式上作优化处理,可使用间接三元式三元式的执行次序用另一张表表示,这样在优化时,三元式可以不变,而仅仅改

7、变其执行顺序表。例:A:=B+C*D/EF:=C*D用间接三元式表示为:操作三元式1.(1)(1)*,C,D2.(2)(2)/,(1),E3.(3)(3)+,B,(2)4.(4)(4):=,A,(3)5.(1)(5):=,F,(1)6.(5)三元式的执行次序用另一张表表示,这样在优化时,三元式可以不变,而仅仅改变其执行顺序表。四元式表示:操作符操作数1操作数2结果结果:通常是由编译引分的临时变量,可由编译程序做一个寄存器或主存单元。例1:(A+B)*(C+D)-E+,A,B,T1+,C,D,T2

8、*,T1,T2,T3一,T3,E,T4式中,T1,T2,T3,T4为临时变量四元式优化比较方便例2:简单赋值语句的(四元式)翻译四元式形式:t:=arg1oparg2语义属性:id.name,E.place函数:lookup(id.name);过程:emit(t:=arg1oparg2);t:newtemp;产生式和语义描述:(1)Sid:=E{P:=lookup(id.name);ifPnilthenemit(P“:=”E.place)elseerror}(2)EE1+E2{E.plac

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。