什么是编译程序?
编译程序是把一种语言编写的程序(源程序)翻译成等价的另一种语言程序(目标程序)的程序。
编译程序的构成成分
词法分析
词法分析:扫描字符串表示的源程序,根据词法规则识别出具有独立意义的单词符号,输出单词符号流。
语法分析
根据语法规则,把单词符号流分解成语法短语(又叫语法单位),可表示成语法树。
语义分析
对语法成分的类型、含义进行检查,以保证程序各部分能有机地结合在一起,并为以后生成目标代码收集必要的信息,如类型、目标地址等。
中间代码生成
将源程序转换为一种结构简单、含义明确的中间表示形式,以便进一步转换成目标代码。
代码优化
对中间代码进行改进以获得更高效的代码:占用空间少、运行速度快。
目标代码生成
将中间代码转换成特定机器上的目标代码。
表格管理
编译过程中的各种信息都被保存在不同的表格里,编译各阶段都涉及建立、查找和更新有关表格。
错误处理程序
报告编译各阶段发生的错误性质和发生错误的语句,并将错误造成的影响限制在尽可能小的范围内,使编译程序能够继续处理源程序的剩下部分。
编译程序的划分
前端
编译系统的前端由于源程序有关而与目标机器无关的部分组成,通常包括词法分析、语法分析、语义分析,中间代码生成、符号表的建立以及与机器无关的代码优化工作,当然前端也包括相应的错误处理和符号表达管理。
后端
后端由编译程序中与目标机器有关的部分组成,一般来讲,这些部分与源语言无关而仅依赖于中间代码。后端包括目标代码的生成,与机器有关的代码优化以及相应的错误处理和符号表的管理。
遍
编译程序的遍是指对源程序或基于中间表示形式从头到尾扫描一次,并在扫描过程中作相关的加工处理,生成新的中间表示形式或目标程序。
解释程序和编译程序
解释程序是解释、执行高级语言源程序的程序。编译程序是把高级语言编写的程序翻译成某种机器的汇编语言或者机器语言的程序。
不同:
编译程序把源程序翻译成等价的目标程序(只翻译,不执行),此后目标程序的运行不再依赖于编译程序。
解释程序是边翻译(解释)边执行,不产生目标代码,直接输出源程序的运行结果。源程序的每一次运行都离不开解释程序。