编译原理 - 冯洋¶
基本信息¶
- 课程号:
22020260
- 任课教师: 冯洋
- 上课专业: 匡计,计拔
评价 1¶
评价者信息¶
Tag:保研;Rank 5%;2024 Fall修课
Score:98
关于老师¶
秋季学期由 PL 组的冯洋老师讲授,上课风格很随和(甚至有些随意);讲课水平一般:自己确实是懂,并且很努力在讲明白,但确实是讲不太明白。
前置知识¶
扎实的 C 语言基础
课程内容¶
比较完备的编译器全流程结构,包括:
- 词法分析
- 语法分析(消除左递归、LL1、LR0、SLR、LALR、LR1)
- 语法制导的翻译
- 中间代码生成
- 运行时环境(栈管理、GC)
- 目标代码生成
- 机器无关的优化
- 其他(JIT、优先级上升算法)
基本涵盖了现代编译器架构的所有部分,算是国内覆盖面最广的编译原理课程。
作业、考试与得分¶
平时作业主要是对概念的应用和具体算法的执行模拟,与考试题目高度相似,可以参考许畅老师往年的作业解析。
实验是该课程的重中之重,会要求从零开始完全手搓出一个 C 语言(子集)的编译器。据笔者所知,国内只有 PKU 的实验题量和完整度能和该实验相提并论。
实验分为五个部分:词法与语法分析、语法树生成、中间代码生成、目标代码生成、目标代码优化。每个部分耗时均在 15 小时左右(含架构设计与手册理解)。github 上有很多往年的仓库,建议不要参考,自己设计出一个原型架构并改进设计;中途一定会遇到很多大坑,尽量独立解决,这样才能理解编译器一些设计背后的原因。
实验可以多人组队,但是非常不建议这样做;你的代码是贯穿整个学期的,经常会在后面的实验中发现前面的代码有问题,此时如果前面的代码不是你写的,那可太折磨了。况且,独立完成可以获得 10% 的加分,这样不必强求每次都获得满分。
工作量¶
实验:5 次实验,每个实验耗时约 15 小时(含架构设计和debug),800-1000 行左右。
考试:主要为概念和算法的记忆,整理+记忆约 10 小时。
学习指南¶
上课大概率听不懂,建议做作业/实验时对着春季学期的许畅老师正版 PPT 自学。
许畅班课程主页:compiler_changxu
其他¶
你可能很容易搓出一个 80 分的编译器,但它距离 100 分的距离并不比从 0 到 80 更短。编译器的 corner case 多到你无法想象;如果可能,建议额外手搓一个测试框架,方便你排查问题。
独立手搓一个全流程编译器,听上去就很酷;相信对面的面试官也是这么想的。
如何贡献¶
请查看评价指南了解如何评价课程!