编译原理(Principles and Techniques of Compilers)

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

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

课程助教:屈道涵(;分管实验),张灵毓(;分管作业)

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

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


课程安排

学期:2021-2022学年第二学期(共17周)

班级:普通班(22010120)

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

地点:逸B-410

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

交流(教学立方):邀请码 J42QDRGN(用于查看直播录屏;请各位同学标注自己的学号和姓名)


动态新闻

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

2022-06-12:请各位同学留意期末考试的时间和地点:06-17 (10:30am-12:30pm) / 仙I-108

2022-05-26:实验三测试用例(普通)做了调整,修改了缺少return语句的用例,对同学们分数没有影响

2022-05-25:实验三测试用例(超强)做了调整,去掉了有缺陷的部分;不过超强部分占比很小,同学们分数几乎没受到影响

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

2022-05-20:下周三(25日)有实验课

2022-05-13:实验四发布,完成时间四周;注意实验三提交今天截止

2022-04-27:实验二测试用例B-1调整(局部变量重复定义问题),不影响同学们得分

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

2022-04-22:下周三(27日)有习题课和实验课

2022-04-15:实验三发布,完成时间四周;注意实验二提交今天截止

2022-04-08:实验一测试用例(超强)做了调整,去掉了有缺陷和较难的部分,同学们分数有少量提升

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

2022-03-25:下周三(30日)有习题课和实验课

2022-03-18:实验二发布,完成时间四周;注意实验一提交今天截止

2022-02-18:实验一发布,完成时间四周

2022-02-17:由于有同学希望查看直播录屏,故重新开放教学立法平台,用于查看直播录屏

2022-02-14:实验提交和批改调整为由OJ平台进行(之后公布)

2022-02-11:根据学校要求,本学期课程前两周采用在线教学方式(在线会议链接届时会在QQ群发布),从第三周起恢复常规线下教学

2021-12-14:课程网站设立,撒花!


课程讲义

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

第一章讲义(2022年02月15日上午更新)

第三章讲义(2022年02月22日下午更新)

第四章讲义(2022年03月10日上午更新)

第五章讲义(2022年03月24日上午更新)

第六章讲义(2022年03月29日上午更新)

第七章讲义(2022年04月28日上午更新)

第八章讲义(2022年05月03日上午更新)

第九章讲义(2022年05月12日上午更新)

复习讲义(2022年06月12日晚上更新)


书面作业(课堂收取)

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

第01次作业(2022年02月18日布置,02月25日收取)

第02次作业 (1) (2)(2022年02月25日布置,03月04日收取)

第03次作业(2022年03月04日布置,03月11日收取)

第04次作业(2022年03月11日布置,03月18日收取)

第05次作业 (1) (2)(2022年03月18日布置,03月25日收取)

第06次作业(2022年03月25日布置,04月01日收取)

第07次作业(2022年04月01日布置,04月08日收取)

第08次作业(2022年04月08日布置,04月15日收取)

第09次作业(2022年04月15日布置,04月22日收取)

第10次作业(2022年04月22日布置,04月29日收取)

第11次作业(2022年04月29日布置,05月06日收取)

第12次作业 (1) (2)(2022年05月06日布置,05月13日收取)

第13次作业(2022年05月13日布置,05月20日收取)

第14次作业(2022年05月20日布置,05月27日收取)

第15次作业(2022年05月27日布置,06月03日收取)

第16次作业(2022年06月01日布置,06月03日收取)


上机实验(OJ平台收取)

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

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

注意事项:

实验提交要求(2022年02月14日更新)

实验任务分配(以此为准,做错实验的会扣分;实验一、二和三特别注意查看)(2022年04月15日更新)

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

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

实验内容:

实验语法(四次实验共用)(2022年02月18日更新)

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

第二次实验(实验要求及指导攻略) 测试用例(普通) 测试用例(超强)(2022年03月18日布置,04月27日更新,04月15日收取)

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

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


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