Commit 8e6b8d64 authored by Javier Costa's avatar Javier Costa
Browse files

Control dependency on PDGVisitor

parent 25684b8a
Loading
Loading
Loading
Loading
+13 −13
Original line number Diff line number Diff line
@@ -16,28 +16,28 @@ import java.io.FileNotFoundException;
public class Main {

    public static void main(String[] args) throws FileNotFoundException {
        File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example2.java");
        File file = new File("/home/jacosro/IdeaProjects/TFM/src/main/java/tfm/programs/Example1.java");
        CompilationUnit compilationUnit = JavaParser.parse(file);

        CFGGraph cfgGraph = new CFGGraph() {
            @Override
            protected String getRootNodeData() {
                return "Start";
            }
        };
        // PDGGraph pdgGraph = new PDGGraph() {
//        CFGGraph cfgGraph = new CFGGraph() {
//            @Override
//            protected String getRootNodeData() {
        //        return "Entry";
//                return "Start";
//            }
//        };
        PDGGraph pdgGraph = new PDGGraph() {
            @Override
            protected String getRootNodeData() {
                return "Entry";
            }
        };

        VoidVisitor<Void> voidVisitor = new CFGVisitor(cfgGraph);
        VoidVisitor<PDGVertex> voidVisitor = new PDGVisitor(pdgGraph);

        compilationUnit.accept(voidVisitor, null);
        compilationUnit.accept(voidVisitor, pdgGraph.getRootVertex());
        // compilationUnit.accept(new PDGVisitor(pdgGraph), pdgGraph.getRootVertex());

        System.out.println(cfgGraph);
        System.out.println(cfgGraph.toGraphvizRepresentation());
        System.out.println(pdgGraph);
//        System.out.println(cfgGraph.toGraphvizRepresentation());
    }
}
+10 −2
Original line number Diff line number Diff line
package tfm.graphlib.arcs.pdg;

import tfm.graphlib.arcs.Arc;
import tfm.graphlib.arcs.data.VoidArcData;
import tfm.graphlib.arcs.data.ArcData;
import tfm.graphlib.nodes.Vertex;

public class ControlDependencyArc extends Arc<VoidArcData> {
public class ControlDependencyArc extends Arc<ArcData> {

    public ControlDependencyArc(Vertex from, Vertex to) {
        super(from, to);
@@ -24,4 +24,12 @@ public class ControlDependencyArc extends Arc<VoidArcData> {
    public boolean isDataDependencyArrow() {
        return false;
    }

    @Override
    public String toString() {
        return String.format("ControlDependencyArc{%s -> %s}",
                ((Vertex) getFrom()).getId(),
                ((Vertex) getTo()).getId()
        );
    }
}
+0 −3
Original line number Diff line number Diff line
package tfm.graphlib.graphs;

import com.github.javaparser.ast.Node;
import edg.graphlib.Arrow;
import tfm.graphlib.arcs.cfg.ControlFlowArc;
import tfm.graphlib.arcs.data.ArcData;
import tfm.graphlib.arcs.data.VoidArcData;
import tfm.graphlib.nodes.CFGVertex;

public abstract class CFGGraph extends Graph<CFGVertex> {
+0 −1
Original line number Diff line number Diff line
package tfm.graphlib.nodes;

import tfm.graphlib.arcs.data.ArcData;
import tfm.graphlib.arcs.data.VoidArcData;
import tfm.graphlib.graphs.Graph;

+10 −8
Original line number Diff line number Diff line
@@ -14,29 +14,31 @@ public class PDGVertex extends Vertex {
    }

    public String toString() {
        List<Arc> dataFrom = new ArrayList<>();
        List<Arc> dataTo = new ArrayList<>();
        List<Arc> controlFrom = new ArrayList<>();
        List<Arc> controlTo = new ArrayList<>();
        List<Integer> dataFrom = new ArrayList<>();
        List<Integer> dataTo = new ArrayList<>();
        List<Integer> controlFrom = new ArrayList<>();
        List<Integer> controlTo = new ArrayList<>();

        getIncomingArrows().forEach(arrow -> {
            Arc arc = (Arc) arrow;
            Vertex from = (Vertex) arc.getFrom();

            if (arc.isDataDependencyArrow()) {
                dataFrom.add(arc);
                dataFrom.add(from.getId());
            } else if (arc.isControlDependencyArrow()) {
                controlFrom.add(arc);
                controlFrom.add(from.getId());
            }

        });

        getOutgoingArrows().forEach(arrow -> {
            Arc arc = (Arc) arrow;
            Vertex to = (Vertex) arc.getTo();

            if (arc.isDataDependencyArrow()) {
                dataTo.add(arc);
                dataTo.add(to.getId());
            } else if (arc.isControlDependencyArrow()) {
                controlTo.add(arc);
                controlTo.add(to.getId());
            }

        });
Loading