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