Loading src/main/java/tfm/graphlib/Main.java +27 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,13 @@ package tfm.graphlib; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import edg.graphlib.Graph; import com.github.javaparser.ast.visitor.VoidVisitor; import tfm.graphlib.arcs.data.ArcData; import tfm.graphlib.graphs.CFGGraph; import tfm.graphlib.graphs.PDGGraph; import tfm.graphlib.nodes.PDGVertex; import tfm.graphlib.visitors.CFGVisitor; import tfm.graphlib.visitors.PDGVisitor; import java.io.File; import java.io.FileNotFoundException; Loading @@ -13,6 +19,25 @@ public class Main { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); CompilationUnit compilationUnit = JavaParser.parse(file); Graph graph = new Graph(); CFGGraph cfgGraph = new CFGGraph() { @Override protected String getRootNodeData() { return "Start"; } }; // PDGGraph pdgGraph = new PDGGraph() { // @Override // protected String getRootNodeData() { // return "Entry"; // } // }; VoidVisitor<Void> voidVisitor = new CFGVisitor(cfgGraph); compilationUnit.accept(voidVisitor, null); // compilationUnit.accept(new PDGVisitor(pdgGraph), pdgGraph.getRootVertex()); System.out.println(cfgGraph); System.out.println(cfgGraph.toGraphvizRepresentation()); } } src/main/java/tfm/graphlib/arcs/Arc.java 0 → 100644 +31 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs; import tfm.graphlib.arcs.data.ArcData; import tfm.graphlib.nodes.Vertex; public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, D> { @SuppressWarnings("unchecked") public Arc(Vertex from, Vertex to) { super((edg.graphlib.Vertex<String, D>) from, (edg.graphlib.Vertex<String, D>) to); } public abstract boolean isControlFlowArrow(); public abstract boolean isControlDependencyArrow(); public abstract boolean isDataDependencyArrow(); @Override public String toString() { return String.format("Arc{data: %s, %s -> %s}", getData(), getFrom(), getTo() ); } public String toGraphvizRepresentation() { return String.format("\"%s\" -> \"%s\"", getFrom().getData(), getTo().getData()); } } src/main/java/tfm/graphlib/arcs/cfg/ControlFlowArc.java 0 → 100644 +28 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.cfg; import tfm.graphlib.arcs.Arc; import tfm.graphlib.arcs.data.VoidArcData; import tfm.graphlib.nodes.Vertex; public class ControlFlowArc extends Arc<VoidArcData> { public ControlFlowArc(Vertex from, Vertex to) { super(from, to); } @Override public boolean isControlFlowArrow() { return true; } @Override public boolean isControlDependencyArrow() { return false; } @Override public boolean isDataDependencyArrow() { return false; } } src/main/java/tfm/graphlib/arcs/data/ArcData.java 0 → 100644 +8 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.data; public abstract class ArcData { public abstract boolean isVoid(); public abstract boolean isVariable(); } src/main/java/tfm/graphlib/arcs/data/VariableArcData.java 0 → 100644 +37 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.data; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; public class VariableArcData extends ArcData { private List<String> variables; public VariableArcData(String... variables) { this(Arrays.asList(variables)); } public VariableArcData(Collection<? extends String> variables) { this.variables = new ArrayList<>(variables); } public List<String> getVariables() { return variables; } @Override public boolean isVoid() { return false; } @Override public boolean isVariable() { return true; } @Override public String toString() { return variables.toString(); } } Loading
src/main/java/tfm/graphlib/Main.java +27 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,13 @@ package tfm.graphlib; import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import edg.graphlib.Graph; import com.github.javaparser.ast.visitor.VoidVisitor; import tfm.graphlib.arcs.data.ArcData; import tfm.graphlib.graphs.CFGGraph; import tfm.graphlib.graphs.PDGGraph; import tfm.graphlib.nodes.PDGVertex; import tfm.graphlib.visitors.CFGVisitor; import tfm.graphlib.visitors.PDGVisitor; import java.io.File; import java.io.FileNotFoundException; Loading @@ -13,6 +19,25 @@ public class Main { File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java"); CompilationUnit compilationUnit = JavaParser.parse(file); Graph graph = new Graph(); CFGGraph cfgGraph = new CFGGraph() { @Override protected String getRootNodeData() { return "Start"; } }; // PDGGraph pdgGraph = new PDGGraph() { // @Override // protected String getRootNodeData() { // return "Entry"; // } // }; VoidVisitor<Void> voidVisitor = new CFGVisitor(cfgGraph); compilationUnit.accept(voidVisitor, null); // compilationUnit.accept(new PDGVisitor(pdgGraph), pdgGraph.getRootVertex()); System.out.println(cfgGraph); System.out.println(cfgGraph.toGraphvizRepresentation()); } }
src/main/java/tfm/graphlib/arcs/Arc.java 0 → 100644 +31 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs; import tfm.graphlib.arcs.data.ArcData; import tfm.graphlib.nodes.Vertex; public abstract class Arc<D extends ArcData> extends edg.graphlib.Arrow<String, D> { @SuppressWarnings("unchecked") public Arc(Vertex from, Vertex to) { super((edg.graphlib.Vertex<String, D>) from, (edg.graphlib.Vertex<String, D>) to); } public abstract boolean isControlFlowArrow(); public abstract boolean isControlDependencyArrow(); public abstract boolean isDataDependencyArrow(); @Override public String toString() { return String.format("Arc{data: %s, %s -> %s}", getData(), getFrom(), getTo() ); } public String toGraphvizRepresentation() { return String.format("\"%s\" -> \"%s\"", getFrom().getData(), getTo().getData()); } }
src/main/java/tfm/graphlib/arcs/cfg/ControlFlowArc.java 0 → 100644 +28 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.cfg; import tfm.graphlib.arcs.Arc; import tfm.graphlib.arcs.data.VoidArcData; import tfm.graphlib.nodes.Vertex; public class ControlFlowArc extends Arc<VoidArcData> { public ControlFlowArc(Vertex from, Vertex to) { super(from, to); } @Override public boolean isControlFlowArrow() { return true; } @Override public boolean isControlDependencyArrow() { return false; } @Override public boolean isDataDependencyArrow() { return false; } }
src/main/java/tfm/graphlib/arcs/data/ArcData.java 0 → 100644 +8 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.data; public abstract class ArcData { public abstract boolean isVoid(); public abstract boolean isVariable(); }
src/main/java/tfm/graphlib/arcs/data/VariableArcData.java 0 → 100644 +37 −0 Original line number Diff line number Diff line package tfm.graphlib.arcs.data; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; public class VariableArcData extends ArcData { private List<String> variables; public VariableArcData(String... variables) { this(Arrays.asList(variables)); } public VariableArcData(Collection<? extends String> variables) { this.variables = new ArrayList<>(variables); } public List<String> getVariables() { return variables; } @Override public boolean isVoid() { return false; } @Override public boolean isVariable() { return true; } @Override public String toString() { return variables.toString(); } }