80 lines
2.2 KiB
Java
80 lines
2.2 KiB
Java
|
package grafos;
|
||
|
|
||
|
import java.io.File;
|
||
|
import java.util.ArrayList;
|
||
|
import java.util.List;
|
||
|
|
||
|
import com.github.javaparser.JavaParser;
|
||
|
import com.github.javaparser.ast.CompilationUnit;
|
||
|
import com.github.javaparser.ast.Node;
|
||
|
import com.github.javaparser.ast.comments.Comment;
|
||
|
import com.github.javaparser.ast.visitor.VoidVisitor;
|
||
|
|
||
|
public class Transformador {
|
||
|
|
||
|
public static void main(String[] args) throws Exception {
|
||
|
// Ruta del fichero con el programa que vamos a transformar
|
||
|
String ruta = "./src/test/res/ejemplos/Test_1";
|
||
|
|
||
|
// Abrimos el fichero original (un ".java")
|
||
|
File original = new File(ruta + ".java");
|
||
|
|
||
|
// Parseamos el fichero original. Se crea una unidad de compilación (un AST).
|
||
|
CompilationUnit cu = JavaParser.parse(original);
|
||
|
|
||
|
quitarComentarios(cu);
|
||
|
|
||
|
// Recorremos el AST
|
||
|
List<String> arcos = new ArrayList<String>();
|
||
|
VoidVisitor<List<String>> visitador = new Visitador();
|
||
|
visitador.visit(cu,arcos);
|
||
|
|
||
|
// Imprimimos el CFG del programa
|
||
|
String dotInfo = imprimirGrafo(arcos);
|
||
|
|
||
|
// Generamos un PDF con el CFG del programa
|
||
|
System.out.print("\nGenerando PDF...");
|
||
|
GraphViz gv=new GraphViz();
|
||
|
gv.addln(gv.start_graph());
|
||
|
gv.add(dotInfo);
|
||
|
gv.addln(gv.end_graph());
|
||
|
String type = "pdf"; // String type = "gif";
|
||
|
// gv.increaseDpi();
|
||
|
gv.decreaseDpi();
|
||
|
gv.decreaseDpi();
|
||
|
gv.decreaseDpi();
|
||
|
gv.decreaseDpi();
|
||
|
File destino_CFG = new File(ruta + "_CFG."+ type);
|
||
|
gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), destino_CFG);
|
||
|
System.out.println(" PDF generado!");
|
||
|
}
|
||
|
|
||
|
// Imprime el grafo en la pantalla
|
||
|
private static String imprimirGrafo(List<String> arcos)
|
||
|
{
|
||
|
String dotInfo="";
|
||
|
for(String arco:arcos) {
|
||
|
dotInfo += arco;
|
||
|
System.out.println("ARCO: "+arco);
|
||
|
}
|
||
|
System.out.println("\nCFG:");
|
||
|
System.out.println(dotInfo);
|
||
|
|
||
|
return dotInfo;
|
||
|
}
|
||
|
|
||
|
// Elimina todos los comentarios de un nodo y sus hijos
|
||
|
static void quitarComentarios(Node node){
|
||
|
node.removeComment();
|
||
|
for (Comment comment : node.getOrphanComments())
|
||
|
{
|
||
|
node.removeOrphanComment(comment);
|
||
|
}
|
||
|
// Do something with the node
|
||
|
for (Node child : node.getChildNodes()){
|
||
|
quitarComentarios(child);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|