编译器设计中的增量引导

Incremental Bootstrapping in Compiler Design

我对增量引导的性质有疑问。比方说 我想为某种语言设计一个自举编译器。所以我用其他语言为该语言 (A) 的一小部分编写了一个初始编译器。 现在我想扩展 A 成为 B(更接近所需的语言),我在 A 中为 B 编写编译器。我的问题是: B 编译器应该将 B 编译为 A 还是完全编译 B?

本质上:

或者是否还有其他完全应该发生的事情? 我已经四处张望了一段时间,但我还是有些不清楚。谢谢!

这些选项都没有意义。编译器编译成某种形式的目标代码,而不是源代码,并且一个编译器不需要另一个编译器来完成。

编译器 B 应编译为可执行目标代码。

我会让 B 编译器生成目标代码,除非有很好的理由不这样做。让 B 编译器生成 A 没有什么意义,但是如果您想要一种快速的方法来制作针对许多不同目标平台进行编译的编译器,您可以考虑将生成 C 代码作为一个中间步骤,因为这样您的编译器就可以针对任何具有一个 C 编译器。您还可以考虑生成 Java 字节码或 LLVM-IR。