2

可能重复:
引导语言

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

4

3 回答 3

3

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

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

这确保了如果你有n语言和m架构,你只需要n+m组件,而不是n*m每个语言/机器都有一个编译器

于 2013-02-01T18:48:04.067 回答
1

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

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

于 2013-02-01T18:53:13.487 回答
1

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

如果您想为语言 X 编写语言 X 的编译器那么可以这样

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

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

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

这称为引导

于 2013-02-01T18:56:56.920 回答