龙叔<编译原理>学习笔记
1.1编译器
编译器负责读入某种语言(源语言)编写的程序并将其翻译成与之相等的以另一种语言编写的程序(目标程序).
根据编译器的构造方法和它们要实现的功能,可以吧编译器分为,一遍编译器,多遍编译器,装入并执行编译器,调试编译器,优化编译器等多种类别.
1.1.1编译的分析-综合模型
编译由两部分组成:分析和综合
分析部分把源程序切分成一些基本快并形成源程序的中间表示.
综合部分把源程序的中间表示转换为所需的目标程序.该部分需要大量的专门化技术.
在分析期间,源程序所蕴含的操作将被确定下来并被表示成为一个语法树,该树的每个节点表示一个操作,该节点的子节点表示这个操作的参数.
1.2源程序分析
1.2.1词法分析
从左到右的读构成源程序的字符流,而且把字符流分组成为多个记号,记号是具有整体含义的字符序列.
1.2.2 语法分析
把源程序的记号进一步分组,产生被编译器用于生产代码的语法短语.通常用语法短语树表示.
程序的层次结构通常是通过递归规则表达的:
1.任何一个标识符都是表达式
2.任何一个数都是表达式
3.表达式之间运算还是表达式
语法分析和词法分析的界限在某种程度上是不确定的.我们通常采取能够使整个分析工作简化的方法设定词法分析和语法分析的界限.决定语法分析和词法分析界限的因素的源语言是否具有递归结构.词法分析不要求递归,而语法分析常常需要递归.上下文无关文法是递归规则的一种形式化,可以用指导语法分析.
1.2.3
语义分析阶段检验源程序的语义错误,并收集代码生成阶段的类型信息.语义分析利用语法分析阶段确定的层次结构来识别表达式和语句中的操作符和操作数.
语义分析重要组成部分是类型检查.类型检查负责检验每个操作符的操作数是否满足源语言的说明.