compiler-construction - 引导仍然需要外部支持

标签 compiler-construction bootstrapping

我听说过引导语言的想法,即为语言本身编写编译器/解释器。我想知道这是如何完成的,环顾四周,看到有人说这只能由任何一个来完成

  • 用不同的语言编写初始编译器。
  • 在Assembly 中手工编写初始编译器,这似乎是第一个
  • 的特例。

    对我来说,从它们都需要外部支持的意义上说,这些似乎都不是真正引导一种语言。有没有办法用自己的语言实际编写编译器?

    最佳答案

    Is there a way to actually write a compiler in its own language?



    你必须有一些现有的语言来编写你的新编译器。如果你正在编写一个新的,比如 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/15665308/

    相关文章:

    .net - 使用WIX self 更新应用程序安装?

    scala - 了解 Play! 的请求生命周期应用

    c - 无操作系统执行

    java - 使用十六进制表示法的 byte[] 数组的文字语法..?

    java - 是否可以在没有外部程序的情况下用 Java 编译成机器码?

    java - 为什么带有内部类的 Java 代码会生成第三个 SomeClass$1.class 文件?

    algorithm - 使用子树查找相似的代码段

    c++11 std::unique_ptr 错误 cmake 3.11.3 bootstrap

    grails - 在Grails中的应用程序启动时添加管理员用户

    c++ - 没有opengl的QT项目