绪论
编译器,大家作为程序员或者是大学生都用过,大家都只是停留在运用层面上,这学期有幸学习了编译原理这门课程
参考书目
Compiler: Principles, Techniques, and Tools
该书由四位世界著名的计算机科学家联合编写,是编译领域无可替代的经典著作,被誉为“龙书”。书中深入讨论了编译器设计的重要主题,在介绍编译器一般原理的同时,特别注重编译原理和技术的实际应用,并在最后给出了一个编译器前端的实例,此外,本书的每一章都提供了大量的习题和参考文献。本书一直被国外著名大学特别是美国的著名大学当作编译原理与技术课程的教材。(一大堆套话,但是龙书是真的经典)
编译器概念
编译程序是现代计算机系统的基本组成部分
从功能上看,一个编译程序就是一个语言翻译程序,它把一种语言书写的程序翻译成另一种语言书写的等价程序。
但现在我们大多数人使用的都是高级语言,一般来说目标语言是面向机器的低级语言,例如汇编语言或者机器语言(0,1)
编译的分析-综合模型
分析:分析源程序,计算其基本属性,生成源程序的中间表示
综合:将源程序的中间表示转换为目标代码
编译的逻辑过程
词法分析->语法分析->语义分析->中间代码生成->中间代码优化->目标代码生成->机器代码的优化
词法分析(线性分析)
功能:
1.从左至右读源程序(字符流),识别单词符号
2.源程序字符序列->单词符号序列(二元式序列)
语法分析(解析)
功能:
1.层次分析,依据语法规则进行分析
2.单词符号序列->分析树(或语法树)
其实语法树就是浓缩的分析树
语义分析
功能:
1.语义检查,即验证语法结构合法的程序是否在语义上正确(程序的各个组成部分组合在一起是否有意义)
2.收集代码生成阶段需要的语义信息
3.类型检查与类型转换
通俗的讲就是讲分析树->带语义(注释) 的树
中间代码生成
功能:
生成源程序的中间表示(三地址代码)
通俗的讲就是带语义(注释) 的树->中间代码
中间代码优化
功能:
对中间代码进行优化
目标代码生成
功能:
生成目标代码(机器代码、汇编语言代码)
符号表管理
功能:
管理分析过程中得到的源程序中的标识符的各种信息,记录源程序中使用的标识符,收集每个标识符的各种属性信息,包括类型、作用域、存储分配信息
出错处理
功能:
1.检查错误的位置
2.检查错误的性质(词法、语法、语义…)
3.错误恢复
特别声明:符号表管理和出错处理是在整个编译过程中都存在的