中间代码生成5.ppt

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

* * * 翻译方式有两种: 第六章 中间代码生成 源语言 目标语言 源语言 1) 2) 目标语言 中间代码 中间代码的特点: 结构简单,功能明确,易于优化,易于翻译. 第一节 中间代码简介 1) 逆波兰表示法 运算量在前,运算符在后的后缀式表示法. 例如: 表达式 后缀式 a+b ab+ (a+b)*c ab+c* a*(b+c) abc+* (a+b)*(c+d) ab+cd+* 2) 三元式表示法 三元式就是三元组: ( 操作符,操作数1,操作数2) 例如: 语句 D:=A+B*C 可翻译为下述三元式表: (1) (*,B,C) (2) (+,A,(1)) (3) (:=,D,(2)) 三元式没有明确指出结果放在何处. 3) 四元式表示法 四元式就是四元组: ( 操作符,操作数1,操作数2,结果) 例如: 语句 D:=A+B*C 可翻译为下述四元式表: (1) (* ,B ,C ,T1) (2) (+ ,A ,T1,T2) (3) (:= ,T2, , D ) 四元式间通过临时变量传值. 操作符实现的运算也非常简单, 本章主要介绍各种语句到四元式的翻译. 第二节 语法制导翻译的基本思想 1 何谓语法制导翻译 在语法分析的每次归约或推导时,根据产生式的语义进行 翻译的一种方法. 翻译时,除了产生中间代码外,还有许多辅助工作,包括: 改变语法变量的值;查填符号表;诊查与报告源程序错误等. 2 与翻译相关的若干约定 1) 临时变量 在翻译中,可能会引入许多临时变量存放中间结果. 通过调用 newtemp() 返回一个临时变量 Ti . 2) 分析栈 分析栈中的内容为语法单位,每个语法单位包含两个部分: (语法单位名称,语法单位属性),属性可能有多个值. 例如: E 为表达式的语法单位, E.place 代表了该表达式值 存放的地方. 3) 符号表 符号表用于存放变量及属性值,由如干项构成,每个项为: (变量名, 变量信息). 4) 四元式表 四元式表用于存放翻译中产生的四元 式,通过过程 Gen( 操作符,操作数1,操作数2,结果) 把四元式存入四元式表的 NXQ 所指 空间中, NXQ 自动加 1. 四元式表 NXQ 5 一些基本操作 newtemp( ) 产生一临时变量; gen(操作符,操作数1,操作数2,结果) 填入四元式表; fill( i,属性) 填入符号表; entry( i ) 查符号表,返回 i 在符号表中的位置; backpatch( m,n) 把 n 填入 四元式表第 m 个四元式中; 第三节 简单变量说明语句的翻译 程序设计中,首先应该对程序中使用的变量进行说明.其目的 是规定变量所占用空间的大小. 编译时, 对变量说明语句的翻译工 作,本质上就是把变量名及属性登记在符号表中,以便后续工作中 使用. pascal 语言的简单变量说明语句为: x,y,z:real; 语法可表示为: D → NAMELIST:T NAMELIST→ NAMELIST,i | i T → integer|real|boolean|char 该文法代表了所有 非结构型变量的说明语 句. 当然,也可以用如下文法表示: D→i:T | i,D T → integer|real|boolean|char 我们已经知道用该文法如何分析一个说明语句,下面要解决 的是,怎样在分

文档评论(0)

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

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

1亿VIP精品文档

相关文档