我已经定义了一个语法,通过它我产生了一系列的抽象语法树。例如
x = 7 打印 + * x 2 5
变成
(分配) / \ × 7 (打印) | (+) / \ (*) 5 / \ × 2
这些树由Node
表示值和操作的各种类组成。现在,这些树很容易解释,但我的目标是生成代表这些进程的 Java 字节码。我的问题是,解决这个问题的最佳方法是什么?我应该直接将各种字节码指令写入.class 文件,还是有一些库或接口可以帮助解决这类问题?
我编写了一个框架,让您可以使用声明性表达式树编写代码,然后将它们编译为字节码。虽然我开发它是为了简化运行时代码的生成,但它也可以很容易地用作一种编译器后端,例如,通过将您的语法树转换为我的一个表达式树。
至少,您可能会从我的编译器中收集到一些有用的信息,并可能使用我的低级代码生成框架。
我的存储库在这里。表达式树库是procyon-expressions
.
答案是肯定的。ASM 和 BCEL 是两个 Java 库,旨在帮助生成类文件的运行时。