将 AST 节点字符串转换为 groovy 代码
Convert AST nodes string to groovy code
我想使用 AstBuilder 创建 groovy 代码,但之后,我想看看实际的 groovy 代码会是什么样子。
是否可以像这样转换 AST 节点的 toString 输出:
org.codehaus.groovy.ast.stmt.BlockStatement@5b7a5baa[
org.codehaus.groovy.ast.stmt.ExpressionStatement@776aec5c[
expression:org.codehaus.groovy.ast.expr.DeclarationExpression@1d296da[
org.codehaus.groovy.ast.expr.VariableExpression@7c7a06ec[
variable: cl]("=" at 2:17: "=" )org.codehaus.groovy.ast.expr.ClosureExpression@13c9d689[
]{ org.codehaus.groovy.ast.stmt.BlockStatement@75d4a5c2[
] }]]]
回到groovy代码?
您可以使用我在处理 AST 转换时使用的最喜欢的代码片段:
java.io.StringWriter writer = new java.io.StringWriter();
groovy.inspect.swingui.AstNodeToScriptVisitor visitor = new groovy.inspect.swingui.AstNodeToScriptVisitor(writer);
visitor.visitClass(node); // replace with proper visit****
System.out.println(writer.toString());
它将提供几乎正确的 Groovy 代码。它仍然不是 100% 正确(我的意思是,如果你将它编译回来,那么它可能无法编译),但对于调试来说已经足够了。
宏中的示例Groovy:
我想使用 AstBuilder 创建 groovy 代码,但之后,我想看看实际的 groovy 代码会是什么样子。 是否可以像这样转换 AST 节点的 toString 输出:
org.codehaus.groovy.ast.stmt.BlockStatement@5b7a5baa[
org.codehaus.groovy.ast.stmt.ExpressionStatement@776aec5c[
expression:org.codehaus.groovy.ast.expr.DeclarationExpression@1d296da[
org.codehaus.groovy.ast.expr.VariableExpression@7c7a06ec[
variable: cl]("=" at 2:17: "=" )org.codehaus.groovy.ast.expr.ClosureExpression@13c9d689[
]{ org.codehaus.groovy.ast.stmt.BlockStatement@75d4a5c2[
] }]]]
回到groovy代码?
您可以使用我在处理 AST 转换时使用的最喜欢的代码片段:
java.io.StringWriter writer = new java.io.StringWriter();
groovy.inspect.swingui.AstNodeToScriptVisitor visitor = new groovy.inspect.swingui.AstNodeToScriptVisitor(writer);
visitor.visitClass(node); // replace with proper visit****
System.out.println(writer.toString());
它将提供几乎正确的 Groovy 代码。它仍然不是 100% 正确(我的意思是,如果你将它编译回来,那么它可能无法编译),但对于调试来说已经足够了。
宏中的示例Groovy: