sikikok6 / BUAA-Compiler-Pascal-to-x86

北航计算机学院本科《编译原理》实验课的大作业。源语言为类PASCAL语言,目标语言为x86汇编,编译器用C++语言实现。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

说明

北航计算机学院本科《编译原理》实验课的大作业。要求是用 C 语言或 C++ 实现一个编译器,能编译给定语法的语言(简化版的 Pascal 或 C,这两个一年一换,到我这年正好是类 Pascal 语言)。

难度分为三个等级:最低难度:生成的目标代码是某种中间语言,同时要实现一个关于这种目标语言的解释器,使其能运行;中等难度:生成的目标语言是 MIPS 或 x86 汇编,能直接在汇编器上跑,不需要编译优化;最高难度:生成的目标语言是 MIPS 或 x86 汇编,能直接在汇编器上跑,需要做至少一种编译优化,越多越好。

作业是迭代式的,一次添加一个模块。所以在实现时要考虑后续的扩展。同时,作业的安排也很合理,文档写了很多,很锻炼工程素质。

老师让提交的代码是以 VS 2013 工程的形式打包提交的,这里我把工程文件全部去掉,只上传源代码以及老师让提交的文档等,方便大家学习。

这个作业是在大三时做的,我直接选了最高难度来做。

抱着学习的心态,我选择了用 C++ 来作为我的编程语言,因为之前只是旁听过 C++ 的课,没有真正用 C++ 写过程序,想借此机会学习 C++。选择了目标语言为 x86 汇编,因为之前没接触过 x86 汇编,做计算机组成原理实验时,只学了 MIPS 汇编。

一点遗憾,目标代码生成 Debug 时间太长,导致没有时间写编译优化了,最终只实现了临时寄存器池。

我的很多未实现的思考,以及容易踩到坑的地方,写在了申优文档 "08_最终结果\文档\编译课设申优文档.docx" 里,供后人学习。

欢迎大家批评与交流。

About

北航计算机学院本科《编译原理》实验课的大作业。源语言为类PASCAL语言,目标语言为x86汇编,编译器用C++语言实现。

License:GNU General Public License v3.0


Languages

Language:C++ 94.7%Language:Assembly 5.3%