【问题标题】:Interpreting Java and converting it to another language解释 Java 并将其转换为另一种语言
【发布时间】:2013-01-16 10:33:07
【问题描述】:

我使用一种类似于 JavaScript 的语言来进行销售点设备编程。这种语言真的很糟糕,我正在尝试用 Java 构建某种框架,将 Java 代码“转换”成这种语言。

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

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

【问题讨论】:

  • 你用的是什么语言?
  • 您肯定不会使用常规语言解析上下文无关语言。你需要一个递归下降解析器。
  • 也许考虑使用 Parboiled (github.com/sirthias/parboiled) 来构建 AST 并对其进行操作?
  • 它被称为“WMLScript”。它类似于 JavaScript,但实现起来很糟糕。感谢您的提示。我会调查的。
  • 虽然这不适用于 Java,但该机制可以帮助您了解需要做什么。见:trelford.com/blog/post/fs2js.aspx

标签: java compiler-construction interpreter bytecode


【解决方案1】:

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

拥有 AST 后,您的问题将是遍历树并生成目标代码。祝你好运。

【讨论】:

  • 我认为这就是我所需要的。谢谢!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我自己从来没有做过任何事情,但是您可以查看altjs.org 中列出的框架之一,特别是在 Java 端口部分下,然后查看其中一个框架并将它们修改为您的具体需求。

    【讨论】:

      【解决方案4】:

      至少有三种方式:

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

      b) 将字节码编译为 JS。我至少见过一次这样的尝试,结果 JS 很丑,而且速度不是很快。但是这种方法可以有很好的性能(嗯,它可能会导致使用HashMap而不是JS对象等等)。最大的问题是恕我直言,while/if 重建。

      编辑:好的,可能不是那么慢,但它很丑陋并且包含像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/

      【讨论】:

        猜你喜欢
        • 2018-02-15
        • 1970-01-01
        • 2012-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-12-27
        • 2015-10-31
        • 1970-01-01
        • 2015-10-16
        相关资源
        最近更新 更多