引导程序是一个过程,在该过程中,使用简单的语言来翻译更复杂的程序,而该程序又可以处理更复杂的程序。这个复杂的程序可以进一步处理甚至更复杂的程序,等等。
用任何高级语言编写编译器都是一个复杂的过程。从头开始编写编译器需要花费大量时间。因此,在某些阶段,使用简单的语言来生成目标代码。为了清楚地了解自举技术,请考虑以下情形。
假设我们要为新语言X编写交叉编译器。此编译器的实现语言为Y,生成的目标代码为语言Z。即,我们创建XYZ。现在,如果现有编译器Y在机器M上运行并为M生成代码,则将其表示为YMM。现在,如果我们使用YMM运行XYZ,那么我们将获得编译器XMZ。这意味着源语言X的编译器会生成语言Z的目标代码,并在机器M上运行。
下图说明了上述情况。
例子:
我们可以创建许多不同形式的编译器。现在我们将生成。
采用C语言并生成汇编语言作为输出的编译器,并提供汇编语言机器。
- 步骤1:首先,我们用汇编语言为一小部分C编写一个编译器。
- 步骤2:然后使用C的小子集,即C0,为源语言c编写编译器。
- 步骤3:最后,我们编译第二个编译器。使用编译器1编译编译器2。
- 步骤4:因此,我们得到了用ASM编写的编译器,该编译器编译C并在ASM中生成代码。