我听说过引导语言的想法,即为语言本身编写编译器/解释器。我想知道如何做到这一点,环顾四周,看到有人说这只能由任何一个人来完成
用另一种语言编写初始编译器。
在Assembly中手动编码初始编译器,这似乎是第一个的特殊情况
在我看来,这两者似乎都不是在引导语言,因为它们都需要外部支持。有没有办法用自己的语言实际编写编译器?
最佳答案
有没有办法用自己的语言实际编写编译器?
您必须使用某种现有语言来编写新的编译器。如果要编写新的C ++编译器,则只需用C ++编写,然后首先使用现有的编译器进行编译。另一方面,如果要为一种新语言创建编译器,我们称其为Yazzleof,则需要首先使用另一种语言编写新的编译器。通常,这将是另一种编程语言,但并非必须如此。它可以是汇编代码,也可以是机器代码。
如果您要为Yazzleof引导编译器,则通常最初不会为完整语言编写编译器。相反,您将为Yazzle-lite(Yazzleof的最小可能子集)编写编译器(至少是一个很小的子集)。然后,在Yazzle-lite中,您将编写完整语言的编译器。 (显然,这可以迭代而不是一次跳转。)因为Yazzle-lite是Yazzleof的适当子集,所以您现在有了一个可以自行编译的编译器。
关于从最低级别引导编译器(在现代计算机上基本上是十六进制编辑器)进行引导的文章非常不错,标题为“从零开始引导简单的编译器”。可以在https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html上找到。
关于compiler-construction - 自举仍然需要外部支持,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9042927/