编译原理(Principles and Techniques of Compilers)

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

教学方式:基础班(22020260)和普通班(22010120)部分授课时间重叠(但教学要求不同)

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

课程助教:李聪和屈道涵(;分管实验),张晨曦和陈紫琦(;分管作业)

使用课本:《编译原理》,Alfred V. Aho等著,赵建华等译(也称“龙书”,就是封面上有条紫龙,还有个屠龙武士),有两个版本,完整版和本科教学版均可,当然后者便宜些;实验使用《编译原理实践与指导教程》,许畅等著,囊中羞涩的也可看随实验发布的讲义

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


课程安排

学期:2020-2021学年第二学期(共16周)

班级:基础班和普通班

时间:周一5-6节(两班),周三3-4节(基础班) / 5-6节(普通班)

地点:逸B-212(周一/两班),仙II-109(周三/基础班)/逸B-212(周三/普通班)

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

交流(教学立方):邀请码 BZB5CRLQ(用于提交实验和发布讲课录屏;请各位同学标注自己的学号和姓名)


动态新闻

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

2021-06-22:请各位同学留意期末考试的时间和地点:06-29 (2pm-4pm) / 仙I-101(基础班),06-28 (2pm-4pm) / 仙I-319(普通班)

2021-06-15:明天(16日)有习题课和复习课,也是最后一次课

2021-06-07:今天(7日)有实验课;实验三测试用例发布,不能用于修改实验三的成绩,但可以用来改进实验三的实现以更好地支持实验四;同时开放前三次实验总成绩的查询,请直接向助教咨询

2021-05-10:实验二测试用例发布,不能用于修改实验二的成绩,但可以用来改进实验二的实现以更好地支持实验三

2021-05-07:下周一(10日)有习题课和实验课

2021-04-28:实验三发布,完成时间四周;注意实验二提交后天(30日)截止

2021-04-12:实验一测试用例更新(普通测试用例D-3更正;超强测试用例输出更正)

2021-04-12:实验一测试用例发布,不能用于修改实验一的成绩,但可以用来改进实验一的实现以更好地支持实验二

2021-04-11:明天(12日)有习题课和实验课

2021-04-01:实验二发布,完成时间四周;注意实验一提交明天(2日)截止

2021-03-03:实验一发布,完成时间四周

2021-02-27:考虑到网络问题,计划第一周事先录制讲课内容,在教学立方上发布,届时同学们可以在线观看,并且可以回放,加深理解

2021-02-22:根据学校要求,第一周采用线上授课,第二周起恢复线下授课

2020-12-18:课程网站设立,撒花!


课程讲义

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

第一章讲义(2021年03月01日上午更新)

第三章讲义(2021年03月01日上午更新)

第四章讲义(2021年03月21日上午更新)

第五章讲义(2021年04月05日上午更新)

第六章讲义(2021年04月11日上午更新)

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

第八章讲义(2021年05月18日上午更新)

第九章讲义(2021年06月05日晚上更新)

复习(2021年06月15日上午更新)


书面作业(课堂收取)

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

第01次作业(2021年03月03日布置,03月10日收取)

第02次作业 (1) (2)(2021年03月10日布置,03月17日收取)

第03次作业(2021年03月17日布置,03月24日收取)

第04次作业(2021年03月24日布置,03月31日收取)

第05次作业 (1) (2)(2021年03月31日布置,04月07日收取)

第06次作业(2021年04月07日布置,04月14日收取)

第07次作业(2021年04月14日布置,04月21日收取)

第08次作业(2021年04月21日布置,04月28日收取)

第09次作业(2021年04月28日布置,05月08日收取)

第10次作业(2021年05月08日布置,05月12日收取)

第11次作业(2021年05月12日布置,05月19日收取)

第12次作业(2021年05月19日布置,05月26日收取)

第13次作业 (1) (2)(2021年05月26日布置,06月02日收取)

第14次作业(2021年06月02日布置,06月09日收取)


上机实验(教学立方收取)

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

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

注意事项:

实验提交要求(2021年03月03日更新)

实验任务分配(以此为准,做错实验的会扣分)(2021年05月02日更新)

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

实验课本勘误(讲义总是及时更新的):1 2(2020-12-18更新)

实验内容:

实验语法(四次实验共用)(2021年03月03日更新)

第一次实验(实验要求及指导攻略) 测试用例(普通) 测试用例(超强)(2021年03月03日布置,04月12日更新,04月02日收取)

第二次实验(实验要求及指导攻略) 测试用例(普通) 测试用例(超强)(2021年04月01日布置,05月10日更新,04月30日收取)

第三次实验(实验要求及指导攻略) 虚拟机小程序使用说明 虚拟机小程序执行文件(解压后用指令“python irsim.pyc”执行) 测试用例(普通) 测试用例(超强)(2021年04月28日布置,06月07日更新,05月28日收取)

第四次实验(实验要求及指导攻略) 额外参考资料(2021年05月26日布置,06月18日收取)


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