课程学习感受

编译原理这门课程学习了编译器的构造,这是一门计算机专业课的综合课程,涉及高级语言,数据结构,算法分析,计算机组成,体系结构。

编译程序分为前端和后端,分析部分称为前端,综合部分称为后端。这学期主要学习了编译器的前端,包括词法分析器、语法分析器;后端包括语义分析、中间代码生成、优化、目标代码生成。

在前端中涉及了很多数据结构的知识,比如用于语法分析的LR语法,LL语法,以及语义分析中的抽象树,依赖树,有限自动机的执行过程用到了栈,我觉得如果实现了编译原理中的这些应用,一定会对数据结构的理解有很大帮助。其次,算法的分析过程也值得学习。首先,分析并列举出所有情况;然后,书写伪代码;最后,书写实际代码。这种分析方式在数据结构中也有充分的展现。我觉得我思考问题的方式还是与这种方式有一些出入,我总考虑太多问题(有很多都是不重要的问题),从而总觉得问题很复杂,以至于很小的问题也解决不出来。而这种方式总是环环相扣,通过一步步的子问题最终解决大问题,这是值得我好好学习的地方。

其次,就是编译器的实现,首先是词法分析,学习了文法、语言、句子、DFA、NFA、First、Follow,通过自动机分析词法,把单词符号组成词素,以及分析词法是否正确,否则,交给出错处理。第二章是语法分析,课本上有三种实现方法,自上而下的LL文法,自下而上的LR文法,以及算符优先文法,三种方式都需要构造各自的参照表,LL文法由First和Follow确定使用那种产生式来进行递推,LR文法需要通过有限自动机确定的分析表来确定用什么产生式进行规约,而算符优先文法需要算符优先表进行确定如何进行操作。然后是语义分析,语义分析需要抽象语法树,依赖树,以及一些自动机完成功能。最后是中间代码生成,编译器按一定格式生成中间代码,比如三元式、四元式、间接三元式,以及布尔表达式,循环语句,控制语句的翻译。

周末就要考六级了,抓紧学英语。。。。


你可能感兴趣的:(编译原理)