编译原理学习总结

最近通过龙书学习编译原理,里面很多东西不容易理解,尤其是读第一遍的时候,通常一头雾水,而且书中很多内容确实需要读到后面的内容才能理解,比如语法分析中讲规约过程,刚开始读会很不理解为什么这么规约,直到读完后面的内容。花了2个月时间,前八章终于看完了,书的内容没的说,看了收获不少,不过比较偏向理论,尤其是5-8章。有空看看《编译原理与实践》

第一章

是基本概念,读完这一章是为了有个基本了解,这一章是很容易顺利读完的

第二章

这一章介绍了书中很多重要的东西,而且有一个java例子(附录1中有完整代码)。这一章虽然也有些难理解的地方,但是跟后面比还是容易很多,很多东西都很基本,将附录1中代码弄明白,会对编译系统有个基本的理解。

第三章 词法分析

相比较语法分析,词法分析相对比较简单,就是一个自动机系统,学完这一章最基本应该把NFA、DFA概念理解,并能够将NFA转换为DFA,能将正则表达式转换为NFA,并可以使用lex生成简单的词法分析器。

第四章 语法分析

到目前为止最难的一章,据说很多自学的人都是读到这一章放弃的。学完这一章应该有了语法分析的概念,并理解语法分析的局限性,比如变量先声明后使用时没法通过语法定义的,但是相对词法分析,语法可以表示的东西已经多了很多。

lex和yacc是学习编译原理很重要的部分,可以自动生成分析代码,但是默认编译对装换表做了优化,用几个一维表代替正常的二维表

实际应用中的编译器通常会选择二义性文法和根据运算符的优先级来生成的文法,因为这样的文法相对比较简单

第五章 语法制导的翻译

这一章在语法分析中加入翻译代码,主要讲了2个概念:
SDD:语法制导定义,由一个上下文无关文法和属性及规则组成
SDT:语法制导翻译,是在其产生式体内嵌入了程序片段的一个上下文无关文法

第六章 中间代码生成

这一章讲了三地址中间代码的表示方法和程序中大部分内容的三地址表示方法

第七章 运行时刻环境

运行时刻环境主要是存储管理,包括栈管理与堆管理,栈是一个局部的模块,堆是一个全局的模块,本章的一个重要内容是垃圾回收

第八章 代码生成

代码生成的任务是把编译器前端生成的中间表示形式与符号表,转换为可执行的应用程序,这个过程包括指令选择(可能还要考虑机器相关指令)、寄存器分配和指派(寄存器数量是有限制的,而某些计算又对寄存器使用有特殊要求,比如*和/)、指令排序




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