编译原理(Principles and Techniques of Compilers)

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

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

课程助教:周意可(;分管实验),孙伟杰(;分管作业)

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

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


课程安排

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

班级:普通班(22020260)

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

地点:仙I-319

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


动态新闻

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

2024-05-24:实验五代码框架更新,说明见:https://github.com/BryanHeBY/cmmc_optimizer

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

2024-05-08:实验四和五发布,完成时间五周(实验五代码框架是可选使用的)

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

2024-04-10:实验三发布,完成时间四周

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

2024-03-20:实验二发布,完成时间四周

2024-02-29:实验一发布,完成时间四周(请及时跟进,后续实验可能会重叠时间)

2024-02-29:请各位同学本周内完成实验分组报名(组长负责制),明确任务号

2024-02-23:据教务处通知,教室调至仙I-319,同学们不要走错教室

2023-12-15:课程网站设立,撒花!


课程讲义

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

第一章讲义(2024年02月25日晚上更新)

第三章讲义(2024年02月27日上午更新)

第四章讲义(2024年03月13日晚上更新)

第五章讲义(2024年04月02日上午更新)

第六章讲义(2024年04月13日上午更新)

第七章讲义(2024年05月04日上午更新)

第八章讲义(2024年05月07日上午更新)

第九章讲义(2024年05月29日中午更新)

复习(2024年06月12日中午更新)


书面作业(课堂收取)

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

第01次作业(2024年02月28日布置,03月06日截止)

第02次作业 (1) (2)(2024年03月06日布置,03月13日截止)

第03次作业(2024年03月13日布置,03月20日截止)

第04次作业(2024年03月20日布置,03月27日截止)

第05次作业(2024年03月27日布置,04月03日截止)

第06次作业 (1) (2)(2024年04月03日布置,04月10日截止)

第07次作业(2024年04月10日布置,04月17日截止)

第08次作业(2024年04月17日布置,04月24日截止)

第09次作业 (1) (2)(2024年04月24日布置,04月29日截止)

第10次作业 (1) (2)(2024年05月08日布置,05月15日截止)

第11次作业(2024年05月15日布置,05月22日截止)

第12次作业 (1) (2)(2024年05月22日布置,05月29日截止)

第13次作业(2024年05月29日布置,06月05日截止)

第14次作业(2024年06月03日布置,06月05日截止)


上机实验(OJ平台收取)

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

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

注意事项:

实验提交要求(2024年02月29日更新)

OJ平台说明(2024年03月02日更新)

实验任务分配(普通班同学按任务号确认分配,做错实验的会倒扣分;基础班同学无任务号,需完成所有要求)(2024年05月08日更新)

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

实验内容:

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

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

第二次实验(实验要求在3.3节,指导在3.2节) 测试用例(2024年03月20日布置,04月29日更新,04月19日截止)

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

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

第五次实验(实验要求在6.3节,指导在6.2节) 代码框架说明 代码框架(可选)(2024年05月08日布置,05月25日更新,06月14日截止)


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