编译原理(Principles and Techniques of Compilers)

教学目标:编译原理的教学目标是使得学生掌握如下知识:和编译器设计相关的形式语言理论基础;编译程序的体系结构,编译器的各个组成部分的原理和技术,包括词法分析、语法分析、语义分析和目标代码生成、代码优化,以及设计环境与程序错误的检查和校正;初步了解一些编译器生成工具的基础理论和应用。另外,该课程将通过上机实验使得学生初步了解一个设计编译器的过程。

授课老师:许畅(计算机科学技术楼807室;

课程助教:陈泰霖(;分管实验),阎子扬(;分管作业)

使用课本:理论教学使用《编译原理》,Alfred V. Aho等著,赵建华等译(也称“龙书”,就是封面上有条紫龙,还有个屠龙武士);理论/实验教学使用《编译方法、技术与实践》(新版)或《编译原理实践与指导教程》(旧版),许畅等著,也可看随实验发布的讲义

说点什么:通常这是门困难的课程,这当然是指自己闷头看书的情况,如果在课堂上,你大概会过得比较轻松愉快 :-)


课程安排

学期:2025-2026学年第二学期(共16周)

班级:大班/强基班(22020260;拔尖班请注意选择谭添老师的课)

时间:周一3-4节、周三3-4节

地点:仙I-206

交流(QQ群):群号947723414(老师和助教们都在,用于即时/离线交流;请各位同学使用“学号-姓名”格式作为名片/昵称)


动态新闻

以下是重要通知、以及书面作业或上机实验的重要变化

2026-05-25:实验三测试用例发布,不能用于修改实验三的得分,但可以用来改进实验三的实现以更好地支持后续实验

2026-05-16:实验四和五同时发布,完成时间5周(注意实验任务分配文件的更新;实验五代码框架的使用不是必须的)

2026-05-11:实验二测试用例发布,不能用于修改实验二的得分,但可以用来改进实验二的实现以更好地支持后续实验

2026-04-16:实验三发布,完成时间4周(注意实验任务分配文件更新)

2026-04-13:实验一测试用例发布,不能用于修改实验一的得分,但可以用来改进实验一的实现以更好地支持后续实验

2026-03-27:实验二发布,完成时间4周(注意实验任务分配文件更新)

2026-03-06:实验一发布,完成时间4周(注意实验任务分配文件)

2026-02-28:因选课人数超过教室容量,教室已调整至仙I-206

2026-01-05:课程QQ群已设立,欢迎各位同学加入,方便交流

2026-01-05:课程网站设立,撒花!


课程讲义

一般上课前给出,但可能随时会更新,注意看更新时间,以确保自己下载的是最新版(抱佛脚专用)

第一章讲义(2026年03月01日下午更新)

第三章讲义(2026年03月08日上午更新)

第四章讲义(2026年03月17日上午更新)

第五章讲义(2026年04月07日上午更新)

第六章讲义(2026年04月28日上午更新)

第七章讲义(2026年05月10日下午更新)

第八章讲义(2026年05月16日下午更新)

第九章讲义(2026年06月06日下午更新)


书面作业(课堂收取)

上课布置后,在这里也会再次公布,以确保不会错过作业(不适用于既不上课也不看课程网站的学霸们)

第01次作业(2026年03月04日布置,03月11日截止)

第02次作业 (1) (2)(2026年03月11日布置,03月18日截止)

第03次作业(2026年03月18日布置,03月25日截止)

第04次作业(2026年03月25日布置,04月01日截止)

第05次作业(2026年04月01日布置,04月08日截止)

第06次作业(2026年04月08日布置,04月15日截止)

第07次作业(2026年04月15日布置,04月22日截止)

第08次作业(2026年04月22日布置,04月29日截止)

第09次作业 (1) (2)(2026年04月29日布置,05月06日截止)

第10次作业 (1) (2)(2026年05月13日布置,05月20日截止)

第11次作业(2026年05月20日布置,05月27日截止)

第12次作业(2026年05月27日布置,06月03日截止)

第13次作业(2026年06月03日布置,06月10日截止)


上机实验(OJ平台收取)

编译原理的实验内容是为一个小型的类C语言(C--)实现一个编译器。如果你顺利完成了本实验任务,那么不仅你的编程能力将会得到大幅提高,而且你最终会得到一个比较完整的、能将C--源代码转换成MIPS汇编代码的编译器,所得到的汇编代码可以在SPIM Simulator上运行。实习总共分为五个阶段:词法和语法分析、语义分析、中间代码生成、中间代码优化、以及目标代码生成。每个阶段的输出是下一个阶段的输入,后一个阶段总是在前一个阶段的基础上完成。

(注意实验可能会打补丁,所以请根据提示定期检查版本)

注意事项:

实验提交要求(2026年01月05日更新)

OJ平台说明(2026年01月05日更新)

实验任务分配(大班/强基班同学按任务号确认分配,做错实验会倒扣分;拔尖班同学无任务号,需完成所有要求)(2026年05月16日更新)

代码结构及Makefile(以此为准,不遵要求无法得分)(2026年01月05日更新)

新版教材勘误(2026年01月05日更新)

实验内容:

实验语法(五次实验共用,在附录A)(2026年03月06日更新)

第一次实验(实验要求在2.3节,指导在2.2节) 测试用例(2026年03月06日布置,04月13日更新,04月03日截止)

第二次实验(实验要求在3.3节,指导在3.2节) 测试用例(2026年03月27日布置,05月14日更新,04月24日截止)

第三次实验(实验要求在4.3节,指导在4.2节) 虚拟机小程序使用说明(在附录B) 虚拟机小程序执行文件 测试用例(2026年04月16日布置,05月25日更新,05月15日截止)

第四次实验(实验要求在5.3节,指导在5.2节) 额外参考资料(2026年05月16日布置,06月19日截止)

第五次实验(实验要求在6.3节,指导在6.2节) 代码框架(非必须)(2026年05月16日布置,06月19日截止)


请按Ctrl+F5强制刷新页面以获取最新版;最后更新日期:2026-06-06