2013-10-28 47 views
3

我正在学习编程的细节,现在我正在学习编译器。我发现自己处于鸡和蛋的情况。我们需要一个编译器来运行代码或程序,而其自身中的编译器就是一个程序,那么使用哪种语言编写编译器?哪种语言用于构建编译器?

谢谢你提前

+0

[第一个编译器是如何编写的?](http://stackoverflow.com/questions/1653649/how-was-the-first-compiler-written) – nawfal

回答

0

第一个编译器,用组装建造,但在那之后,组装的编译器可以用于编译不同语言的其他编译器。我依稀记得C编程语言提到C编译器是在编写汇编编译器后用C编写的。 因此,现在编译器可以用任何语言编写,因为我们有编译器将这些编译器转换为机器指令。最后,它的所有内存,所有的东西都变成二元的。

0

CPU执行所谓的机器码。机器代码(或汇编)有不同的变体,指令集(语言)取决于CPU体系结构。

当然,任何为新的全新指令集编写的程序都需要直接在汇编中编写,编译器也是如此。每个指令集的初始编译器必须以汇编形式编写。当你有一个针对该指令集的工作编译器时,可以用C重写编译器或者汇编编译器支持的任何语言。

GNU编译器集合(GCC)可以说是迄今为止使用最多的编译器之一,它是用C++编写的。

总之,第一个用于新指令集的编译器是用汇编写的。

编辑:你的问题让我好奇如何实现一种新语言的编译器。原来这是通过一个叫做bootstrapping的过程完成的,我自己还没完全理解它,但总的想法是用语言本身为你的新语言编写编译器。我知道这有点奇怪。我发现了一些相当不错的信息。

谢谢你的方式一个非常好的问题。

1

我发现我的自我在鸡和鸡蛋的情况。我们需要一个编译器来运行一个代码或一个程序来运行 。

这个逻辑实际上并不正确。您不需要编译器来运行代码或程序。编译器用于将人类可读代码转换为可执行代码。创建可执行代码有多种方法,您不必从人类可读的源代码开始。

使用哪种语言编写编译器?

几乎任何语言都可以用来创建编译器。编译器可以输出汇编代码,然后汇编成可执行文件,直接创建可执行文件,或者解释或转换为可执行文件的中间语言。另外,您可以使用另一种语言编写语言的第一个编译器,然后通过引导,以新语言创建语言的编译器。

请参见:Implementing a compiler in “itself”

欲了解更多详情,请参阅Basics of Compiler Design,特别是第13章:自举一个编译器。