是否有Java库从AST生成类文件?

这个页面描述了我如何使用javac中的代码生成器来生成代码,因为我可以构建一个AST(使用我编写的单独的解析器)。 该技术涉及编辑javac的源代码以基本绕过Java解析器,以便可以将他/她自己的AST提供给代码生成器。 这可能有用,但我希望以稍微清洁的方式做到这一点。 我想在我的项目中包含生成javac的代码作为库的代码,这样我就可以用它来生成代码,而不会带来javac源代码的其余部分。

有没有办法用javac做到这一点,或者是否有更好的库?

此外,随时更改问题的标题。 我想不出更好的一个,但它有点含糊不清。 如果你建议编辑一个更好的标题,我会接受它。

我想您可能感兴趣的是像BCEL这样的Java库(ByteCode工程库)

当我在编译器构造上学习时,我回过头来玩它,基本上,它有一个很好的包装器来生成常量池,将命名的字节码指令插入到方法中等等,然后当你完成后,你可以加载类在运行时使用自定义类加载器,或以正常方式将其写入文件。

使用BCEL,从语法树到java字节码应该相对容易,尽管有点单调乏味,但是在某些情况下,您可能只想使用BCEL生成原始字节码而不构建树。

另一个很酷的框架是ASM ,一个字节码分析和操作框架。

如果您不想使用框架,截至目前(2014年),则无法使用com.sun.source.tree。*的任意表示从树生成字节码,如此处所述。