编译原理(Principles and Techniques of Compilers )

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

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

课程助教:王珏(;分管实验)、李达(;分管作业)

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

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


课程安排

学期:2018-2019学年第二学期(共16周)

班级:自由选课

时间:周一3-4节(对于三年级同学来说,终于能起床赶上了),周四5-6节(黄金时间!要注意中午别睡过了)

地点:仙II-406

QQ群:109895140(两位助教都在)


动态新闻

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

2019-06-11:下周一(17日)期末考试,4:30pm-6:30pm,千万别错过!另外别忘了本周五(14日)晚实验四截止

2019-06-09:实验三部分测试用例由于与助教回答问题时不一致,故作相应调整,受影响学生的实验成绩已经更新

2019-06-06:实验三测试用例发布,可用于改进实验三以更好地支持实验四,但不能用于修改实验三的成绩;现在大家可以向两位助教了解自己的所有作业和前三次实验的总分了;注意下周一(10日)我们复习并介绍考试相关信息

2019-06-03:实验三抄袭情况已处理;本周四(6日)有实验课和习题课

2019-05-15:实验四提前发布,完成时间四周

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

2019-04-28:明天(29日)有习题课;下周四(9日)有实验课;实验二抄袭情况已处理

2019-04-22:注意实验二截止时间为本周五(26日)晚24点;实验三提前发布,完成时间四周(注意将会与最后的实验四有一周重叠时间,故建议及早准备)

2019-04-15:实验二实验要求调整:第2页“注意两点”改为“注意三点”,在段尾增加了一点说明:“三是对于结构体类型等价的判定,每个匿名的结构体类型我们认为均具有一个独有的隐藏名字,以此进行名等价判定。”

2019-04-12:实验一超强测试用例调整:test_2第91行语句对应的语法树有错,已修正;test_19、test_20、test_21、test_23和test_24涉及非必做部分,已去除;受影响的实验成绩已更正

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

2019-03-31:明天(4月1日)有习题课;周四(4月4日)有实验课

2019-03-28:注意实验一截止时间为本周五(29日)晚24点;实验二提前发布,完成时间四周

2019-02-28:实验一提前发布,完成时间四周

2019-02-25:下次课(28日)之前,跟实验助教报名分组(单人成组也要报名),下次课各分组确定实验任务,组长务必到场

2019-02-21:下周一(25日)首堂课,不要睡过啦!有重要防挂科信息宣布

2018-12-26:课程网站设立,撒花!


课程讲义(系里教学网站也同步更新)

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

第一章讲义(2019年02月24日晚上更新)

第三章讲义(2019年03月02日下午更新)

第四章讲义(2019年03月19日晚上更新)

第五章讲义(2019年04月03日上午更新)

第六章讲义(2019年04月17日上午更新)

第七章讲义(2019年04月26日上午更新)

第八章讲义(2019年05月12日上午更新)

第九章讲义(2019年05月22日上午更新)

复习(2019年06月09日下午更新)


书面作业(系里教学网站也同步更新;课堂收取)

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

第01次作业(2019年02月28日布置,03月07日收取)

第02次作业 (1) (2)(2019年03月07日布置,03月14日收取)

第03次作业(2019年03月14日布置,03月21日收取)

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

第05次作业 (1) (2)(2019年03月28日布置,04月04日收取)

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

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

第08次作业(2019年04月18日布置,04月25日收取)

第09次作业 (1) (2)(2019年04月25日布置,04月29日收取)

第10次作业(2019年04月29日布置,05月09日收取)

第11次作业(2019年05月09日布置,05月16日收取)

第12次作业(2019年05月16日布置,05月23日收取)

第13次作业(2019年05月23日布置,05月30日收取)


上机实验(系里教学网站也同步更新;网站收取)

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

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

注意事项:

实验提交要求(2019年02月28日更新)

实验任务分配(以此为准,不遵要求的将倒扣实验分数)(2019年04月22日更新)

代码结构及Makefile(以此为准,不遵要求的将无法获得实验分数)(2019年02月28日更新)

实验课本勘误(讲义总是新的):1 2(2019年04月15日更新)

实验内容:

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

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

第二次实验(实验要求及指导攻略) 测试用例(普通/记分) 测试用例(超强/奖励)(2019年03月28日布置,05月09日更新,04月26日收取)

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

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


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