1 编译程序:把一种由源语言书写的程序翻译成另一种目标语言的等价程序。
2 编译过程:分为6个阶段
a 词法分析:对构成源程序的字符流进行扫描和分解,从而识别出一个个“单词”(单词指逻辑上紧密相连的一些字符,如关键字,符号等等)
b 语法分析:在词法分析的基础上将单词序列依据程序结构的规则分解成各类语法短语(语法单位,语法树)
c 语义分析:审查源程序有无语义错误,为代码生成阶段收集类型信息。
d 中间代码生成:有道编译程序将源程序变成一种内部表示形式
e 代码优化:对前一阶段的中间代码进行变换或进行改造,时生成的代码效率更高
f 目标代码生成:将中间代码变成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
3 编译程序结构
表格管理和出错处理与上述的关系:
编译过程中源程序的各种信息被保留在种种不同的表格里,编译各阶段的工作都涉及构造,查找或更新有关的表格。
发现错误,报告错误的地点,性质,把错误造成的影响限制在尽可能小的范围,这些公正则有出错处理程序完成。
4 编译阶段的组合
前端:主要依赖于源语言而与目标机无关,包括词法分析、语法分析、语义分析、和中间代码生成等,某些优化以及与前端某个阶段相关的出错处理和符号表管理等工作。
后端:依赖于目标机而不依赖于源语言的,只与中间代码生成有关的那些阶段的工作,包括目标代码生成及相关的出错处理和符号表管理等工作。
5 解释程序:不需要在运行前把源程序翻译成目标代码,也可以实现在某台机器上运行程序并生成结果。
解释和运行是两个独立分开的阶段。
经由编译程序处理时,在源程序被编译的各个阶段,存储区要为源程序和目标代码开辟空间,要存放 编译用的各种表格,如符号表。在目标代码运行阶段,存储区中主要是目标代码和数据,编译所用的各种信息都不再需要了。
解释程序一般是把源程序一个语句一个语句的进行语法分析,转化为一种内部表示形式,存放在源程序区。