实验内容

在pa2中,我们已经完成了对输入程序的语义分析工作,此时的输入程序必定是有明确的语义而且不具有不符合语言规范的语义错误的,在接下来的pa3中,我们将对该输入程序进行翻译,把使用带属性修饰的ast来表示的输入程序翻译成适合后期处理的另一种中间表示(ir, intermediate representation)方式。中间表示和中间代码这两个词一般可以混用。

为了便于翻译工作的进行,在实际的编译过程中往往需要反复地从一种中间表示变为另一种中间表示,直到变换成最终的目标代码为止。为简单起见,我们的编译器中只使用了一种中间表示:三地址码(tac, three address code),它是一种比较接近mips汇编的中间表示。pa3中我们需要把ast表示的程序翻译为跟它在语义上等价的tac中间表示,并在合适的地方加入诸如检查数组访问越界等运行时错误的内容。得到的tac可以通过模拟器来运行,这样我们的decaf程序就第一次跑起来了。

通过这个阶段,希望大家能在语法制导处理的基础上进一步掌握语法制导的中间代码翻译方法,并且对过程调用约定,面向对象机制的实现方法,存储布局等内容有所了解。

实验框架中已经实现了decaf语言的基本语法的中间代码生成,大家的任务是实现新语法的ast到tac的翻译。新语法具体细节可以参考专门的文档。如果有什么特别需要注意的地方,之后会在这里补充。

Last updated