动态创建.class文件

时间:2013-06-22 15:57:21

标签: java bytecode

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

x = 7
println + * x 2 5

变为

    (assign)
    /      \
   x        7

    (println)
        |
       (+)
      /   \
    (*)    5
   /   \
  x     2

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

至少,您可以从我的编译器中收集一些有用的内容,也许可以使用我的低级代码生成框架。

我的存储库是here。表达式树库是procyon-expressions