1

你们知道 JRuby 和 Jython 使用什么解析器来生成 JVM 字节码吗?是 ANTLR 还是 JavaCC 还是他们在实现中使用了其他解析器?

4

2 回答 2

5

JRuby 似乎已经得到解答,所以我将添加我对 Jython 的了解。

Jython 使用ANTLRv3生成的解析器来生成符合规范的 AST,您可以从 Python 内置的编译函数中获得该规范(如果您要求 AST,Jython 将在此阶段之后返回)。然后通过使用ASM Java 字节码生成库生成 Java 字节码的自定义编译器进行馈送,然后加载并执行该字节码。Jython(与 JRuby 不同)没有初始解释阶段,而是直接编译为 Java 字节码并让 JVM 从那里处理它。因此,当人们将 Jython 描述为用 Java 编写的 Python解释器时,我从不喜欢它,我更愿意称它为 Java 的 Python实现

于 2011-07-28T21:23:04.157 回答
2

JRuby 使用自定义编译器,根据需要编译 Ruby 函数。这是用 Java 编写的。这在这篇博文中有很好的描述。

Jython 可能有类似的方法。谷歌搜索没有让我找到任何描述事情是如何完成的好的文档,但是有几个文档提到 Jython 是一个用 Java 编写的 Python 解释器,向我表明他们通过使用编译器编译 Java 代码来创建字节码。

于 2011-07-28T15:00:06.450 回答