欢迎来到天天文库
浏览记录
ID:59239965
大小:195.50 KB
页数:30页
时间:2020-09-26
《第八章中间代码生成ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章:中间代码生成概述三地址码声明语句赋值语句布尔表达式1第八章:中间代码生成:概述编译器的分析综合模型分析部分:源程序=〉基本块=〉中间表示综合部分:中间表示=〉目标程序图8-1:中间代码生成器的位置使用中间表示(形式)的优点重置目标比较容易可在中间表示上应用与机器无关的代码优化器如何实现?语法制导翻译2第八章:中间代码生成:概述中间表示后缀表示(表达式)语法树/分析树和DAG:图8-2图8-3:语法制导定义产生语法树/DAG语法树:mkunode和mknode每次返回新节点指针图8-4:图8-2a中语法树的两种表示DAG:mku
2、node和mknode尽可能返回现存节点指针三地址码3第八章:中间代码生成概述三地址码声明语句赋值语句布尔表达式4第八章:中间代码生成:三地址码三地址码的一般形式x:=yopz三地址码是语法树或DAG的线性表示图8-5:图8-2中的语法树和DAG相对应的三地址码5第八章:中间代码生成:三地址码三地址语句的类型(通用)x:=yopzx:=opyx:=yx:=y[i]及x[i]:=yx:=&y,x:=*y及*x:=ygotoLifxrelopygotoLp(x1,x2…xn)paramx1paramx2…paramxncallp,nret
3、urny6第八章:中间代码生成:三地址码语法制导翻译生成三地址码临时名字成了语法树的内节点图8-6:S属性定义生成赋值语句的三地址码图8-7:为while语句生成代码的语义规则7第八章:中间代码生成:三地址码三地址语句的实现抽象形式:三地址语句具体实现:通过带有操作符合操作数的记录结构来实现四元式三元式间接三元式8第八章:中间代码生成:三地址码三地址语句的实现四元式带有四个域的记录结构:op,arg1,arg2,resultarg1,arg2,result域的内容正常情况下指向这些域所代表的名字在符号表表项的指针临时名字在生成时一定要
4、被写入符号表图8-8a:三地址语句的四元式表示9第八章:中间代码生成:三地址码三地址语句的实现三元式为了避免临时名字在生成时被写入符号表中,可以通过计算临时值的语句的位置来引用它带有四个域的记录结构:op,arg1,arg2arg1,arg2指向符号表(对于程序员定义的名字或常量)的指针或者三元组结构(对于临时变量)的指针图8-8b:三地址语句的三元式表示图8-9:更多三元式表示10第八章:中间代码生成:三地址码三地址语句的实现间接三元式列出指向三元式的指针,而不是列出三元式本身图8-10:三地址语句的间接三元式表示11第八章:中间代
5、码生成:三地址码三地址语句的实现表示方法比较:间址的使用使用四元式表示,定义或使用临时变量的三地址语句可以通过符号表直接访问临时变量的地址使用四元式表示,符号表在值的计算及使用之间提供了一次额外间址,有利于优化。使用三元式表示,移动一条定义临时值的语句需要我们改变在arg1及arg2数组中所有对该语句的引用,难以优化。使用间接三元式表示,可以通过statement列表的重新排序来移动语句。12第八章:中间代码生成概述三地址码声明语句赋值语句布尔表达式13第八章:中间代码生成:声明语句过程中的声明语句单个过程中所有的声明语句作为一个组来
6、处理(Pascal,C,Fortran)使用一个全局变量offset跟踪下一个可用的相对地址图8-11:计算声明语句中名字的类型和相对地址重写产生式P->{offset:=0}D以便所有的动作都出现在产生式右部的未端P->MDM->ε{offset:=0}14第八章:中间代码生成:声明语句跟踪作用域信息嵌套过程当看到嵌套的过程时,应暂时挂起对外围过程声明语句的处理假定每个过程都有一个单独的符号表,当遇到过程声明D->procid;D1;S时,便创建一个新的符号表,并在此符号表中为D1中的声明创建相应的表项。新表有一个指针指回外围过程的
7、符号表;由id代表的名字本身是该外围过程的局部名字。15第八章:中间代码生成:声明语句跟踪作用域信息嵌套过程图8-12:嵌套过程的符号表图8-13:处理嵌套过程中的声明语句两个栈:1)一个存放嵌套过程的外围符号表;2)1)一个存放嵌套过程的外围offset16第八章:中间代码生成:声明语句记录中的域名图8-14:为记录中的域名建立符号表记录的布局与过程的活动记录的布局相似17第八章:中间代码生成概述三地址码声明语句赋值语句布尔表达式18第八章:中间代码生成:赋值语句表达式的类型整型、实型、数组、记录主要问题在符号表中查找名字存储数组及
8、记录中的元素19第八章:中间代码生成:赋值语句符号表中的名字图8-15:为赋值语句产生三地址码的翻译模式通过适当的lookup操作和嵌套过程的符号表指针top(tblptr),实现最近嵌套作用域规则(图8-13)临时名字
此文档下载收益归作者所有