可能重复:
引导语言
编译器本身是用高级语言编写的。那么计算机是如何理解编译器的呢?它们将 HLL 转换为机器级代码,但是计算机如何理解它们本身呢?
可能重复:
引导语言
编译器本身是用高级语言编写的。那么计算机是如何理解编译器的呢?它们将 HLL 转换为机器级代码,但是计算机如何理解它们本身呢?
一个版本需要用汇编代码编写。然后,您可以使用此编译器编译其他程序,包括其他编译器。
然而,一篇有趣的论文/观察是编译器可以学习. 也就是说,您可以删除部分源代码并仍然保留功能;)一个例子是\n
字符的解析。下面的论文很好地展示了这一点!http://cm.bell-labs.com/who/ken/trust.html
用语言Y编写的语言X的编译器( X和Y可能是,也可能不是同一种语言)必须用语言Y的编译器编译成机器代码(或者如果Y是要被解释的,那么编译器必须由Y解释器执行)。真的没有办法解决这个问题。除非Y是汇编。即你在汇编中编写X编译器。
如果您想为语言 X 编写语言 X 的编译器,那么您可以这样做:
你用另一种语言为X语言编写编译器,比如Y,编译器已经存在(或在汇编中)
然后你用 X 编写你的X编译器,并用用语言Y编写的X编译器(你在步骤 1 中编写的那个)编译它。
如果新的X编译器足够完整,它应该能够编译自己的副本(因为它们毕竟是X源)。
这称为引导。