编译原理(Principles and Techniques of Compilers )

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

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

课程助教:王慧妍(;分管实验)、郭冰莹(;分管作业)

课程代表:张瑞琦(有教学上的问题可通过课代表反映;QQ群571791640用于通知紧急情况)

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

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


课程安排

学期:2016-2017学年第二学期(共18周)

班级:自由选课

时间:周三5-6节,周五5-6节(黄金时间!既不用早起,又不会饿肚子,但要注意中午别睡过了)

地点:仙II-306


动态新闻

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

2017-06-22:提醒明天(23日)实验四提交截止,努力完成最后一次实验!

2017-06-20:上次习题课上提到的9.1.1题目,循环B2,B3,B5应去除,所有同学都已相应加分(无论是否做对)

2017-06-14:编译课已结束,未能来取作业本的同学请联系作业助教

2017-06-09:下周三(14日)上习题课和复习课

2017-06-08:实验三测试用例发布,可用于改进实验三以更好地支持实验四,但不能用于修改实验三的成绩

2017-06-05:本周三(07日)有实验课

2017-05-31:实验三抄袭名单(组长姓首字母+学号末数字):已处理

2017-05-25:实验四发布,完成时间四周;注意明晚(26日)实验三提交截止

2017-05-19:这周没有作业,大家happy,努力完成实验三!

2017-05-14:下周三(17日)由香港科技大学计算机系的张成志教授做一次程序分析方面的报告

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

2017-05-09:本周三(10日)有实验课

2017-05-02:实验二抄袭名单(组长姓首字母+学号末数字):已处理

2017-04-27:实验三发布,完成时间四周;注意明晚(28日)实验二提交截止

2017-04-26:本周五(28日)有习题课

2017-04-12:实验一测试用例修改:根据上课反馈,第一个测试用例中double改为float,不影响评分

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

2017-04-10:本周三(12日)有实验课

2017-04-07:实验一抄袭名单(组长姓首字母+学号末数字):已处理

2017-03-30:实验二发布,完成时间四周;注意明晚(31日)实验一提交截止

2017-03-25:下周三(29日)有习题课

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

2017-03-01:请各位实验组长务必前来上课抽选任务(今日)

2017-02-23:请各位选课同学email实验助教,确定分组情况(组长、组员、姓名、学号),本周日(26日)前完成

2017-02-21:明天首次课,助教亮相!

2016-12-02:课程网站设立,撒花!


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

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

第一章讲义(2017年02月21日上午更新)

第三章讲义(2017年03月02日上午更新)

第四章讲义(2017年03月28日上午更新)

第五章讲义(2017年04月06日上午更新)

第六章讲义(2017年04月18日上午更新)

第七章讲义(2017年05月02日上午更新)

第八章讲义(2017年05月23日下午更新)

第九章讲义(2017年06月13日下午更新)

复习(2017年06月13日下午更新)


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

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

第01次作业(2017年02月24日布置,03月03日收取)

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

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

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

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

第06次作业(2017年03月31日布置,04月07日收取)

第07次作业 (1) (2)(2016年04月07日布置,04月14日收取)

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

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

第10次作业(2017年04月28日布置,05月05日收取)

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

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

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

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


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

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

(注意实验可能会打补丁,所以请确保定期检查版本)

注意事项:

实验提交要求(文档课上要求不超过2页,实验要求不超过3页,故建议2页,最多不能超过3页)(2017年03月02日更新)

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

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

实验课本勘误:1 2(2017年03月22日更新)

实验内容:

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

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

第二次实验(实验要求及指导攻略) 测试用例(2017年04月01日布置,05月09日更新,04月28日收取)

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

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


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