Commit 25684b8a authored by Javier Costa's avatar Javier Costa
Browse files

Lots of changes

parent 1a5fb9fd
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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());
    }
}
+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());
    }
}
+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;
    }

}
+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();
}
+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