📜  编译器设计-概述

📅  最后修改于: 2021-01-18 05:22:52             🧑  作者: Mango


计算机是软件和硬件的平衡组合。硬件只是机械设备的一部分,其功能由兼容的软件控制。硬件以电子电荷的形式理解指令,这是软件编程中二进制语言的对应形式。二进制语言只有两个字母0和1。要进行指令,硬件代码必须以二进制格式编写,即一系列1和0。对于计算机程序员而言,编写此类代码将是一项艰巨而繁琐的任务,这就是为什么我们需要编译器来编写此类代码。

语言处理系统

我们已经知道,任何计算机系统都是由硬件和软件组成的。硬件可以理解人类无法理解的语言。因此,我们使用高级语言编写程序,这使我们更容易理解和记住。然后,将这些程序输入到一系列工具和OS组件中,以获取机器可以使用的所需代码。这被称为语言处理系统。

语言处理系统

高级语言在各个阶段都转换为二进制语言。编译器是将高级语言转换为汇编语言的程序。同样,汇编程序是将汇编语言转换为机器级语言的程序。

让我们首先了解如何使用C编译器在主机上执行程序。

  • 用户使用C语言(高级语言)编写程序。

  • C编译器编译该程序并将其转换为汇编程序(低级语言)。

  • 然后,汇编程序将汇编程序转换为机器代码(对象)。

  • 链接器工具用于将程序的所有部分链接在一起以执行(可执行的机器代码)。

  • 加载程序将所有这些加载程序加载到内存中,然后执行程序。

在深入探讨编译器的概念之前,我们应该了解与编译器紧密配合的其他一些工具。

预处理器

通常被视为编译器一部分的预处理器是一种为编译器生成输入的工具。它涉及宏处理,扩充,文件包含,语言扩展等。

口译员

解释器(如编译器)将高级语言翻译为低级机器语言。区别在于他们读取源代码或输入的方式。编译器立即读取整个源代码,创建令牌,检查语义,生成中间代码,执行整个程序,并且可能涉及许多过程。相反,解释器从输入中读取一条语句,将其转换为中间代码,执行该语句,然后依次获取下一条语句。如果发生错误,解释器将停止执行并报告该错误。而编译器即使遇到多个错误也会读取整个程序。

组装工

汇编程序将汇编语言程序转换为机器代码。汇编程序的输出称为目标文件,其中包含机器指令以及将这些指令存储在内存中所需的数据的组合。

连接器

链接器是一种计算机程序,可将各种目标文件链接并合并在一起,以生成可执行文件。所有这些文件可能都是由单独的汇编器编译的。链接器的主要任务是在程序中搜索和定位引用的模块/例程,并确定将要加载这些代码的内存位置,从而使程序指令具有绝对引用。

装载机

加载程序是操作系统的一部分,负责将可执行文件加载到内存中并执行它们。它计算程序的大小(指令和数据)并为其创建存储空间。它初始化各种寄存器以启动执行。

交叉编译器

在平台(A)上运行并且能够为平台(B)生成可执行代码的编译器称为交叉编译器。

源到源编译器

采用一种编程语言的源代码并将其转换为另一种编程语言的源代码的编译器称为源到源编译器。