3

我已经定义了一个语法,通过它我产生了一系列的抽象语法树。例如

x = 7
打印 + * x 2 5

变成

    (分配)
    / \
   × 7

    (打印)
        |
       (+)
      / \
    (*) 5
   / \
  × 2

这些树由Node表示值和操作的各种类组成。现在,这些树很容易解释,但我的目标是生成代表这些进程的 Java 字节码。我的问题是,解决这个问题的最佳方法是什么?我应该直接将各种字节码指令写入.class 文件,还是有一些库或接口可以帮助解决这类问题?

4

2 回答 2

3

我编写了一个框架,让您可以使用声明性表达式树编写代码,然后将它们编译为字节码。虽然我开发它是为了简化运行时代码的生成,但它也可以很容易地用作一种编译器后端,例如,通过将您的语法树转换为我的一个表达式树。

至少,您可能会从我的编译器中收集到一些有用的信息,并可能使用我的低级代码生成框架。

我的存储库在这里。表达式树库是procyon-expressions.

于 2013-06-23T11:25:04.107 回答
3

答案是肯定的。ASM 和 BCEL 是两个 Java 库,旨在帮助生成类文件的运行时。

于 2013-06-22T16:44:46.513 回答