《编译原理讲义》PPT课件.ppt

《编译原理讲义》PPT课件.ppt

ID:52101697

大小:1.26 MB

页数:86页

时间:2020-03-31

《编译原理讲义》PPT课件.ppt_第1页
《编译原理讲义》PPT课件.ppt_第2页
《编译原理讲义》PPT课件.ppt_第3页
《编译原理讲义》PPT课件.ppt_第4页
《编译原理讲义》PPT课件.ppt_第5页
资源描述:

《《编译原理讲义》PPT课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、§7中间代码生成学时:6知识点:三地址代码语句的翻译(声明、赋值、CASE、调用语句)布尔表达式的翻译回填技术§7中间代码生成中间代码生成器的任务把语法分析、语义分析得到的源程序的中间表示翻译成中间代码表示采用中间代码作为过渡的优点:翻译时不必考虑目标语言的细节,使翻译容易实现便于编译器的移植便于进行与机器无关的代码优化工作缺点:增加了I/O操作、效率下降中间代码生成器的位置:2本章主要内容7.1中间语言7.2声明语句的翻译7.3赋值语句的翻译7.4布尔表达式的翻译7.5CASE语句的翻译7.6回填技术7.7过程调用语句的翻译小结作业3@李文生制作,版权所有7.1中

2、间语言一、图形表示语法树dag图二、三地址代码三地址代码的形式三地址代码的种类三地址代码的具体实现4@李文生制作,版权所有一、图形表示语法树描绘了源程序的自然层次结构dag图以更紧凑的方式给出了同样的信息因为公共子表达式被标识出来了为赋值语句产生语法树的语法制导定义产生式语义规则Sid:=ES.nptr:=mknode(‘:=’,mkleaf(id,id.place),E.nptr)EE1+E2E.nptr:=mknode(‘+’,E1.nptr,E2.nptr)EE1*E2E.nptr:=mknode(‘*’,E1.nptr,E2.nptr)E-E1E.n

3、ptr:=mkunode(‘uminus’,E1.nptr)E(E1)E.nptr:=E1.nptrEidE.nptr:=mkleaf(id,id.place)5@李文生制作,版权所有语法树表示:dag图形表示:赋值语句a:=b*-c+b*-c的图表示法assigna+**buminusbuminusccassigna+*buminusc6@李文生制作,版权所有语法树的实现——存储结构每一个结点用一个记录表示,该记录包括一个运算符号域和若干个指向其子结点的指针域assign..ida+..*..*..idbidbuminus.uminus.idcidc0idb1

4、idc2uminus13*024idb5idc6uminus57*468+379ida10assign9811...把所有的结点看成是一个记录的数组,结点的位置作为指向结点的指针7@李文生制作,版权所有二、三地址代码三地址代码:三地址语句组成的序列类似于汇编语言的代码语句可以有标号有控制流语句三地址语句的一般形式:x:=yopzx是名字、临时变量;op代表运算符号,如定点、浮点、或逻辑算符等y、z是名字、常数、或临时变量三地址代码的含义:每条语句通常包含三个地址,两个运算对象的地址和结果地址8@李文生制作,版权所有三地址代码的种类赋值语句:x:=yopzx:=opy

5、x:=y转移语句gotoLifxrelopygotoL过程调用语句paramxcallp,n索引赋值语句:x:=y[i]x[i]:=y地址和指针赋值语句x:=&yx:=*y*x:=y9@李文生制作,版权所有赋值语句a:=b*-c+b*-c的三地址代码语法树的代码t1:=-ct2:=b*t1t3:=-ct4:=b*t3t5:=t2+t4a:=t5dag的代码t1:=-ct2:=b*t1t5:=t2+t2a:=t5三地址代码是语法树或dag的线性表示,其中新增加的名字对应图中的内部结点10@李文生制作,版权所有三地址代码的具体实现四元式:(op,arg1,a

6、rg2,result)(op,arg1,-,result)(param,arg1,-,-)(goto,-,-,语句标号)赋值语句a:=b*-c+b*-c的四元式表示:oparg1arg2result(10)uminusct1(11)*bt1t2(12)uminusct3(13)*bt3t4(14)+t2t4t5(15):=t5a11@李文生制作,版权所有三元式:(op,arg1,arg2)为避免把临时变量名也存入符号表,可不引入临时变量把由一个语句计算出来的中间结果直接提供给引用它的语句用计算中间结果的语句的指针代替存放中间结果的临时变量赋值语句a:=b*-c+b*

7、-c的三元式表示:oparg1arg2(10)uminusc(11)*b(10)(12)uminusc(13)*b(12)(14)+(11)(13)(15)assigna(14)12@李文生制作,版权所有语句x[i]:=y和x:=y[i]的三元式序列语句x[i]:=y语句x:=y[i]oparg1arg2(0)=[]xi(1)assign(0)yoparg1arg2(0)[]=yi(1)assignx(0)13@李文生制作,版权所有间接三元式间接码表:为三元式序列建立的一个指针数组其每个元素依次指向三元式序列中的一项赋值语句a:=b*-c+b*-c的间接三元式表

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

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

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