编译原理(Principles and Techniques of Compilers)

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

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

课程助教:孙伟杰(;分管实验),陈泰霖(;分管作业)

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

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


课程安排

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

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

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

地点:逸B-105

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


动态新闻

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

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

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

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

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

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

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

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

2025-02-19:因选课人数较多,学校调整了上课教室,改为逸B-105,请同学们注意

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

2024-12-23:课程网站设立,撒花!


课程讲义

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

第一章讲义(2025年05月07日下午更新)

第三章讲义(2025年05月07日下午更新)

第四章讲义(2025年05月07日下午更新)

第五章讲义(2025年05月07日下午更新)

第六章讲义(2025年05月07日下午更新)

第七章讲义(2025年05月07日下午更新)

第八章讲义(2025年05月10日上午更新)

第九章讲义(2025年05月13日上午更新)


书面作业(课堂收取)

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

第01次作业(2025年02月19日布置,02月26日截止)

第02次作业 (1) (2)(2025年02月26日布置,03月05日截止)

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

第04次作业(2025年03月12日布置,03月19日截止)

第05次作业(2025年03月19日布置,03月26日截止)

第06次作业 (1) (2)(2025年03月26日布置,04月02日截止)

第07次作业(2025年04月02日布置,04月09日截止)

第08次作业(2025年04月09日布置,04月16日截止)

第09次作业(2025年04月16日布置,04月23日截止)

第10次作业(2025年04月23日布置,04月30日截止)

第11次作业(2025年04月30日布置,05月07日截止)

第12次作业(2025年05月07日布置,05月14日截止)

第13次作业(2025年05月14日布置,05月21日截止)


上机实验(OJ平台收取)

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

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

注意事项:

实验提交要求(2025年02月20日更新)

OJ平台说明(2025年02月20日更新)

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

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

实验内容:

实验语法(五次实验共用,在附录A)(2025年02月20日更新)

第一次实验(实验要求在2.3节,指导在2.2节) 测试用例(2025年02月20日布置,03月31日更新,03月21日截止)

第二次实验(实验要求在3.3节,指导在3.2节) 测试用例(2025年03月12日布置,04月21日更新,04月11日截止)

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

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

第五次实验(实验要求在6.3节,指导在6.2节) 代码框架(可选) 代码框架说明(2025年04月29日布置,06月06日截止)


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