1 引论
1.1 什么叫编译程序
编译程序是指能够把某一种语言程序(称为源语言程序)转换成另一种语言程序(称为目标语言程序),而后者与前者在逻辑上是等价的。
1.2 编译过程概述
1.2.1 词法分析。对构成源程序的字符串进行扫描和分解,识别单词。
例: for I := 1 to 100 do,分析结果如下:
基本字 for
标识符 I
赋值号 :=
整常数 1
基本字 to
整常数 100
基本字 do
描述词法规则的有效工具是正规式和有限自动机。
1.2.2 语法分析。在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位。
1.2.3 语义分析与中间代码产生。对语法分析所识别出的各类语法范畴,分析其含义,并进行初步翻译(产生中间代码)。
1.2.4 优化。优化的任务在于对前段产生的中间代码进行加工变换,以期在最后阶段能生产出更高效的目标代码。
1.2.5 目标代码生成。把中间代码(或经优化处理之后)变换成特定及其上的低级语言代码。
1.3 编译程序的结构
1.3.1 编译程序总框
1.3.2 表格与表格管理
编译程序在工作过程中需要保持一系列表格,以等级源程序的各类信息和编译各阶段的进展状况。最重要的是符号表。用来登记源程序中出现的每个名字以及名字的各种属性。
1.3.3 出错处理
编译程序应能最大限度的发现源程序中的各种错误,准确的指出错误的性质和发生错误的地点,并且能将错误所造成的的影响限制在尽可能小的范围内,是的源程序的其余部分能继续被编译下去,以便进一步发现其他可能的错误。
1.3.4 遍
受不听源语言、设计要求、使用对象和计算机条件的限制,往往将编译程序组织为若干遍。所谓“遍”就是对源程序或源程序的中间结果从头到尾扫描一次,并作有关的加工处理。
1.3.5 编译前端与后端
前端主要由与源语言有关但与目标机无关的那些部分组成。通常包括词法分析、语法分析与中间代码产生,有的代码优化工作也可包括在前端。后端程序包括编译程序中与目标机有关的那些部分,如与目标机有关的代码优化和目标代码生成。