文案说明readmedecafpa3自述.pdfVIP

  1. 1、本文档共15页,可阅读全部内容。
  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文档。上传文档
查看更多

DecafPA3说明

任务描述

在PA2中,我们已经完成了对输入程序的语义分析工作,此时的输入程序必定是有明

确的语义而且不具有不符合语言规范的语义错误的,在接下来的PA3中,对该输入

程序进行翻译,把使用带属性修饰的抽象语法树(decoratedAST)来表示的输入程序翻

译成适合后期处理的另一种中间表示方式。

一般来说,把程序翻译为AST以外的中间表示方式是各种编译器前端的最后一步工作,

这步工作以后编译过程便进入了中端处理或者直接进入后端处理部分。为了便于翻译工作的

进行,在实际的编译过程中往往需要反复地从一种中间表示变为另一种中间表示,直到变换

成最终的汇编代码或者机器代码为止,其中后一种中间表示总是更加适合后面所需要进行的

分析和处理。有的时候为了更好地分析程序的需要中间表示之间的变换次数是非常多的,例

如GCC4的编译过程除AST以外还有GENERIC、GIMPLE、RTL几种中间表示;而

ORC/Open64的编译过程除AST以外还有多达九种的中间表示。

在Decaf编译器中,为简单起见,我们在AST以外只涉及一种中间表示,这种中间表

示叫做三地址码(ThreeAddressCode,TAC),是一种比较接近汇编语言的表示方式。

PA3中我们需要把AST表示的程序翻译为跟它在语义上等价的TAC中间表示,并在合适的

地方加入诸如检查数组越界、数组大小等运行时错误的内容。在TAC表示的基础

上,经过临时变量的活性分析(PA4内容)、生成汇编代码(在PA4中直接提供)以后,整

个编译过程便告完成。

通过这个阶段,希望大家能在语法制导处理的基础上进一步掌握语法制导的中间代码翻

译方法,并且对过程调用协定、面向对象机制的实现方法、布局等内容有所了解。

本阶段涉及的类和工具说明

文件/类含义说明

translate/Translater翻译工作的辅助类根据需要修改

translate/TransPass1第一趟扫描根据需要修改

translate/TransPass2第二趟扫描根据需要修改

tac/*TAC语句不需要修改

你要用PA1-A中修改过的

frontend/*编译器最前端文件覆盖下相应的文

你要用PA2中修改过的文

typecheck/*语义分

件覆盖下相应的文件

scope/*作用域定义不需要修改

symbol/*符号定义不需要修改

type/*类型定义不需要修改

你要将前两个阶段中修改

tree/*抽象语法树的各种结点

过的部分过来

根据需要增加运行时错误

er

文档评论(0)

159****9610 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档