我有一个源自ANTLR Parser Generator for Java的AST.我想要做的是以某种方式构建源代码的控制流图,其中每个语句或表达式是唯一的节点.我知道必须有一些这种识别的递归,我想知道你会建议什么是最好的选择,如果ANTLR有一个工具集我可以用于这项工作.干杯,克里斯
编辑 - 我主要关心的是从AST获得控制流图(CFG).这样我就可以获得源代码的树形表示.为了澄清,源代码和实现语言都是Java.
我已经实现了这个图:
ListenableDirectedWeightedGraph<String, MyWeightedEdge> g =
new ListenableDirectedWeightedGraph<String, MyWeightedEdge>(MyWeightedEdge.class);
Run Code Online (Sandbox Code Playgroud)
为了表明班级名称的内容; 一个简单的可听的定向加权图.我想改变边缘的标签而不是格式
return "(" + source + " : " + target + ")";
Run Code Online (Sandbox Code Playgroud)
我希望它能显示边缘的重量.我意识到节点上的所有动作,例如getEdgesWeight()
方法,都是从图形而不是边缘委托的.如何显示边缘的重量?我是否必须以某种方式将图表传递到边缘?
任何帮助表示赞赏.
我想在一个类中进行以下导入.
import org.eclipse.jdt.core.dom.*;
import org.eclipse.jdt.core.compiler.CharOperation;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.internal.compiler.ClassFile;
import org.eclipse.jdt.internal.compiler.CompilationResult;
import org.eclipse.jdt.internal.compiler.Compiler;
import org.eclipse.jdt.internal.compiler.DefaultErrorHandlingPolicies;
import org.eclipse.jdt.internal.compiler.ICompilerRequestor;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFileReader;
import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException;
import org.eclipse.jdt.internal.compiler.env.ICompilationUnit;
import org.eclipse.jdt.internal.compiler.env.INameEnvironment;
import org.eclipse.jdt.internal.compiler.env.NameEnvironmentAnswer;
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
import org.eclipse.jdt.internal.compiler.problem.DefaultProblemFactory;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.text.edits.TextEdit;
Run Code Online (Sandbox Code Playgroud)
如何在Eclipse中导入JDT?干杯.