Compiler construction 使用哪种语言构建编译器?

Compiler construction 使用哪种语言构建编译器?,compiler-construction,Compiler Construction,我正在努力学习编程的细节,现在我正在学习编译器。我发现自己处于一种鸡和蛋的境地。我们需要一个编译器来运行代码或程序,而编译器本身就是一个程序,那么用哪种语言来编写编译器呢 提前感谢第一批编译器是用汇编语言编写的 请参见最早的编译器是用汇编构建的,但此后,汇编编译器可用于以不同语言编译其他编译器。我模糊地记得C编程语言提到C编译器是在汇编编译器编写之后用C编写的。 因此,现在编译器可以用任何语言编写,因为我们有编译器可以将这些编译器转换成机器指令。最后,它的所有内存都是二进制的。CPU执行所谓的机

我正在努力学习编程的细节,现在我正在学习编译器。我发现自己处于一种鸡和蛋的境地。我们需要一个编译器来运行代码或程序,而编译器本身就是一个程序,那么用哪种语言来编写编译器呢


提前感谢

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


请参见

最早的编译器是用汇编构建的,但此后,汇编编译器可用于以不同语言编译其他编译器。我模糊地记得C编程语言提到C编译器是在汇编编译器编写之后用C编写的。
因此,现在编译器可以用任何语言编写,因为我们有编译器可以将这些编译器转换成机器指令。最后,它的所有内存都是二进制的。CPU执行所谓的机器代码。机器代码(或汇编)有不同的变体,指令集(语言)取决于CPU体系结构

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

<> > GNU编译器集合(GCC)是目前使用最多的编译器之一,它是用C++编写的。 简而言之,新指令集的第一个编译器是用汇编语言编写的

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

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

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

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

哪种语言用于编写编译器

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

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

见:

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