你们知道JRuby和Jython使用什么解析器来生成JVM字节码吗?是ANTLR还是JavaCC,还是他们在实现中使用了其他解析器?
答案 0 :(得分:5)
JRuby似乎已经回答了,所以我将添加我对Jython的了解。
Jython使用ANTLRv3生成的解析器生成符合您可以从编译函数中构建的Pythons获取的规范的规范的AST(如果您要求AST Jython将在此阶段之后返回)。然后通过自定义编译器提供,该编译器使用ASM Java字节码生成库生成Java字节码,然后加载并执行。 Jython没有(与JRuby相反)有一个初始解释阶段,但直接编译为Java字节码,让JVM从那里处理它。因此,当人们将Jython描述为用Java编写的Python 解释器时,我从未喜欢它,我更愿意将其称为Java 实现 for Java。
答案 1 :(得分:2)
JRuby使用自定义编译器根据需要编译Ruby函数。这是用Java编写的。这个描述非常好in this blog post。
Jython可能有类似的方法。谷歌搜索没有引导我找到任何一个好的文档来描述事情是如何完成的,但有几个文档提到Jython是一个用Java编写的Python解释器,向我表明他们通过编译器编译Java代码来创建字节码。