编译编译器



可能的重复项:
引导语言

编译器本身是用高级语言编写的。那么计算机是如何理解编译器的呢?他们将HLL转换为机器级代码,但计算机如何理解它们本身?

一个编译器是用机器代码编写的。其余的可以只使用它或其他已经编译的编译器(包括自身的未来版本,可以使用已经存在的版本来重新编译新版本。

附言请注意,大多数编译器不会将"高级代码"编译为机器代码,它们有 2 个组件,前端和后端。前端将代码编译为中间语言,后端将中间语言编译为机器代码。

这可确保如果您有n语言和m体系结构,则只需要n+m组件,而不需要n*m每种语言/机器都有一个编译器

一个版本需要用汇编代码编写。然后,您可以使用此编译器编译其他程序,包括其他编译器。

然而,一篇有趣的论文/观察是编译器可以学习。也就是说,您可以删除部分源代码,但仍保持功能;)一个例子是n字符的分析。下面的论文很好地展示了这一点!http://cm.bell-labs.com/who/ken/trust.html

用语言 Y 编写的语言 X 的编译器(

X 和 Y 可能是,也可能不是同一种语言)必须使用语言 Y 的编译器编译成机器代码(或者如果 Y 是要解释,那么编译器必须由 Y 解释器执行)。真的没有办法解决这个问题。除非 Y 是程序集。即你在汇编中编写 X 编译器。

如果你想用语言 X 语言 X编写编译器,那么你可以这样做:

  1. 您用另一种语言(例如 Y)为 X 语言编写编译器,该编译器已存在(或在汇编中)

  2. 然后用 X 编写 X 编译器
  3. ,并使用用语言 Y 编写的 X 编译器(您在步骤 1 中编写的编译器)编译它。

  4. 如果新的 X 编译器足够完整,它应该能够编译自己的副本(因为它们毕竟是 X 源)。

这称为引导

最新更新