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

编译原理-中间语言.pptVIP

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理-中间语言

第七章 语义分析和中间代码生成 7.1 中间语言 7.2 说明语句 7.3 赋值语句的翻译 7.4 布尔表达式的翻译 7.5 控制语句的翻译 7.6 过程调用的处理 7.7 类型检查 7.1 中间语言 7.1.1 后缀式 7.1.2 图表示法 7.1.3 三地址代码 为什么引入中间语言? 许多编译程序采用了独立于机器的、复杂性介于源语言和机器语言之间的中间语言。 (1) 便于进行与机器无关的代码优化工作 (2) 使编译程序改变目标机更容易 (3) 使编译程序的结构在逻辑上更为简单明确, 编译前端和后端的接口更清晰 7.1.1 后缀式 后缀式表示法又称逆波兰表示法。 把运算量(操作数)写在前面,把算符写在后面 a + b * -c ,其后缀式为 a b c @ * + a := b* -c + b * -c,其后缀式为 a b c @ * b c @ * + assign if ab then c := c + 1 ,其后缀式为 a b c c 1 + assign IF-THEN 后缀表示法的优点 方便具有堆栈体系的计算机的目标代码生成 适用于解释执行的程序设计语言的中间表示 -2+4*5 的后缀式为 2@45*+ 7.1.2 图表示法 DAG 无循环有向图 (Directed Acyclic Graph) 抽象语法树 DAG 在一个DAG中, 代表公共子表达式的结点具有多个父结点 7.1.3 三地址代码 三地址代码 是由下面一般形式的语句构成的序列: x := y op z x, y, z 为名字、常数或编译时产生的临时变量 op 代表运算符号 例: 表达式 x + y * z 可以被翻译为如下语句序列: T1 := y * z T2 := x+T1 Tl,T2为编译时产生的临时变量 教材中所使用的三地址语句的种类 (1) 形如 x := y op z 的赋值语句, op 为二元算符算符 (2) 形如 x := op y 的赋值语句,op 为一元算符 (3) 形如 x := y 的赋值语句 (4) 形如 goto L 的无条件转移语句 (5) 形如 if x relop y goto L 或 if a goto L 的条件转移语句 (6) 过程调用的语句 param x 和 call p, n, 以及返回语句 return y (7) 形如 x:= y[i] 、 x[i]:=y 的索引赋值 (8) 形如 x:=y、 x:=*y 、 *x:=y 的地址和指针赋值 产生三地址代码的属性文法 不作为考试要求 newtemp : 返回一个不同的临时变量的名字 E.place : 存放E值的名字, 存放E值的变量在符号表中的登录项。(指针) E.code : 对E求值的三地址语句序列 gen : 生成三地址语句 三地址语句可看成中间代码的一种抽象形式 在编译程序中, 三地址代码语句的具体实现可以用记录表示, 通常有三种表示形式: 四元式: ( op, arg1, arg2, result ) 三元式: ( op, arg1, arg2 ) 间接三元式 四元式写成简单赋值形式 a := b*c + b*d 把上述四元式序列写成:   (1)t1∶=b*c   (2)t2∶=b*d   (3)t3∶=t1+t2   (4)a ∶=t3 为了避免把临时变量填入到符号表,可以通过计算这个临时变量值的语句 的位置 来引用这个临时变量 arg1和 arg2,或者指向符号表中的指针,或者指向三元式表的指针(临时变量)。 运算的先后顺序由一张间接码表列出 例: a := b * c + d / f 的间接三元式 当优化过程中需要调整运算顺序时, 只需安排间接码表,无需改动三元式表。 间接三元式的优点 便于优化 相同的三元式无需重复填入三元式表中, 节省三元式空间 * * ab+ abc*+ ab+c* abc*bd*+:= a+b a+b*c (a+b)*c a:=b*c+b*d 逆波兰表示 程序设计语言中的表示 表7.1 把表达式翻译成后缀式的语义规则描述 E.code := E1.code || E2.code || op E.code := E1.code E.code := id E ? E1 op E2 E ? (E1) E ?id 语义规则 产生式 后缀式的连接 E的后缀

文档评论(0)

panguoxiang + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档