4

我正在尝试学习编程的细节,而我现在正在学习编译器。我发现自己处于先有鸡还是先有蛋的境地。我们需要一个编译器来运行一个代码或者一个程序,而编译器本身就是一个程序,那么用什么语言来编写编译器呢?

先感谢您

4

4 回答 4

1

我发现自己处于先有鸡还是先有蛋的境地。我们需要一个编译器来运行代码或程序。

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

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

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

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

请参阅:在“自身”中实现编译器</a>

有关更多详细信息,请参阅编译器设计基础,特别是第 13 章:引导编译器。

于 2013-10-28T23:02:33.573 回答
0

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

http://en.wikipedia.org/wiki/History_of_compiler_construction

于 2013-10-28T22:43:06.483 回答
0

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

于 2013-10-28T22:49:36.050 回答
0

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

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

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

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

编辑:您的问题让我对如何为新语言实现编译器感到好奇。原来这是通过一个称为引导的过程完成的,我自己还没有完全理解它,但总体思路是用语言本身为你的新语言编写编译器。我知道这有点奇怪。我发现了一些非常好的信息。

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

于 2013-10-28T22:49:36.377 回答