编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt

编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt

ID:51619209

大小:352.00 KB

页数:21页

时间:2020-03-26

编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt_第1页
编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt_第2页
编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt_第3页
编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt_第4页
编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt_第5页
资源描述:

《编译技术 张莉第一部分-基础篇 电子教案-第7章-源程序的中间形式.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第七章源程序的中间形式波兰表示N-元表示抽象机代码7.1波兰表示一般编译程序都生成中间代码,然后再生成目标代码,主要优点是可移植(与具体目标程序无关),且易于目标代码优化。有多种中间代码形式:波兰表示N-元组表示抽象机代码波兰表示算术表达式:F*3.1416*R*(H+R)转换成波兰表示:F3.1416*R*HR+*AF3.1416*R*HR+*:=A:=F*3.1416*R*(H+R)赋值语句:波兰表示:#a+b#ab++##优先级最低算法:设一个操作符栈;当读到操作数时,立即输出该操作数,当扫描到操作符时,与栈顶操作符比较优先级,若栈顶操作符优先级高于栈外,则输出该栈顶操作符,反之,则

2、栈外操作符入栈。操作符栈*(H+R)F3.1416*R*转换算法波兰表示算术表达式:F*3.1416*R*(H+R)波兰表示:F3.1416*R*HR+*操作符栈输入输出F*3.1416*R*(H+R)*3.1416*R*(H+R)F*3.1416*R*(H+R)F**R*(H+R)F3.1416·>*R*(H+R)F3.1416***(H+R)F3.1416*R·>*(H+R)F3.1416*R**(+R)F3.1416*R*H<·*(+R)F3.1416*R*H*(+)F3.1416*R*HR·><·*()F3.1416*R*HR+F3.1416*R*HR+*if语句的波兰表示if语句

3、:ifthenelse波兰表示为:BZBRBZ:二目操作符若的计算结果为0(false),则产生一个到的转移BR:一目操作符产生一个到的转移label1label2由if语句的波兰表示可生成如下的目标程序框架:BZlabel1BRlabel2label1:label2:其他语言结构也很容易将其翻译成波兰表示,使用波兰表示优化不是十分方便。波兰表示为:BZ<

4、label2>BR7.2N-元表示在该表示中,每条指令由n个域组成,通常第一个域表示操作符,其余为操作数。常用的n元表示是:三元式四元式三元式操作符左操作数右操作数表达式的三元式:w*x+(y+z)(1)*,w,x(2)+,y,z(3)+,(1),(2)第三个三元式中的操作数(1)(2)表示第(1)和第(2)条三元式的计算结果。条件语句的三元式:ifx>ythenz:=x;elsez:=y+1;(1)-,x,y(2)BMZ,(1),(5)(3):=,z,x(4)BR,,(7)(5)+,y,1(6):=,z,(5)(7)::其中:BMZ:是二元操作符,测试第二个域的值,若≤0,

5、则按第3个域的地址转移,若>0,则顺序执行。BR:一元操作符,按第3个域作无条件转移。使用三元式不便于代码优化,因为优化要删除一些三元式,或对某些三元式的位置要进行变更,由于三元式的结果(表示为编号),可以是某个三元式的操作数,随着三元式位置的变更也将作相应的修改,很费事。间接三元式:为了便于在三元式上作优化处理,可使用间接三元式三元式的执行次序用另一张表表示,这样在优化时,三元式可以不变,而仅仅改变其执行顺序表。例:A:=B+C*D/EF:=C*D用间接三元式表示为:操作三元式1.(1)(1)*,C,D2.(2)(2)/,(1),E3.(3)(3)+,B,(2)4.(4)(4):=,A,

6、(3)5.(1)(5):=,F,(1)6.(5)四元式表示操作符操作数1操作数2结果结果:通常是由编译引入的临时变量,可由编译程序分配一个寄存器或主存单元。例:(A+B)*(C+D)-E+,A,B,T1+,C,D,T2*,T1,T2,T3一,T3,E,T4式中T1,T2,T3,T4为临时变量,由四元式优化比较方便7.3抽象机代码许多pascal编译系统生成的中间代码是一种称为P-code的抽象代码,P-code的“P”即“Pseudo”抽象机:寄存器保存程序指令的存储器堆栈式数据及操作存储寄存器有:1.PC-程序计数器2.NP-New指针,指向“堆”的顶部。“堆”用来存放由New生成的动态

7、数据。3.SP-运行栈指针,存放所有可按源程序的数据声明直接寻址的数据。4.BP-基地址指针,即指向当前活动记录的起始位置指针。5.其他,(如MP-栈标志指针,EP-极限栈指针等)计算机的存储大致情况如下:P-code指令PC程序指令存储器NPSPBP栈底运行栈堆堆底常量区当前模块活动记录(数据段)运行P-code的抽象机没有专门的运算器或累加器,所有的运算(操作)都在运行栈的栈顶进行,如要进行d:=(a+b)*c的运算

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

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

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