编译器设计 - 概述
计算机是软件和硬件的平衡组合。硬件只是一种机械设备,其功能由兼容的软件控制。硬件以电子电荷的形式理解指令,这是软件编程中的二进制语言的对应物。二进制语言只有两个字母,0 和 1。要发出指令,硬件代码必须以二进制格式编写,这只是一系列 1 和 0。对于计算机程序员来说,编写这样的代码将是一项困难而繁琐的任务,这就是为什么我们有编译器来编写这样的代码。
语言处理系统
我们已经了解到,任何计算机系统都是由硬件和软件组成的。硬件理解一种人类无法理解的语言。因此,我们用高级语言编写程序,这对我们来说更容易理解和记忆。然后,这些程序被输入到一系列工具和操作系统组件中,以获得机器可以使用的所需代码。这被称为语言处理系统。

高级语言在各个阶段转换为二进制语言。编译器是将高级语言转换为汇编语言的程序。类似地,汇编程序是一种将汇编语言转换为机器级语言的程序。
首先让我们了解程序如何使用 C 编译器在主机上执行。
用户用 C 语言(高级语言)编写程序。
C 编译器编译程序并将其转换为汇编程序(低级语言)。
然后,汇编程序将汇编程序转换为机器代码(对象)。
链接器工具用于将程序的所有部分链接在一起以供执行(可执行机器代码)。
加载器将它们全部加载到内存中,然后执行程序。
在深入探讨编译器的概念之前,我们应该先了解一些与编译器密切配合的其他工具。
预处理器
预处理器通常被视为编译器的一部分,是一种为编译器生成输入的工具。它处理宏处理、增强、文件包含、语言扩展等。
解释器
解释器与编译器一样,将高级语言翻译成低级机器语言。不同之处在于它们读取源代码或输入的方式。编译器一次读取整个源代码,创建标记,检查语义,生成中间代码,执行整个程序,并可能涉及许多遍。相比之下,解释器从输入中读取语句,将其转换为中间代码,执行它,然后按顺序执行下一个语句。如果发生错误,解释器将停止执行并报告。而编译器即使遇到几个错误也会读取整个程序。
汇编器
汇编器将汇编语言程序转换为机器代码。汇编器的输出称为目标文件,其中包含机器指令的组合以及将这些指令放入内存所需的数据。
链接器
链接器是一种计算机程序,它将各种目标文件链接并合并在一起以生成可执行文件。所有这些文件可能都由单独的汇编器编译。链接器的主要任务是搜索和定位程序中引用的模块/例程,并确定将加载这些代码的内存位置,使程序指令具有绝对引用。
加载器
加载器是操作系统的一部分,负责将可执行文件加载到内存中并执行它们。它计算程序的大小(指令和数据)并为其创建内存空间。它初始化各种寄存器以启动执行。
交叉编译器
在平台 (A) 上运行并能够为平台 (B) 生成可执行代码的编译器称为交叉编译器。
源到源编译器
将一种编程语言的源代码转换为另一种编程语言的源代码的编译器称为源到源编译器。