【问题标题】:Dynamically creating .class file动态创建 .class 文件
【发布时间】:2013-06-19 14:35:56
【问题描述】:

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

x = 7 打印 + * x 2 5

变成

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

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

【问题讨论】:

标签: java bytecode


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您是否在您的框架中使用其他库,例如 ASM?
    • 不,我有自己的 TypeBuilder 和 CodeGenerator。对于这个特定的框架,我没有第三方依赖项。我发现 ASM 使用起来非常麻烦。
    猜你喜欢
    • 2023-04-03
    • 2012-12-29
    • 1970-01-01
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    相关资源
    最近更新 更多