📜  单遍,两遍和多遍编译器

📅  最后修改于: 2021-06-28 07:05:14             🧑  作者: Mango

我们已经知道编译器设计的所有阶段,现在知道编译器合格。编译器遍历是指遍历整个程序的编译器遍历。编译器遍历有两种类型:单遍编译器和两遍编译器或多遍编译器。这些解释如下。

1.单遍编译器:
如果我们结合或组所有已知的单通编译器在单一模块中的编译器设计的阶段。

在上图中,所有6个阶段都分组在一个模块中,单遍编译器的一些要点如下:

  1. 单遍/单遍编译器是一种编译器,它可以准确地通过每个编译单元的一部分。
  2. 单遍编译器比多遍编译器更快,更小。
  3. 单遍编译器的一个缺点是与多遍编译器相比效率较低。
  4. 单遍编译器是只对输入进行一次处理的编译器,因此直接从词法分析到代码生成器,然后再返回以进行下一次读取。

注意:单遍编译器几乎从未做过,早期的Pascal编译器只是作为介绍来做的。

单遍编译器的问题:

  1. 由于表达式的上下文有限,我们无法很好地进行优化。
  2. 由于我们无法备份和处理,因此需要再次限制和简化语法。
  3. 诸如bash / sh / tcsh之类的命令解释器可以被认为是单遍编译器,但它们在处理后也立即执行入口。

2.两遍编译器或多遍编译器:
两次通过/多次通过编译器是一种编译器,可以多次处理程序的源代码或抽象语法树。在多遍编译器中,我们将阶段分为两步:

  1. 首次通过:是指
    • (一种)。前端
    • (b)。分析部分
    • (C)。平台无关

    在第一阶段中,包括的阶段包括词法分析器,语法分析器,语义分析器,中间代码生成器,作为前端和分析部分,这意味着所有阶段都分析高级语言并将其转换为三个地址代码,并且第一阶段与平台无关,因为第一次通过的输出是三个地址代码,这对每个系统都有用,并且要求更改第二次通过的代码优化和代码生成器阶段。

  2. 第二次通过:是指
    • (一种)。后端
    • (b)。综合部分
    • (C)。平台相关

    在第二阶段,包括阶段,如代码优化和代码生成器作为后端,合成部分指将输入作为三个地址代码并将其转换为低级语言/汇编语言,而第二阶段则取决于平台,因为最终阶段典型的编译器将程序的中间表示形式转换为取决于系统的可执行指令集。

使用多遍编译器,我们可以解决以下两个基本问题:

  1. 如果我们要为同一台机器设计用于不同编程语言的编译器。在这种情况下,对于每种编程语言,都要求对每种语言进行前端/第一次通过,而仅对后端/第二次进行以下操作:

  2. 如果我们要为不同的机器/系统为相同的编程语言设计一个编译器。在这种情况下,我们为不同的机器/系统创建不同的后端,并且为相同的编程语言仅创建一个前端,如下所示:

    单遍和多遍编译器之间的区别:

    Parameters Single pass multi Pass
    Speed Fast Slow
    Memory More Less
    Time Less More
    Portability No Yes