网站大量收购独家精品文档,联系QQ:2885784924

编译原理_07中间代码及其他选编.ppt

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

第8章 语法制导翻译和中间代码生成;主要内容;课题:中间代码及其他 目的要求: 1.掌握中间代码的表示方式; 2.了解 教学重点: 中间代码的表示方式。 教学难点 : 教学课时:2 教学方法:多媒体教学 教学内容和步骤 :(如下);概 述;8.1 属性文法 ; 编译程序的静态语义审查工作就是验证关于所编译的程序的断言是否全部为真。 如文法G[S]: E→F1+F2|F1 or F2 F→num|true |false 与每个非终结符F相联的属性有type,type为int或者bool。关于类型检验的属性文法可以表示为:? E→Fl+F2 {F1.type := int AND F2.type := int} E→F1 or F2 {F1.type := bool AND F2.type := bool} F→num {F.type := int} F→true {F.ype := bool} F→false {F.ype := bool} 由上可知,与非终结符E的产生式相联的断言指明:两个F的属性必须相同。; 属性可以分为综合属性和继承属性两类。综合属性一般用于自下而上传递信息,而继承属性常常用于自上而下传递信息。下述为简单算术表达式求值的属性文法: 规则 语义规则 1. S→E print(E.val) 2. E→E1+T E.val := E1.val+T.val 3. E→T E.va1 := T.valv 4. T→T1 ? F T.val := T1.val ? F.val 5. T→T1 T.val := T1.val 6. F→(E) F.val := E.val 7. F→digit F.val := digit.lexval? 每一个非终结符都有一个表示整数值的属性val。规则左部符号E、T、F的属性值取决于各自规则的右部,称为综合属性;对于文法符号S,其属性是虚的或空的。 ;8.3 中间语言 ;8.3.1 逆波兰式 ; 用逆波兰式表示表达式,其最大的优点是易于计算机进行计算处理。 例.算术表达式-x+y?z 的逆波兰式为x@yz?+,在栈中的计值过程如图所示。 ;8.3.2三元式和树形表示 ;二.树形表示 树形表示实际上是三元式的另一种表示形式。表达式的树形表示非常容易实现:简单直观。 例如,表达式-a ? b+c ? d的树形表示:;三.间接三元式 间接三元式是对三元式的一种补充。为了在进行代码优化时尽量不改变三元式表,于是另设一张间接码表来表示有关三元式在三元式表的计值顺序。用这种方法获得的中间代码称为间接三元式。如表达式 a := x+y ? z b := t-y ? z 的间接三元式表示 :;8.3.3 四元式和三地址码 ;二.三地址码 三地址代码也可以看成是四元式的另一种表示方式,它比四元式更直观、更易于理解。 三地址码的一般格式为 t:= arg1 op arg2 其形式就是一个赋值语句,只是与赋值语句不同的是:在三地址码中赋值符号的右边最多只能有一个运算符。 表达式a := b+c ? d的三地址码序列: (1)t1 := c ? d (2)t2 := b+t1 (3)a := t2 三地址码简单直观,这种表示形式对中间代码的优化和目标代码的生成非常有利。;符号表 运行时存储空间的组织 代码优化 目标代码生成;一.符号表;(1)名子 (2)类型 (3)存储类别 (4)作用域及可视性 (5)存储分配信息 (6)其它属性:数组内情向量、记录结构型的成员信息、函数及过程的形参 ;大致可有如下几类: ?插入: 往符号表中插入一个新的名字; ?查找: ?查询: 对给定名字,在符号表中查询其有关信息; ?更新:对给定名字,在符号表填写或更新它的某些信息; ?删除:在符号表中删除一个或多个无用项。;运行时存储空间划分为:生成目标代码,数据对象和跟踪过程活动的控制栈。 一个称为堆(heap)的运行时存储空间单独区域用来存放动态数据。 运行时存储空间划分

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档