ch08--中间代码生成

ch08--中间代码生成

ID:42135618

大小:460.00 KB

页数:77页

时间:2019-09-08

ch08--中间代码生成_第1页
ch08--中间代码生成_第2页
ch08--中间代码生成_第3页
ch08--中间代码生成_第4页
ch08--中间代码生成_第5页
资源描述:

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

1、第8章中间代码生成知识点:三地址代码语句的翻译布尔表达式的翻译 回填技术中间代码生成中间代码生成程序的任务把语法分析、语义分析得到的源程序的中间表示翻译成中间代码表示采用中间代码作为过渡的优点便于编译程序的建立和移植便于进行与机器无关的代码优化工作缺点增加了I/O操作、效率下降中间代码生成程序的位置语法分析语义分析中间代码生成代码优化中间代码2中间代码生成8.1中间代码形式8.2赋值语句的翻译8.3布尔表达式的翻译8.4CASE语句的翻译8.5回填技术8.6过程调用语句的翻译小结38.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.np

3、tr,E2.nptr)E-E1E.nptr=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语法树的实现——存储结构每一个结点用一个记录表示,该记录包括一个运算符号域和若干个指向其子结点的指针域assignida+**idbidbumi

4、nusuminusidcidc0idb1idc2uminus13*024idb5idc6uminus57*468+379ida10assign9811...把所有的结点看成是一个记录的数组,结点的位置作为指向结点的指针7二、三地址代码三地址代码三地址语句组成的序列类似于汇编语言的代码语句可以有标号有控制流语句三地址语句的形式:x:=yopzx是名字、临时变量op代表运算符号,如定点、浮点、或逻辑算符等y、z是名字、常数、或临时变量8三地址语句的种类赋值语句x:=yopzx:=opyx:=y转移语

5、句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:=t5对应dag的代码t1:=-ct2:=b*t1t5:=t2+t2a:=t510三地址语句的实现——四元式四元式(op,arg1,arg2,result)(op,arg1,,result)(para

6、m,arg1,,)(goto,,,语句标号)赋值语句a:=b*-c+b*-c的四元式表示oparg1arg2result(14)uminusct1(15)*bt1t2(16)uminusct3(17)*bt3t4(18)+t2t4t5(19):=t5a11三元式:(op,arg1,arg2)为避免把临时变量名也存入符号表,可不引入临时变量把由一个语句计算出来的中间结果直接提供给引用它的语句用计算中间结果的语句的指针代替存放中间结果的临时变量赋值语句a:=b*-c+b*-c的三元式表示oparg1

7、arg2(14)uminusc(15)*b(14)(16)uminusc(17)*b(16)(18)+(15)(17)(19):=a(18)三地址语句的实现——三元式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

8、的间接三元式表示间接码表三元式oparg1arg2(14)uminusc(15)*b(14)(16)uminusc(17)*b(16)(18)+(15)(17)(19)assigna(18)语句(0)(14)(1)(15)(2)(16)(3)(17)(4)(18)(5)(19)三地址语句的实现——间接三元式148.2赋值语句的翻译假定赋值语句出现的环境可用下面的文法描述:PMD;SMDD;D

9、Did:T

10、Dprocid;ND;SNTinteger

11、real

12、array[num]

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

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

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