编译定义

17 Mar 2025 | 6 分钟阅读

引言

编译是将计算机翻译高级编程语言为计算机可理解的机器语言的过程。编译器是执行此转换的软件名称。

Compilation Definition

源代码是程序员创建程序的格式。在程序可以执行之前,源代码应该经过几个步骤。源代码必须经过编译器,将高级语言指令转换为目标代码。

当编译器生成目标代码后,通过链接器传递该代码是创建可执行程序的最后一步。链接器创建机器代码,整合模块并为所有符号地址分配实际值。

编译的两个组成部分是分析和综合。分析阶段将源代码分解为其组成元素,并生成源程序的中间表示。目标程序由综合组件从中间项创建。

编译过程

将高级程序编译为二进制低级机器代码称为编译。由于其硬件设计,计算机只能执行二进制机器命令。因此,用非机器语言设计的每个程序都必须首先被翻译成机器指令。

编译是一个多阶段过程,它将人类可理解的高级计算机程序转换为机器可读的低级二进制代码。四个步骤将程序的源代码转换为可执行文件。编译过程中的这四个步骤包括预处理、编译器、汇编和链接。

Compilation Definition

预处理器

预处理阶段是编译过程的初始步骤,此阶段也称为词法分析阶段。程序源代码文件被输入到预处理步骤,该步骤输出一个名为.i(.i)的扩展名的预处理文件。

编译器在源代码文件中搜索任何 #include 和 #define 类预处理器指令。在预处理阶段处理所有头文件集,并用绝对值替换所有宏。但注释不在此阶段处理。

Compiler

编译过程的第二步是编译本身。编译器接受预处理后的文件作为输入,生成包含汇编代码的文件,该文件具有 .s(.s)扩展名。编译器将所有高级软件指令翻译成相应的汇编代码指令。这些指令是为特定体系结构构建的,并且是平台相关的。

汇编器

编译过程的第三步是汇编器。汇编器将基本的计算机命令翻译成二进制代码,供计算机的处理器执行其基本操作。

这些指令是用汇编语言或汇编器编写的。汇编器用于将汇编代码翻译成目标代码。源文件名和汇编器创建的目标文件名是相同的。

链接器

编译过程的第四步也是最后一步是链接。链接的主要目的是将所有目标代码文件合并成一个可执行文件(sourcefile.exe)。大型计算机程序被组织成各种可管理的 文件。

单独的文件用于存储用户定义的函数。在头文件中,这些文件像C语言的#include一样链接到主程序文件。类似地,编程语言提供了内置的标准库函数,程序可以立即使用它们来简化编码任务。

由于标准库代码是目标代码(预编译格式),因此在编译过程中生成可执行文件时,链接器可以在链接步骤中立即将其合并。

为什么需要编译计算机程序?

计算机科学专业的学生应该充分理解编译高级程序的需求。C、C++、Python、Dot Net 和 Java 等高级编程语言用于创建高级程序。

Compilation Definition

人类可以理解高级程序。每种高级编程语言都有独特的语法和保留关键字,用于指示机器执行特定操作。

编程的简易性是开发高级编程语言的一个特殊考虑因素。大多数高级编程语言中的关键字都是常见的英语单词。

Compiler

编译器是将源代码转换为目标代码的软件。换句话说,它将高级语言转换为机器/二进制语言。此外,执行此步骤对于使程序可执行很重要,这是因为计算机只理解二进制语言。

Compilation Definition

一些编译器将高级语言作为第一步翻译成汇编语言。同时,其他编译器将其翻译成机器代码。编译是指将源代码转换为机器代码的过程。

编译器类型

编译器有多种形式,包括以下几种:

  • 单遍编译器:在单遍编译器中,在处理过程中扫描源行后,会从源行中提取令牌。因此,一旦检查完行的语法,就会生成树结构和包含每个令牌详细信息的各种表。
    Compilation Definition
    在确保语义组件正确后,代码最终被写入。调用方法执行各种函数的解析器通常是编译器的核心组件。
  • 双遍编译器:双遍编译器是一种执行翻译程序两次的处理器。在双遍编译器中,有两个部分,即:
    • 前端:它将合法的代码转换为中间表示(IR)。
    • 后端:目标机器与 IR 映射。

    Compilation Definition
    双遍编译器方法使重新定向更加容易。此外,它支持各种前端。
  • 多遍编译器
    Compilation Definition
    编译器在扫描输入源一次后生成第一个修改后的结构,然后在扫描其创建的第一个形式后生成第二个修改后的结构,依此类推,直到完成目标形式。术语“多遍编译器”指的是这种类型的编译器。

编译器的阶段/结构

编译过程有不同的阶段。此外,每个阶段的结果都作为下一步的输入。编译过程包含以下阶段或结构:

Compilation Definition

1. 词法分析器

  • 它接受高级语言的源代码作为输入。
  • 它从左到右检查源代码中的字符。因此,“扫描器”是另一个术语。
  • 单词被分组为词素。词素是具有特定含义的字符集合。
  • 每个词素组合在一起创建一个令牌。
  • 删除空格和注释。
  • 检查并修复词法错误。

2. 语法分析器

  • 语法分析器也称为“解析器”。
  • 词法分析器的输出是它的输入。
  • 它检查源代码中的语法错误。
  • 它通过为每个令牌创建解析树来完成此操作。
  • 解析树需要遵循源代码的语法规则,才能使语法正确。
  • 上下文无关文法是此类代码的恰当文法。

3. 语义分析器

  • 它检查语法分析器的解析树。
  • 它验证代码的编程语言有效性,例如数据类型兼容性、变量声明、初始化等。
  • 它还生成一个经过验证的解析树。带注释的解析树是我们给这个树的另一个名称。
  • 此外,它还执行类型检查、流程检查等。

4. 中间代码生成器 (ICG)

  • 它生成中间代码。
  • 该程序既不是机器语言也不是高级语言,它处于中间形式。
  • 虽然可以翻译成机器语言,但最后两个步骤取决于平台。
  • 所有编译器都使用相同的中间代码。此外,我们根据平台创建机器代码。
  • 三地址码是中间代码的一个例子。

5. 代码优化器

  • 中间代码被优化。
  • 其目的是修改代码以运行得更快并消耗更少的资源(CPU、内存)。
  • 它重新排列代码并删除任何不必要的行。
  • 源代码仍然具有相同的含义。

6. 目标代码生成器

  • 优化后的中间代码随后被转换为机器代码。
  • 这是编译的最后一步。
  • 此过程生成可重定位的机器代码。

编译器操作

Compilation Definition

编译器的关键操作包括以下几点:

  • 将每个源程序段分解成更小的部分后,它为每个源程序段提供语法结构。
  • 它还允许您使用中间表示来构建符号表和所需的目标程序。
  • 编译器协助进行错误检测和源代码编译。
  • 它组织和保存所有变量和代码。
  • 编译器支持独立编译。
  • 它读取整个程序,对其进行分析,然后将其翻译成在语义上等效的语言。
  • 编译器是根据机器类型将源代码转换为目标代码的过程。

解释器和编译器之间的区别

Compilation Definition

编译器一次性检查整个程序。在审查完整个程序后,它会在一个位置显示所有错误。相反,解释器逐行执行程序,并在发现错误时停止执行。


下一主题复合定义