可能重复: 引导语言
编译器本身是用高级语言编写的。那么计算机如何理解编译器呢?它们将HLLs转换成机器级代码,但是计算机如何理解它们呢?
发布于 2013-02-01 18:48:04
一个编译器是用机器代码编写的。其余的可以只使用它或其他已经编译的编译器(包括它本身的未来版本,它可以使用已经存在的版本重新编译新版本)。
P.S.注意到大多数编译器不会将“高级代码”编译成机器代码,它们有两个组件,前端和后端。前端将代码编译成中间中间语言,后端将中间语言编译成机器代码。
这确保了,如果您有n
语言和m
体系结构,您只需要n+m
组件,而不需要n*m
,如果您有每种语言/机器的编译器。
发布于 2013-02-01 18:53:13
需要用汇编程序代码编写一个版本。然后,可以使用此编译器编译其他程序,包括其他编译器。
然而,一个有趣的论文/观察是,编译器可以学习。也就是说,您可以删除部分源代码,并且仍然保留该功能;)一个例子是\n
字符的解析。下面的文章很好地展示了这一点!http://cm.bell-labs.com/who/ken/trust.html
发布于 2013-02-01 18:56:56
语言X的编译器,用编写的语言Y (X和Y可能是,也可能不是同一种语言)必须用Y语言的编译器编译成机器代码(如果Y是要解释的,则编译器必须由Y解释器执行)。这是无法避免的,真的。除非Y是装配的。也就是说,在程序集中编写X编译器。
如果您想用语言( language X for language X)编写编译器,那么您可以这样做:
这叫做http://en.wikipedia.org/wiki/Bootstrapping_%28compilers%29。
https://stackoverflow.com/questions/14652973
复制相似问题