我想创建自己的面向 JVM 的编程语言。我不确定如何做到这一点。我必须创建自己的编译器吗?是否所有的编程语言都有独特的编译器,或者是否有可以适应的现有编译器?
我找到了一些关于定位 .NET CLI 的信息。 .
我还找到了 Dragon Book关于编译器设计。
最佳答案
是的,每种语言都有自己的编译器。有几种类型的编译器可以编写,每一种都变得更加复杂并建立在前一种之上:
所有这些编译器形式通常会重用专门设计用于帮助不同编译阶段的工具。简要地是:
解析 : 我会推荐 parboiled对于 Java。较旧的工具曾经是 lex 和 yacc 的变体,这两个 unix 工具用于词法和语法分析阶段。 ANTLR 和 Javacc 是两个在 JVM 上运行的例子;然而,煮过的真是太棒了。
AST :我不知道这里有任何工具,可以重用来自另一种 JVM 语言(例如 javac)的模型,但是我会亲自创建它。
输出生成 : 一种快速的方法是生成 Java 源代码,它有一些限制,但总体上是一种很好的试水方法。当/如果您决定继续生成 JVM 字节码,可以在 here 中找到一组帮助程序库.然而,在尝试这条路线之前,有很多关于 JVM 的知识需要了解,Oracle 的 JVM 规范/书籍是必读的。
对于一般知识,llvm tutorial非常好,它很短而且写得很好。我知道您说过要以 JVM 为目标,但是本教程涵盖的几乎所有内容都将帮助您理解所需的部分。
我建议遵循教程,并使用 Java 重写它。它的步骤非常合乎逻辑。本质上,人们会为一种非常简单的语言编写一个识别器,例如仅“1+2”。然后为该语言编写一个解释器。这将是一个非常合理的停止点,许多语言都被解释过; Java 也是这样开始的。可选地,然后可以继续发出目标输出,首先说 Java 源代码。用于此的代码将相当短,并且比尝试首先完整地编写任何单个层会给您更快的反馈。如果你沿着这条路走下去,就有很多机会消耗你的编码时间。
关于compiler-construction - 如何创建自己的面向 JVM 的编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25999540/