如何用该语言编写语言编译器?

fro*_*die 20 compiler-construction recursion bootstrapping

可能重复:
在"本身"中实现编译器
引导语言

如何使用与编写该编译器的语言相同的语言编写编译器?那不是那种递归吗?

编辑:这可能会被删除,但否则......:

如何引导:

为什么要引导:

Mic*_*zek 30

通常,编译器的第一个版本是用不同的语言编写的,然后每个后续版本都用该语言编写,并使用旧版本编译.一旦您x使用版本编译版本x-1,您就可以使用新构建的版本x重新编译自己,利用版本引入的任何新优化; GCC以这种方式发布它的版本

  • @froadie你的意思是为什么不编译版本1的每个版本?通常,新版本的编译器会生成比以前版本更好的机器代码,因此使用最新版本构建将使编译器本身尽可能快速/高效.此外,如果语言本身正在发生变化,并且您希望在编译器的源代码中使用这些较新的功能,则需要使用更新的版本进行构建 (4认同)

pli*_*nth 13

它是.您通常需要从另一种语言编译或解释的语言的引导版本.

几年前,我读了一篇Pascal编译器作为研究生项目编写的历史.它用Pascal编写,并使用系统内置的Pascal编译器进行编译.最终,它足以取代系统内置的Pascal编译器.不幸的是,他们在代码生成中发现了一个错误,但代码生成器的修复程序触发了编译器中的错误,生成了错误的编译器.要修复它,需要从已安装的编译器手动修补二进制文件,然后将修补程序应用于源代码以替换自身.


eem*_*emz 6

对于第一个版本来说,这只是一个问题.一旦我有V1.0的编译器工作,我可以用我的语言编写V2.0并使用V1.0编译器进行编译.然后我可以编写V3.0并使用V2.0编译,使用V3.0编译V4.0等.