编译器设计 - 概述

  • 简述

    计算机是软件和硬件的平衡组合。硬件只是一个机械设备,其功能由兼容的软件控制。硬件以电荷的形式理解指令,是软件编程中二进制语言的对应物。二进制语言只有两个字母,0 和 1。要进行指令,硬件代码必须写成二进制格式,也就是简单的一串 1 和 0。计算机程序员编写这样的代码将是一项艰巨而繁琐的任务,这就是为什么我们有编译器来编写这样的代码的原因。
  • 语言处理系统

    我们了解到,任何计算机系统都是由硬件和软件组成的。硬件理解一种人类无法理解的语言。所以我们用高级语言编写程序,这样更容易理解和记忆。然后将这些程序输入到一系列工具和操作系统组件中,以获得机器可以使用的所需代码。这被称为语言处理系统。
    语言处理系统
    高级语言在各个阶段被转换为二进制语言。一个compiler是一个将高级语言转换为汇编语言的程序。同样,一个assembler是一个将汇编语言转换为机器级语言的程序。
    让我们首先了解如何使用 C 编译器在主机上执行程序。
    • 用户用 C 语言(高级语言)编写程序。
    • C 编译器编译程序并将其转换为汇编程序(低级语言)。
    • 然后汇编器将汇编程序翻译成机器代码(对象)。
    • 链接器工具用于将程序的所有部分链接在一起以执行(可执行机器代码)。
    • 加载器将它们全部加载到内存中,然后执行程序。
    在深入了解编译器的概念之前,我们应该了解一些与编译器密切合作的其他工具。

    预处理器

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

    解释器

    解释器,就像编译器一样,将高级语言翻译成低级机器语言。不同之处在于他们阅读源代码或输入的方式。编译器一次读取整个源代码、创建标记、检查语义、生成中间代码、执行整个程序并可能涉及多次传递。相反,解释器从输入中读取一条语句,将其转换为中间代码,执行它,然后按顺序获取下一条语句。如果发生错误,解释器会停止执行并报告它。而编译器即使遇到几个错误也会读取整个程序。

    汇编器

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

    链接器

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

    装载机

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

    交叉编译器

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

    源到源编译器

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