gpt4 book ai didi

java - 从 JAVA 中提取 AST 并将 AST 打印到文件

转载 作者:行者123 更新时间:2023-11-29 05:09:57 32 4
gpt4 key购买 nike

我是 Java 编程语言的初学者。我想从 java 源代码中提取 AST 并将 AST 打印到文件或标准输出。

我按照本教程学习了如何使用 AST。 http://www.programcreek.com/2011/01/a-complete-standalone-example-of-astparser/

据此,我目前的代码如下。

import java.util.HashSet;
import java.util.Set;

import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.eclipse.jdt.core.dom.SimpleName;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;

public class Test {
public static void main(String args[]){
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setSource("public class A { int i = 9; \n int j; \n ArrayList<Integer> al = new ArrayList<Integer>();j=1000; }".toCharArray());
//parser.setSource("/*abc*/".toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
//ASTNode node = parser.createAST(null);


final CompilationUnit cu = (CompilationUnit) parser.createAST(null);

}
}

我尝试了以下代码片段将其打印到标准输出,但它没有给我预期的结果,

System.out.println(cu.getAST().toString());

如果有人可以帮助我将 AST 打印到文件中,那将是一个很大的帮助。

提前致谢。

最佳答案

这里是 an example of transforming the AST to JSON .您可以修改 JSONStyleASTPrinter.java文件生成 XML 而不是 JSON 等。

基于 How To Train the JDT Dragon combined.pdf 中的示例:

private void print(ASTNode node) {
List properties = node.structuralPropertiesForType();
for (Iterator iterator = properties.iterator(); iterator.hasNext();) {
Object descriptor = iterator.next();
if (descriptor instanceof SimplePropertyDescriptor) {
SimplePropertyDescriptor simple = (SimplePropertyDescriptor) descriptor;
Object value = node.getStructuralProperty(simple);
System.out.println(simple.getId() + " (" + value.toString() + ")");
} else if (descriptor instanceof ChildPropertyDescriptor) {
ChildPropertyDescriptor child = (ChildPropertyDescriptor) descriptor;
ASTNode childNode = (ASTNode) node.getStructuralProperty(child);
if (childNode != null) {
System.out.println("Child (" + child.getId() + ") {");
print(childNode);
System.out.println("}");
}
} else {
ChildListPropertyDescriptor list = (ChildListPropertyDescriptor) descriptor;
System.out.println("List (" + list.getId() + "){");
print((List) node.getStructuralProperty(list));
System.out.println("}");
}
}
}

private void print(List nodes) {
for (Iterator iterator = nodes.iterator(); iterator.hasNext();) {
print((ASTNode) iterator.next());
}
}

关于java - 从 JAVA 中提取 AST 并将 AST 打印到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962210/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com