解释Java并将其转换为另一种语言

时间:2013-01-16 10:33:08

标签: java compiler-construction interpreter bytecode

我使用类似于JavaScript的语言,用于销售点设备编程。这种语言确实很简单,我正在尝试用Java构建某种框架,将Java代码“转换”成这种语言。

我使用一些Regex并直接解析了Java文件。现在我发现这可能不是正确/更好的方式,我正在寻找替代方案。有没有工具可以帮助我这样做?

我认为我应该使用一些高级反射实用程序,如ASM(http://asm.ow2.org/index.html)。性能并不重要,因此可能就是这样。 你觉得怎么样?

4 个答案:

答案 0 :(得分:4)

ANTLR是一个非常好的解析器生成器。我会调查一下。它有一个Java语法已经可用;我不确定它是Java 5,6还是7(我猜它是5)。

一旦你有了AST,你的问题就是走在树上并生成目标代码。祝你好运。

答案 1 :(得分:1)

我建议使用JavaCC或类似的工具Java grammar description解析Java语法很久以前。它可以用来编写编译器,所以可能也可以用来编写转换器。正则表达式在解析编程语言方面不是很好。

答案 2 :(得分:0)

我自己从未做过任何事情,但您可以查看altjs.org中列出的框架之一,特别是在Java Ports部分下,并查看其中一个框架并修改它们满足您的特定需求。

答案 3 :(得分:0)

至少有三种方式:

a)解释字节码。 JS中有一些现有的解释器,例如DoppioVM。它们可能非常慢。

b)将字节码编译为JS。我已经看过至少一次这样的尝试,结果JS很难看,也不是很快。但是这种方法可以有很好的性能(好吧,它可能导致使用HashMap而不是JS对象等)。最重要的问题是恕我直言,如果/重建。

编辑:好的,可能不是那么慢,但它很难看并且包含像j2js.invokeStatic("j2js.client.Engine", "getEngine()j2js.client.Engine", null);这样的垃圾。一个编译器是https://github.com/decatur/j2js-compiler

c)将Java编译为JS。您可以尝试使用Google Web Toolkit或http://j2s.sourceforge.net/