用哪种语言构建编译器?

时间:2013-10-28 22:37:17

标签: compiler-construction

我正在努力学习编程的细节,现在我正在学习编译器。我发现自己处于鸡蛋和鸡蛋状态。我们需要一个编译器来运行代码或程序,其自身的编译器是一个程序,然后用哪种语言来编写编译器?

提前谢谢

4 个答案:

答案 0 :(得分:1)

  

我发现自己处于鸡蛋和鸡蛋状态。我们需要一个编译器   运行代码或程序。

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

  

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

几乎任何语言都可用于创建编译器。编译器可以输出汇编代码,然后汇编成可执行文件,直接创建可执行文件,或者解释或转换为可执行文件的中间语言。

此外,您可以为另一种语言的语言编写第一个编译器,然后通过引导,为新语言的语言创建编译器。

请参阅:Implementing a compiler in “itself”

有关更多详细信息,请参阅Basics of Compiler Design,特别是第13章:引导编译器。

答案 1 :(得分:0)

第一批编译器是用汇编语言编写的。

请参阅http://en.wikipedia.org/wiki/History_of_compiler_construction

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

当然,为新的全新指令集编写的任何程序都需要直接在汇编中编写,编译器也是如此。每个指令集的初始编译器必须以汇编语言编写。如果您有一个适用于该指令集的编译器,则可以用C语言重写编译器,或者汇编编译器支持的语言。

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

简而言之,新指令集的第一个编译器是用汇编语言编写的。

编辑:您的问题让我对如何为新语言实现编译器感到好奇。事实证明这是通过一个名为bootstrapping的过程完成的,我自己还没有完全理解它,但一般的想法是用语言本身为你的新语言编写编译器。我知道这有点奇怪。我发现了一些非常好的信息。

顺便说一下,谢谢你提出一个非常好的问题。