文档详情

7编译原理第七章课件.ppt

发布:2017-08-14约4.57千字共64页下载文档
文本预览下载声明
*;第七章 语义分析和中间代码的产生;翻译为中间语言的好处;主要内容;7.1中间语言 ;7.1.1 后缀式;后缀式的优点;后缀式特点: 无括号 运算对象的顺序与中缀式一致 根据操作符(运算符)的优先级和结合性进行相关的处理 例: 5+4*6 5 4 6 *+;;7.1.2 图表示法;5+4*6的DAG图;后缀式与抽象语法树的关系;抽象语法树的存储表示;7.1.3 三地址代码;2.三地址语句的种类 作为中间语言的三地址语句非常类似于汇编代码,它可以有符号标号和各种控制流语句。常用的三地址语句有以下几种: (1) ?x=y op z形式的赋值语句,其中op为二目的算术运算符或逻辑运算符。 (2) ?x=op y形式的赋值语句,其中op为一目运算符,如一目减uminus、逻辑否定not、移位运算符以及将定点数转换成浮点数的类型转换符。;(3) ?x=y形式的赋值语句,将y的值赋给x。 (4) 无条件转移语句goto L,即下一个将被执行的语句是标号为L的语句。 (5) 条件转移语句if x rop y goto L,其中rop为关系运算符,如、=、==、!=、、=等。若x和y满足关系rop就转去执行标号为L的语句,否则继续按顺序执行本语句的下一条语句。 ;(6) 过程调用语句par X和call P,n。源程序中的过程调用语句P(X1、X2、…,Xn)可用下列三地址代码表示: par X1 par X2 par Xn call P,n 其中,整数n为实参个数。 过程返回语句为return y,其中y为过程返回值。; (7) 变址赋值语句x=y[i],其中x、y、i均代表数据对象,表示把从地址y开始的第i个地址单元中的值赋给x。x[i]=y则表示把y的值赋给从地址x开始的第i个地址单元。 (8) 地址和指针赋值语句 ① x=y表示将y的地址赋给x,y可以是一个名字或一个临时变量,而x是指针名或临时变量; ② x=*y表示将y所指示的地址单元中的内容(值)赋给x,y是一个指针或临时变量; ③ *x=y表示指将x所指对象的值置为y的值。;三地址码示例;三地址码示例(2); 3.三地址代码的具体实现 三地址代码是中间代码的一种抽象形式。在编译程序中,三地址代码语言的具体实现通常有三种表示方法:四元式、三元式和间接三元式。 1) 四元式 四元式是具有四个域的记录结构,这四个域为 (op,arg1,arg2,result) 其中,op为运算符;arg1、arg2及result为指针,它们可指向有关名字在符号表中的登记项或一临时变量(也可空缺)。;常用的三地址语句与相应的四元式对应如下: x=y op z 对应(op, y, z, x) x=?y 对应(uminus, y, _, x) x=y 对应(=, y, _, x) par x1 对应(par, x1, _, _) call P 对应(call, _, _, P) goto L 对应(j, _, _, L) if x rop y goto L 对应(jrop, x, y, L);例如,赋值语句a=b*(c+d)相应的四元式代码为: ① (+,c,d,t1) ② (*,b,t1,t2) ③ (=,t2,_,a) 我们约定:凡只需一个运算量的算符一律使用arg1。 此外,注意这样一个规则:如果op是一个算术或逻辑运算符,则result总是一个新引进的临时变量,它用来存放运算结果。 由上例也可看出,四元式出现的顺序与表达式计值的顺序是一致的,四元式之间的联系是通过临时变量实现的。四元式由于其表示更接近程序设计的习惯而成为一种普遍采用的中间代码形式。;三地址代码的具体表示;解答:逆波兰式为:ab≤a0>∧b0<∨ 写出等价的四元式表示 1. (≤
显示全部
相似文档