Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有Java库从AST生成类文件?_Java_Parsing_Code Generation_Javac - Fatal编程技术网

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

是否有Java库从AST生成类文件?,java,parsing,code-generation,javac,Java,Parsing,Code Generation,Javac,描述如何使用javac中的代码生成器生成代码,因为我可以构建AST(使用我编写的单独解析器)。这项技术涉及编辑javac的源代码,基本上绕过Java解析器,这样就可以向代码生成器提供自己的AST。这可能行得通,但我希望用一种稍微干净一点的方式。我想将javac的代码生成部分作为一个库包含在我的项目中,这样我就可以使用它来生成代码,而不必附带javac的其他源代码 有没有办法用javac实现这一点,或者有没有更好的库 另外,请随意更改问题的标题。我想不出更好的了,但有点模棱两可。如果你建议编辑一个

描述如何使用javac中的代码生成器生成代码,因为我可以构建AST(使用我编写的单独解析器)。这项技术涉及编辑javac的源代码,基本上绕过Java解析器,这样就可以向代码生成器提供自己的AST。这可能行得通,但我希望用一种稍微干净一点的方式。我想将javac的代码生成部分作为一个库包含在我的项目中,这样我就可以使用它来生成代码,而不必附带javac的其他源代码

有没有办法用javac实现这一点,或者有没有更好的库


另外,请随意更改问题的标题。我想不出更好的了,但有点模棱两可。如果你建议编辑一个更好的标题,我会接受的。

我想你可能会感兴趣的是一个类似java的库(字节码工程库)

当我在编译器构造中使用一个类时,我对它进行了反复研究,基本上,它有一个很好的包装器,用于生成常量池,将命名字节码指令插入到方法中等等,然后完成后,您可以在运行时用自定义类加载器加载该类,或者以正常方式将其写入文件

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

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


如果您不想使用框架,从现在(2014年)开始,就不可能使用com.sun.source.tree的任意表示从树中生成字节码。*如前所述。

这是您自己的AST,一个通用的中间AST,还是javac已经使用的AST?(那部分我不太清楚。)我自己的AST。我正在用我编写的解析器生成它。(很抱歉模棱两可)如果是您自己的AST,您必须首先将其转换为javac使用的AST格式。@IraBaxter是的,但这应该不会太难。我有自己的AST类,与javac使用的类非常相似,因此切换到javac是可以管理的。Javac的源代码有点乱。