分层次独立完成一个不同难度的小型编译器

难度层次一

仿Java虚拟机,编译解释性。完成PL/0或C0编译器的设计、编码、实现和测试(含出错处理能力。

难度层次二

面向特定硬件平台的代码生成。完成C1语言编译器的设计、编码、实现和测试(含出错处理能力)C1增加了数据结构类型,如数组;增加控制结构。

难度层次三

编译优化,竞速排名。在提高层级基础,进行编译器优化;挑战极限,竞速排名。

在线开课

在线开课入口

编译过程各阶段的自动化评测

学生可以从简单到复杂,最终构造出一个相对完整的小编译器。以便学生深刻地理解高级程序语言的运行机理, 理解一个完整地将高级程序设计语言编写的程序翻译为低级语言程序的过程。

实验1:词法分析

根据给定的文法设计并实现词法分析程序。

实验2:语法分析

根据给定的文法设计并实现语法分析程序,能基于词法分析程序所识别出的单词,识别出各类语法成分。

实验3:错误处理

根据给定的文法设计并实现错误处理程序,能诊察出常见的语法和语义错误,进行错误局部化处理,并输出错误信息。

实验4:代码生成

在词法分析和语法分析的基础上,为编译器实现语义分析、代码生成功能。

实验5:代码优化

为编译器实现代码优化功能(MPIS)。

高质量的编译技术教学资源

推荐采用北京航空航天大学计算机学院名师撰写的优秀教材,并配套讲义、习题和授课视频,视频公开课

创新点
将复杂的自动生成技术从编译过程中剥离出来,便于学生理解和掌握编译过程。

编译原理是公认的比较难学亦难教的一门课,因为有太多理论性的东西,同时实践性也很强。经过十多年的教学,我们认为这门课程应该不那么难学, 因为编译的主线已了然在心。可为什么大家觉得难学呢?因为我们开始讲了太多的理论,从文法基础到词法分析部分的自动机,再到各种语法分析方法, 学生被灌输了很多算法,反而忽略了编译的根本任务——翻译,即从一种语言形式到另一种语言形式的等价翻译。这就是为什么学生往往在完成课程设计(一个小型编译系统) 之后,才恍然大悟:我有点明白编译是干什么的了。

编译过程和知识点组织