编译器是一种计算机程序,它将用高级语言编写的源代码更改为低级机器语言。它将用一种编程语言编写的代码翻译成另一种语言,而无需修改代码的定义。编译器还生成高效的最终代码,该代码针对执行时间和内存空间进行了优化。
有各种类型的编译器,如下所示 -
传统编译器(C、C++ 和 Pascal) - 这些编译器将 HLL 中的源程序转换为其类似的本地机器程序或目标程序。
解释器(LISP、SNOBOL 和 Java1.0) - 这些编译器首先将源代码转换为中间代码,然后将其解释(模拟)为其等效的机器代码。
交叉编译器- 这些是在一台机器上运行并为另一台机器编写代码的编译器。交叉编译器是一种足以为运行编译器的平台以外的平台生成可执行代码的编译器。交叉编译器工具用于为已安装的系统或多个平台创建可执行文件。
Incremental Compilers - Incremental Compiler 是一个编译器,它只执行更改源代码的重新编译,而不是编译完整的源代码。
转换器(例如 COBOL 到 C++) - 这些程序将从一种高级语言编译为另一种。
即时 (JIT) 编译器(Java、Micosoft.NET) - 这些是从中间语言(字节码、MSIL)到可执行代码或本地机器代码的运行时编译器。这些实现了基于类型的验证,从而使可执行代码更加真实。
单程编译器- 在单程编译器中,当处理线源时,它会被扫描并提取标记。因此,检查该行的语法并构建树结构和一些包含有关每个标记的数据的表。最后,在测试语义元素的正确性后,创建代码。对每一行代码重复相同的过程,直到编译整个程序。通常,整个编译器都是围绕解析器构建的,解析器将调用执行不同功能的过程。
Multi-Pass Compiler - 编译器扫描输入源一次并生成第一个修改结构,因此扫描第一个生成的形式并生成第二个修改的结构,依此类推,直到生成对象形式。这种编译器被称为多通道编译器。
Ahead-of-Time (AOT) Compilers (eg, .NET ngen) - 这些是 Java 和 .NET 本机代码的预编译器。
二进制编译- 这些编译器将一个平台的目标代码编译成另一个平台的目标代码。