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

时间:2012-07-26 20:32:38

标签: java parsing code-generation javac

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

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

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

2 个答案:

答案 0 :(得分:4)

我认为您可能感兴趣的是像BCEL这样的Java库(ByteCode Engineering Library)

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

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

答案 1 :(得分:1)

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

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