欢迎来到天天文库
浏览记录
ID:58698334
大小:1.41 MB
页数:126页
时间:2020-10-04
《第7章 语义分析与中间代码生成ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第7章语义分析与中间代码生成SchoolofComputerScience&TechnologyHarbinInstituteofTechnology重点:三地址码,各种语句的目标代码结构、语法制导定义与翻译模式。难点:布尔表达式的翻译,对各种语句的目标代码结构、语法制导定义与翻译模式的理解。1fhfhfhfh2第7章语义分析与中间代码生成7.1中间代码的形式7.2声明语句的翻译7.3赋值语句的翻译7.4类型检查7.5控制结构的翻译7.6回填7.7switch语句的翻译7.8过程调用和返回语句的翻译7.9输入输出语句的翻译7.10本章小结fh
2、fh37.1中间代码的形式中间代码的作用过渡:经过语义分析被译成中间代码序列中间代码的形式中间语言的语句中间代码的优点形式简单、语义明确、独立于目标语言便于编译系统的实现、移植、代码优化常用的中间代码语法树(6.3.5节)逆波兰表示、三地址码(三元式和四元式)、DAG图表示fhfh47.1.1逆波兰表示中缀表达式的计算顺序不是运算符出现的自然顺序,而是根据运算符间的优先关系来确定的,因此,从中缀表达式直接生成目标代码一般比较麻烦。波兰逻辑学家J.Lukasiewicz于1929年提出了后缀表示法,其优点为:表达式的运算顺序就是运算符出现的顺序
3、,它不需要使用括号来指示运算顺序。fhfh57.1.1逆波兰表示例7.1下面给出的是一些表达式的中缀、前缀和后缀表示。中缀表示前缀表示后缀表示a+b+abab+a*(b+c)*a+bcabc+*(a+b)*(c+d)*+ab+cdab+cd+*a:=a*b+c*d:=a+*ab*cdabc*bd*+:=fhfh67.1.2三地址码所谓三地址码,是指这种代码的每条指令最多只能包含三个地址,即两个操作数地址和一个结果地址。如x+y*z三地址码为:t1:=y*zt2:=x+t1三地址码中地址的形式:名字、常量、编译器生成的临时变量。fhfh77.1
4、.2三地址码例7.2赋值语句a:=(-b)*(c+d)-(c+d)的三地址码如图7.1所示t1:=minusbt2:=c+dt3:=t1*t2t4:=c+dt5:=t3-t4a:=t5图7.1a:=(-b)*(c+d)-(c+d)的三地址码fhfh87.1.2三地址码1.形如x:=yopz的赋值指令;2.形如x:=opy的赋值指令;3.形如x:=y的复制指令;4.无条件跳转指令gotoL;5.形如ifxgotoL(或iffalsexgotoL)的条件跳转指令;6.形如ifxrelopygotoL的条件跳转指令;7.过程调用和返回使用如下的指令
5、来实现:paramx用来指明参数;callp,n和y=callp,n用来表示过程调用和函数调用;returny表示过程返回;8.形如x:=y[i]和x[i]:=y的变址复制指令;9.形如x:=&y、x:=*y和*x:=y的地址和指针赋值指令。fhfh9四元式四元式是一种比较常用的中间代码形式,它由四个域组成,分别称为op、arg1、arg2和result。op是一个一元或二元运算符,arg1和arg2分别是op的两个运算对象,它们可以是变量、常量或编译器生成的临时变量,运算结果则放入result中。图7.2(a)图7.1中三地址码的四元式表示
6、fhfh10三元式为了节省临时变量的开销,有时也可以使用只有三个域的三元式来表示三地址码。三元式的三个域分别称为op,arg1和arg2,op,arg1和arg2的含义与四元式类似,区别只是arg1和arg2可以是某个三元式的编号(图7.2(b)中用圆括号括起来的数字),表示用该三元式的运算结果作为运算对象。图7.2(b)图7.1中三地址码的三元式表示fhfh11生成三地址码的语法制导定义fhfh127.1.3图表示类似于表达式的抽象语法树一样,在dag(directedacyclicgraph)中,每个节点对应一个运算符,代表表达式的一个子
7、表达式,其子节点则与该运算符的运算对象相对应,叶节点对应的是变量或者常量,可以看成是原子运算。利用dag可以很容易地消除公共子表达式例7.3表达式a+a*(b-c)-(b-c)/d的dag如图7.5所示。图7.5a+a*(b-c)-(b-c)/d的dag图fhfh13生成dag的语法制导定义fhfh147.2声明语句的翻译声明语句的作用为程序中用到的变量或常量名指定类型类型的作用类型检查:类型检查的任务是验证程序运行时的行为是否遵守语言的类型的规定,也就是是否符合该语言关于类型的相关规则。辅助翻译:编译器从名字的类型可以确定该名字在运行时所需
8、要的存储空间。在计算数组引用的地址、加入显式的类型转换、选择正确版本的算术运算符以及其它一些翻译工作时同样需要用到类型信息。编译的任务在符号表中记录被说明对象的属性
此文档下载收益归作者所有