什么是编译器设计?类型、构造工具、示例

什么是编译器?

编译器是一种计算机程序,可帮助您将用高级语言编写的源代码转换为低级机器语言。它将用一种编程语言编写的代码转换为另一种语言,而不会改变代码的含义。编译器还可以使最终代码更高效,从而针对执行时间和内存空间进行优化。

编译过程包括基本翻译机制和错误检测。编译过程在前端进行词法、语法和语义分析,在后端进行代码生成和优化。

编译器

编译器的特性

  • 正确性
  • 编译速度
  • 保留正确的代码含义
  • 目标代码的速度
  • 识别合法和非法的程序构造
  • 良好的错误报告/处理
  • 代码调试帮助

编译器类型

以下是不同类型的编译器:

  • 单次编译器
  • 两遍编译器
  • 多遍编译器

单次编译器

单次编译器
单次编译器

在单次编译中,源代码直接转换为机器码。例如,Pascal 语言。

两遍编译器

两遍编译器
两遍编译器

两遍编译器分为两个部分,即:

  1. 前端: 它将合法代码映射到中间表示(IR)。
  2. 后端: 它将 IR 映射到目标机器上

双通道编译器方法也简化了重定向过程。它还允许多个前端。

多遍编译器

多遍编译器
多遍编译器

多遍编译器多次处理程序的源代码或语法树。它将一个大程序分成多个小程序并进行处理。它会开发多个中间代码。所有这些多遍都将前一阶段的输出作为输入。因此它需要的内存较少。它也被称为“宽编译器”。

编译器的任务

编译器执行的主要任务是:

  • 将源程序分解成多个部分,并对其施加语法结构
  • 允许您从中间表示构建所需的目标程序,并创建符号表
  • 编译源代码并检测其中的错误
  • 管理所有变量和代码的存储。
  • 支持单独编译
  • 阅读、分析整个程序,并翻译成语义等效的
  • 根据机器类型将源代码翻译成目标代码

编译器的历史

编译器历史上的重要里程碑如下:

  • “编译器”一词最早由 Grace Murray Hopper 于 1950 世纪 XNUMX 年代初使用。
  • 第一个编译器是由 John Backum 及其团队在 1954 年至 1957 年间在 IBM.
  • COBOL 是第一个 编程语言 1960 年在多个平台上编译
  • 1960 世纪 1970 年代和 XNUMX 年代人们开始研究扫描和解析问题,以提供完整的解决方案。

语言处理系统的步骤

在了解编译器的概念之前,您首先需要了解一些与编译器一起工作的其他工具。

语言处理系统的步骤
语言处理系统的步骤
  • 预处理器: 预处理器被视为编译器的一部分。它是为编译器提供输入的工具。它处理宏处理、增强、语言扩展等。
  • 口译员:解释器类似于编译器,它将高级语言翻译成低级机器语言。两者的主要区别在于解释器逐行读取和转换代码。编译器一次读取整个代码并创建机器代码。
  • 汇编:它将汇编语言代码翻译成机器可理解的语言。汇编程序的输出结果称为目标文件,它是机器指令以及将这些指令存储在内存中所需的数据的组合。
  • 链接:链接器可帮助您链接和合并各种目标文件以创建可执行文件。所有这些文件可能都是用单独的汇编程序编译的。链接器的主要任务是在程序中搜索调用的模块并找出存储所有模块的内存位置。
  • 装载机: 加载器是操作系统的一部分,负责将可执行文件加载到内存并运行。它还会计算程序的大小,从而创建额外的内存空间。
  • 交叉编译器:编译器设计中的交叉编译器是一个帮助您生成可执行代码的平台。
  • 源到源编译器:源到源编译器是将一种编程语言的源代码翻译成另一种语言的源代码时使用的术语。

编译器构建工具

随着计算机相关技术在世界范围内的传播,编译器构建工具应运而生。它们也被称为编译器、编译器生成器或翻译器。

这些工具使用特定的语言或算法来指定和实现编译器的组件。以下是编译器构建工具的示例。

  • 扫描仪发电机:此工具以正则表达式作为输入。例如 Unix 的 LEX Opera叮系统。
  • 语法制导翻译引擎:这些 软件工具 使用解析树提供中间代码。其目标是将一个或多个翻译与解析树的每个节点相关联。
  • 解析器生成器: 解析器生成器以语法作为输入,并自动生成可以在语法的帮助下解析字符流的源代码。
  • 自动代码生成器:获取中间代码并将其转换为机器语言。
  • 数据流引擎:此工具有助于代码优化。在此,信息由用户提供,并比较中间代码以分析任何关系。它也称为数据流分析。它可以帮助您找出值如何从程序的一部分传输到另一部分。

为什么要使用编译器?

  • 编译器验证整个程序,因此没有语法或语义错误。
  • 可执行文件经过编译器的优化,执行速度更快。
  • 允许您在内存中创建内部结构。
  • 无需在构建该程序的同一台机器上执行该程序。
  • 将整个程序翻译成其他语言。
  • 在磁盘上生成文件。
  • 将文件链接为可执行格式。
  • 检查语法错误和数据类型。
  • 帮助您增强对语言语义的理解。
  • 有助于处理语言性能问题。
  • 一个非平凡编程项目的机会。
  • 用于构建编译器的技术也可用于其他目的。

编译器的应用

  • 编译器设计有助于高级编程语言的全面实现。
  • 电脑端支持优化 Archi结构并行性。
  • 机器新内存层次的设计。
  • 广泛用于翻译程序。
  • 与其他软件生产力工具一起使用。

总结

  • 编译器是一种计算机程序,它可以帮助您将用高级语言编写的源代码转换为低级机器语言。
  • 正确性、编译速度、保留代码的正确含义是编译器设计的一些重要特性。
  • 编译器分为三个部分:1)单遍编译器,2)双遍编译器,3)多遍编译器。
  • “编译器”这个词最早由 Grace Murray Hopper 于 1950 世纪 XNUMX 年代初使用。
  • 语言处理系统的步骤包括:预处理器、解释器、汇编器、链接器/加载器。
  • 重要的编译器构造工具有1)扫描器生成器,2)语法-3)定向翻译引擎,4)解析器生成器,5)自动代码生成器。
  • 编译器的主要任务是验证整个程序,以确保不存在语法或语义错误。