我已经定义了一个语法,通过它我可以生成一系列抽象语法树。例如
x = 7 println + * x 2 5
变为
(assign) / \ x 7 (println) | (+) / \ (*) 5 / \ x 2
这些树由代表值和操作的各种Node
类组成。现在,这些树很容易解释,但我的目标是生成代表这些进程的Java字节码。我的问题是,最好的方法是什么?我应该简单地将各种bytecode instructions写入.class文件,还是有一些库或界面可以帮助解决这类问题?
答案 0 :(得分:3)
答案是肯定的。 ASM和BCEL是两个Java库,旨在帮助生成类文件的运行时生成。
答案 1 :(得分:3)
我编写了一个框架,允许您使用声明性表达式树编写代码,然后将它们编译为字节码。虽然我已经开发它来简化运行时代码生成,但它可以很容易地用作一种编译器后端,例如,通过将语法树翻译成我的一个表达式树。
至少,您可以从我的编译器中收集一些有用的内容,也许可以使用我的低级代码生成框架。
我的存储库是here。表达式树库是procyon-expressions
。