编译原理(Principles and Techniques of Compilers)
课程信息
教学目标:编译原理的教学目标是使得学生掌握如下知识:和编译器设计相关的形式语言理论基础;编译程序的体系结构,编译器的各个组成部分的原理和技术,包括词法分析、语法分析、语义分析和目标代码生成、代码优化,以及设计环境与程序错误的检查和校正;初步了解一些编译器生成工具的基础理论和应用。另外,该课程将通过上机实验使得学生初步了解一个设计编译器的过程。
授课老师:谭添
课程助教:张腾(分管实验),颜俊梁(分管作业)
使用课本:《编译原理》,Alfred V. Aho等著,赵建华等译(也称“龙书”,就是封面上有条紫龙,还有个屠龙武士),有两个版本,完整版和本科教学版均可,当然后者便宜些;实验使用《编译原理实践与指导教程》,许畅等著,囊中羞涩的也可看随实验发布的讲义。
说点什么:通常这是门困难的课程,这当然是指自己闷头看书的情况,如果在课堂上,你大概会过得比较轻松愉快 :-)
课程安排
学期:2022-2023学年第二学期(共17周)
班级:基础班 22020260(拔尖计划、匡亚明-理科强化班)
时间:周一3-4节、周三3-4节
地点:仙II-212
课程动态新闻
以下是重要通知、以及书面作业或上机实验的重要变化:
- [置顶👆] 2023-06-07: 期末考试安排6月24日(星期六)上午8:00--10:00,地点:仙I-108。
- 2023-06-09: 实验五第8页:样例2(优化后)进行了更新(分了两步结果:简单优化和条件优化,选做要求5.1仅要求第一步即可)。
- 2023-06-07: 实验五第12页:样例5(优化前和优化后)第29行中的v2都改成v5;
第42页:可用表达式迭代算法第2行中的空集符号改为符号U(即全集的意思);
第36页的图29、第37页的图32、第38页的图33、第43页的图38和图39、
第44页的图40、第48页的图47和第49页的图48为了规范性和部分数值问题都进行了更新。
- 2023-06-05: 实验五第5页:样例2(优化后)删除第11-12行。
- 2023-06-02: 实验五第10-11页:样例4(优化前和优化后)整体更换。
- 2023-05-30: 实验五提交截止日期改为06月19日。
- 2023-05-30: 实验五第28页:更新了图20. MOP与IDEAL solution,修改了图文不符的情况;
第33页:修改了文本“常量传播分析”为“到达定值分析”;
第41页:修改了图36. 程序状态传递中及其对应的文字关于“x = n + y”的地方;
第48页:更换了图47.程序状态初始化中的活跃变量分析的数值;
第51页:修改了文本“1. x与y中有至少一个变量状态为UNDEF,这表示x与y中包含一个输入变量,
且存在一条从入口到程序点p的路径,使得该变量未被重新定义,因其为输入值,
所以可以是该类型的任意值,故,Sz为UNDEF”为 “x与y中有至少一个变量状态为UNDEF,
这表示x与y中至少有一个值,存在一条从入口到程序点p的路径,使得该变量未被定义,故Sz为UNDEF”
- 2023-05-25: 实验五必做内容样例2的输出有修改;实验五第13页代码第36行有修改。
- 2023-05-18: 实验三测试用例发布,不能用于修改实验三的成绩,但可以用来改进实验三的实现以更好地支持实验四和五。
- 2023-05-07: 实验四、实验五发布,完成时间五周,请同学们按时完成并提交。
- 2023-04-13: 实验三发布,完成时间三周,请同学们按时完成并提交。
- 2023-04-06: 实验一测试用例发布,不能用于修改实验一的成绩,但可以用来改进实验一的实现以更好地支持实验二。
- 2023-03-15: 实验二发布,完成时间四周(与实验一重叠一周),请同学们按时完成并提交。
- 2023-02-17: 实验一发布,完成时间四周(考试周不计入在内),请同学们按时完成并提交。
- 2023-02-13: 课程开始ヾ(o◕∀◕)ノ! 请大家加入课程QQ群(见教服平台),并登记实验分组。
课程讲义
书面作业
上课布置后,在这里也会再次公布,以确保不会错过作业(不适用于
既不上课
也不看课程网站的学霸们)
上机实验(OJ平台收取)
编译原理的实验内容是为一个小型的类C语言(C--)实现一个编译器。如果你顺利完成了本实验任务,那么不仅你的编程能力将会得到大幅提高,而且你最终会得到一个比较完整的、能将C--源代码转换成MIPS汇编代码的编译器,所得到的汇编代码可以在SPIM Simulator上运行。实习总共分为五个阶段:词法和语法分析、语义分析、中间代码生成、中间代码优化、以及目标代码生成。每个阶段的输出是下一个阶段的输入,后一个阶段总是在前一个阶段的基础上完成。
(注意实验可能会打补丁,所以请根据提示定期检查版本)
注意事项:
实验内容: