关于班级¶
大三的两个学期均可以选课,笔者参加了春季学期的框院班级,旁听了一部分许老师的课。 据笔者的了解,不同班级之间在期末试卷、OJ规则、实验范围、加分细节上有所区别,也欢迎选了其他老师的同学分享。
相关的学习资料都放在了box里
成绩构成¶
- 书面作业 10%
- 5次实验 30%
- 期末 60%
其中本课程独有的机制:
- 按时提交且诚信无抄袭即可获得40%的保底分。
- 实验可以组队,但人少有实验部分的分数加成
关于作业和实验¶
作业¶
作业主要来自龙书,觉得麻烦可以搓各种前端的算法来简化作业流程,同时加深一下对课程内容的理解。
实验¶
实验共有5次,内容分别为:
- 词法和语法分析
- 语义检查
- 中间代码生成
- 目标代码生成
- 中间代码优化
前四次实验细心即可拿满,算上个人组队的增益就已经能拿到430左右的分数。结合保底分的机制,最后一次实验完全可以视为一次选做。
笔者认为五次实验按照难度降序排序为 5 > 3 = 2 > 4 > 1。
每次实验大约有四周的时间完成,可能会根据学号抽取选做的内容,根据班级的不同可以/不可以看到OJ的实时反馈。往届的测试用例流传很广。
实验最大的难点在于从0开始用C完整过一遍流程。笔者认为可以提前准备好一些常用的数据结构并进行比较充分的测试,这样可以方便后续的实验。
关于期末¶
比较重要的考点:
- LR 项集自动机的构造
- 自动机相关的内容
- 语义动作的人肉模拟
- 静态分析算法的人肉模拟
- 常见语言结构到IR的翻译
由于实验并不是大头,因此得分很大程度上取决于期末试卷做得如何,还是需要好好准备一下的。
总结¶
编译原理是学校开的为数不多的PL相关的课程,谭老师和许老师都是比较和蔼的老师,也很愿意回答同学们的问题,笔者身边不少同学也因为实验做得不错而得到了加入软件所的机会。总的说来这门课是非常值得学习的。