链接:编译原理-笔记
提取码:0928
0.前言
计科大三上的四门核心课里(计网、算法、数据库、编译原理),编译原理的学习内容算比较少的了——词法分析、语法分析、语法制导翻译、语义分析、代码生成、中间表示、代码优化(比较重要的就是下划线的)。
期中和期末的题都比较常规(除了有的语法制导翻译让写语义动作,个人感觉有点凭感觉),题型也比较固定,尤其老师给划重点就很得劲。总的来说,个人认为这门课是四门课里学习难度、考试难度都比较低的。
总评90,期中、期末都不知道扣在哪里,尤其期末有的同学给的分好像非常低5/6/70+,就很奇怪,另外我们期中的试卷是跟期末一起改的,可能有什么别的用意。复查的难度和风险也比较大。
0-1 教材:
《编译原理》(第2版) [Compilers:Principle,Techniques and Tools]
个人感觉书真的看不过来;不过有几个部分,还是有必要看下的:
- 语法分析:计算FIRST,FOLLOW集合;(P140-141)
- 语法制导翻译:注释语法分析树,依赖图;
0-2 网课:
B站中科大的华保健老师的视频:【编译原理_中科大(华保健)】;
我们教学班是宋勃升老师,另外一个教学班是全哲老师。课上基本就是按中科大的这个讲的,老师的pp跟中科大的差不多,加了一些代码截图。网课看这个视频就够了。
0-3 评价回顾:
宋勃升老师:个人感觉老师人还不错(背后议论,好在不算是坏话)。上课基本每次都点名,不过笔者大多是在课上看b站的视频,偶尔听下课(虽然感觉有点不尊重老师,但感觉即使是b站那个老师讲线下课,我估计也是更愿意在线上听)。
比较特殊的就是,上课回答问题可以加分(正确算一次,上限五次),可在期末考试那个成绩占比部分加(上限五分,总分不超过100)。
0-4 关于实验-16%:
编译原理共4次实验(10/11/12/14周,第一次离期中考试近,几个班跟老师一说就推迟了)。
实验代码基本全抄的CSDN上A橙和韩金轮的文章,感觉不是一般人能写出来,私以为教学计划没打算让我们自己写出来。
学渣抱怨之后,窃以为实验起码得复现出来结果,当然最好是正确结果。然后毕竟得要跟助教验收,弄懂实验在干什么、各个函数在干什么(不必弄懂所有语句)还是有必要的,这对于知识点的理解也是有一定帮助(虽然帮助不算大)。能做到以上,个人以为已经不输大部分人了,而且也算达到了实验的目的。(当然,功底较强者,可视之为学渣捞分之术)。
关于实验提前验收:有自己学习计划安排的同学,比如离考试时间较近、不想一起验收排队,就可以找助教提前验收(助教有时间且愿意的话)。笔者提前验过两次,感觉还不错;笔者一个同学提前验收,据其说助教印象还不错,每次打分都不低。
0-5 小班-5%:
笔者教学班是每个小组(6-7人)讲45分钟,一般每个人就讲一次。一般拉不开差距,也比较简单,可以水。
0-6 作业-16%:
一共四次作业,占比16%还是挺高的。
词法分析、语法分析、语法制导翻译的部分题还是很有多看几遍的必要的,不过有些概念题抄一下就得了。dragon-book-exercise-answers
0-7 关于考试:
期中和期末的题都比较常规(除了有的语法制导翻译让写语义动作,个人感觉有点凭感觉),题型也比较固定,尤其老师给划重点就很得劲。总的来说,个人认为这门课是四门课里学习难度、考试难度都比较低的。
- 期中-23%
- 考前两章:词法分析、语法分析,感觉题型都比较固定,就NFA转DFA再最小化,还有LL1文法,LR1文法。
- 而且还是开卷(虽然感觉开卷没什么用),往年考试试卷可在课程中心找到(编译原理的课程中心还是比较完整的)。
- 期末-40%
- 我们画的重点是:
- 词法分析:NFA->DFA->最小化;
- 语法分析:给文法,构建ll1分析表;给字符串,是否符合ll1文法; 给字符串判断是否符合LL1文法:感觉是用栈,从初始状态开始,前看给的字符串的一个符号,然后根据LL1分析表判断用那条产生式,然后把产生式的右部压栈,能匹配前看符号就继续前看,匹配不了就不符合(我们考的应该是不符合)。
- 语法分析:语法制导翻译:设计语义动作(分值不高);
- 给语义规则求语义动作,比较简单,如下例:
- 比较复杂的:要写产生式和语义动作(笔者考的是:给三进制字符串,能转成十进制数,给出产生式和语义动作),有点像下例:
- 给语义规则求语义动作,比较简单,如下例:
- 代码优化:给控制流图,对其活性分析,画寄存器的分配方案(分值高);比较常规;
- 给基本块、活性变量,构造控制流图:复习的时候,也没弄懂这是什么意思。不过最后也不是考这个,就是考的代码优化(给一段代码,能不能常数折叠、公共子表达式、强度弱化),不过也不知道强度弱化是什么。
- 我们画的重点是: