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

  1. 1、本文档共64页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7编译原理第七章课件

*;第七章 语义分析和中间代码的产生;翻译为中间语言的好处;主要内容;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. (≤

文档评论(0)

dmdt5055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档