This page描述了如何在javac中使用代码生成器来生成代码,因为我可以构建一个AST(使用我编写的单独的解析器)。该技术涉及编辑javac的源代码以基本绕过Java解析器,以便可以将他/她自己的AST提供给代码生成器。这可能有用,但我希望以稍微清洁的方式做到这一点。我想在我的项目中将生成javac部分的代码作为库包含在内,这样我就可以用它来生成代码,而不会带来javac源代码的其余部分。
有没有办法用javac做到这一点,还是有更好的库?
此外,随时更改问题的标题。我想不出更好的一个,但它有点含糊不清。如果您建议编辑更好的标题,我会接受它。
答案 0 :(得分:4)
我认为您可能感兴趣的是像BCEL这样的Java库(ByteCode Engineering Library)
当我在编译器构造上学习时,我回想起它,基本上,它有一个很好的包装器来生成常量池,将命名的字节码指令插入到方法中等等,然后当你完成时,你可以使用自定义类加载器在运行时加载类,或以正常方式将其写入文件。
使用BCEL,从语法树到java字节码应该相对容易,虽然有点单调乏味,但您可能只想使用BCEL来生成原始字节码,而在某些情况下也不需要构建树。
答案 1 :(得分:1)
另一个很酷的框架是ASM,一个字节码分析和操作框架。
如果您不想使用框架,截至目前(2014年),则无法使用com.sun.source.tree。*的任意表示从树生成字节码,如所述{{3 }}