Set indent to tabs and applied format to project

This commit is contained in:
Carlos Galindo 2019-03-26 20:29:29 +01:00
parent 782a4361c2
commit 0e5667582b
Signed by untrusted user who does not match committer: kauron
GPG key ID: 83E68706DEE119A3
21 changed files with 586 additions and 634 deletions

View file

@ -0,0 +1,14 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<codeStyleSettings language="JAVA">
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
</codeStyleSettings>
<codeStyleSettings language="XML">
<indentOptions>
<option name="USE_TAB_CHARACTER" value="true" />
</indentOptions>
</codeStyleSettings>
</code_scheme>
</component>

View file

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

76
pom.xml
View file

@ -1,44 +1,44 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.upv.ltd.graphs</groupId>
<artifactId>graphs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<groupId>com.upv.ltd.graphs</groupId>
<artifactId>graphs</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>graphs</name>
<url>http://maven.apache.org</url>
<name>graphs</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-symbol-solver-core</artifactId>
<version>3.5.17</version>
</dependency>
</dependencies>
<developers>
<developer>
<name>Josep Silva</name>
<email>jsilva@dsic.upv.es</email>
<url>http://www.dsic.upv.es/~jsilva</url>
<id>jsilva</id>
</developer>
</developers>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-symbol-solver-core</artifactId>
<version>3.5.17</version>
</dependency>
</dependencies>
<developers>
<developer>
<name>Josep Silva</name>
<email>jsilva@dsic.upv.es</email>
<url>http://www.dsic.upv.es/~jsilva</url>
<id>jsilva</id>
</developer>
</developers>
</project>

View file

@ -4,363 +4,353 @@ package grafos;
/*$Id$*/
/*
******************************************************************************
* *
* (c) Copyright Laszlo Szathmary *
* *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2.1 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
* License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program; if not, write to the Free Software Foundation, *
* Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* *
******************************************************************************
*/
******************************************************************************
* *
* (c) Copyright Laszlo Szathmary *
* *
* This program is free software; you can redistribute it and/or modify it *
* under the terms of the GNU Lesser General Public License as published by *
* the Free Software Foundation; either version 2.1 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *
* or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public *
* License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public License *
* along with this program; if not, write to the Free Software Foundation, *
* Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *
* *
******************************************************************************
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.io.*;
import java.util.Properties;
/**
* <dl>
* <dt>Purpose: GraphViz Java API
* <dd>
*
* <dt>Description:
* <dd> With this Java class you can simply call dot
* from your Java programs.
* <dt>Example usage:
* <dd>
* <pre>
* GraphViz gv = new GraphViz();
* gv.addln(gv.start_graph());
* gv.addln("A -> B;");
* gv.addln("A -> C;");
* gv.addln(gv.end_graph());
* System.out.println(gv.getDotSource());
*
* String type = "gif";
* File out = new File("out." + type); // out.gif in this example
* gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
* </pre>
* </dd>
*
* </dl>
*
* @version v0.5.1, 2013/03/18 (March) -- Patch of Juan Hoyos (Mac support)
* @version v0.5, 2012/04/24 (April) -- Patch of Abdur Rahman (OS detection + start subgraph +
* read config file)
* @version v0.4, 2011/02/05 (February) -- Patch of Keheliya Gallaba is added. Now you
* can specify the type of the output file: gif, dot, fig, pdf, ps, svg, png, etc.
* @version v0.3, 2010/11/29 (November) -- Windows support + ability to read the graph from a text file
* @version v0.2, 2010/07/22 (July) -- bug fix
* @version v0.1, 2003/12/04 (December) -- first release
* @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
*/
public class GraphViz
{
/**
* Detects the client's operating system.
*/
private final static String osName = System.getProperty("os.name").replaceAll("\\s","");
* <dl>
* <dt>Purpose: GraphViz Java API
* <dd>
*
* <dt>Description:
* <dd> With this Java class you can simply call dot
* from your Java programs.
* <dt>Example usage:
* <dd>
* <pre>
* GraphViz gv = new GraphViz();
* gv.addln(gv.start_graph());
* gv.addln("A -> B;");
* gv.addln("A -> C;");
* gv.addln(gv.end_graph());
* System.out.println(gv.getDotSource());
*
* String type = "gif";
* File out = new File("out." + type); // out.gif in this example
* gv.writeGraphToFile( gv.getGraph( gv.getDotSource(), type ), out );
* </pre>
* </dd>
*
* </dl>
*
* @author Laszlo Szathmary (<a href="jabba.laci@gmail.com">jabba.laci@gmail.com</a>)
* @version v0.1, 2003/12/04 (December) -- first release
*/
public class GraphViz {
/**
* Detects the client's operating system.
*/
private final static String osName = System.getProperty("os.name").replaceAll("\\s", "");
/**
* Load the config.properties file.
*/
private final static String cfgProp = "./src/main/res/config.properties";
private final static Properties configFile = new Properties() {
private final static long serialVersionUID = 1L; {
try {
load(new FileInputStream(cfgProp));
} catch (Exception ignored) {}
}
};
/**
* Load the config.properties file.
*/
private final static String cfgProp = "./src/main/res/config.properties";
private final static Properties configFile = new Properties() {
private final static long serialVersionUID = 1L;
/**
* The dir. where temporary files will be created.
*/
private static String TEMP_DIR = "/tmp/";
{
try {
load(new FileInputStream(cfgProp));
} catch (Exception ignored) {
}
}
};
/**
* Where is your dot program located? It will be called externally.
*/
private static String DOT = configFile.getProperty("dotFor" + osName);
/**
* The dir. where temporary files will be created.
*/
private static String TEMP_DIR = "/tmp/";
/**
* The image size in dpi. 96 dpi is normal size. Higher values are 10% higher each.
* Lower values 10% lower each.
*
* dpi patch by Peter Mueller
*/
private int[] dpiSizes = {46, 51, 57, 63, 70, 78, 86, 96, 106, 116, 128, 141, 155, 170, 187, 206, 226, 249};
/**
* Where is your dot program located? It will be called externally.
*/
private static String DOT = configFile.getProperty("dotFor" + osName);
/**
* Define the index in the image size array.
*/
private int currentDpiPos = 7;
/**
* The image size in dpi. 96 dpi is normal size. Higher values are 10% higher each.
* Lower values 10% lower each.
* <p>
* dpi patch by Peter Mueller
*/
private int[] dpiSizes = {46, 51, 57, 63, 70, 78, 86, 96, 106, 116, 128, 141, 155, 170, 187, 206, 226, 249};
/**
* Increase the image size (dpi).
*/
public void increaseDpi() {
if ( this.currentDpiPos < (this.dpiSizes.length - 1) ) {
++this.currentDpiPos;
}
}
/**
* Define the index in the image size array.
*/
private int currentDpiPos = 7;
/**
* Decrease the image size (dpi).
*/
public void decreaseDpi() {
if (this.currentDpiPos > 0) {
--this.currentDpiPos;
}
}
/**
* Increase the image size (dpi).
*/
public void increaseDpi() {
if (this.currentDpiPos < (this.dpiSizes.length - 1)) {
++this.currentDpiPos;
}
}
public int getImageDpi() {
return this.dpiSizes[this.currentDpiPos];
}
/**
* Decrease the image size (dpi).
*/
public void decreaseDpi() {
if (this.currentDpiPos > 0) {
--this.currentDpiPos;
}
}
/**
* The source of the graph written in dot language.
*/
private StringBuilder graph = new StringBuilder();
public int getImageDpi() {
return this.dpiSizes[this.currentDpiPos];
}
/**
* Constructor: creates a new GraphViz object that will contain
* a graph.
*/
public GraphViz() {
}
/**
* The source of the graph written in dot language.
*/
private StringBuilder graph = new StringBuilder();
/**
* Returns the graph's source description in dot language.
* @return Source of the graph in dot language.
*/
public String getDotSource() {
return this.graph.toString();
}
/**
* Constructor: creates a new GraphViz object that will contain
* a graph.
*/
public GraphViz() {
}
/**
* Adds a string to the graph's source (without newline).
*/
public void add(String line) {
this.graph.append(line);
}
/**
* Returns the graph's source description in dot language.
*
* @return Source of the graph in dot language.
*/
public String getDotSource() {
return this.graph.toString();
}
/**
* Adds a string to the graph's source (with newline).
*/
public void addln(String line) {
this.graph.append(line).append("\n");
}
/**
* Adds a string to the graph's source (without newline).
*/
public void add(String line) {
this.graph.append(line);
}
/**
* Adds a newline to the graph's source.
*/
public void addln() {
this.graph.append('\n');
}
/**
* Adds a string to the graph's source (with newline).
*/
public void addln(String line) {
this.graph.append(line).append("\n");
}
public void clearGraph(){
this.graph = new StringBuilder();
}
/**
* Adds a newline to the graph's source.
*/
public void addln() {
this.graph.append('\n');
}
/**
* Returns the graph as an image in binary format.
* @param dot_source Source of the graph to be drawn.
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return A byte array containing the image of the graph.
*/
public byte[] getGraph(String dot_source, String type)
{
File dot;
byte[] img_stream;
public void clearGraph() {
this.graph = new StringBuilder();
}
try {
dot = writeDotSourceToFile(dot_source);
if (dot != null)
{
img_stream = get_img_stream(dot, type);
if (!dot.delete())
System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
return img_stream;
}
return null;
} catch (java.io.IOException ioe) { return null; }
}
/**
* Returns the graph as an image in binary format.
*
* @param dot_source Source of the graph to be drawn.
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return A byte array containing the image of the graph.
*/
public byte[] getGraph(String dot_source, String type) {
File dot;
byte[] img_stream;
/**
* Writes the graph's image in a file.
* @param img A byte array containing the image of the graph.
* @param file Name of the file to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, String file)
{
File to = new File(file);
return writeGraphToFile(img, to);
}
try {
dot = writeDotSourceToFile(dot_source);
if (dot != null) {
img_stream = get_img_stream(dot, type);
if (!dot.delete())
System.err.println("Warning: " + dot.getAbsolutePath() + " could not be deleted!");
return img_stream;
}
return null;
} catch (java.io.IOException ioe) {
return null;
}
}
/**
* Writes the graph's image in a file.
* @param img A byte array containing the image of the graph.
* @param to A File object to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, File to)
{
try {
FileOutputStream fos = new FileOutputStream(to);
fos.write(img);
fos.close();
} catch (java.io.IOException ioe) { return -1; }
return 1;
}
/**
* Writes the graph's image in a file.
*
* @param img A byte array containing the image of the graph.
* @param file Name of the file to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, String file) {
File to = new File(file);
return writeGraphToFile(img, to);
}
/**
* It will call the external dot program, and return the image in
* binary format.
* @param dot Source of the graph (in dot language).
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return The image of the graph in .gif format.
*/
private byte[] get_img_stream(File dot, String type)
{
File img;
byte[] img_stream = null;
/**
* Writes the graph's image in a file.
*
* @param img A byte array containing the image of the graph.
* @param to A File object to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, File to) {
try {
FileOutputStream fos = new FileOutputStream(to);
fos.write(img);
fos.close();
} catch (java.io.IOException ioe) {
return -1;
}
return 1;
}
try {
img = File.createTempFile("graph_", "."+type, new File(GraphViz.TEMP_DIR));
Runtime rt = Runtime.getRuntime();
/**
* It will call the external dot program, and return the image in
* binary format.
*
* @param dot Source of the graph (in dot language).
* @param type Type of the output image to be produced, e.g.: gif, dot, fig, pdf, ps, svg, png.
* @return The image of the graph in .gif format.
*/
private byte[] get_img_stream(File dot, String type) {
File img;
byte[] img_stream = null;
// patch by Mike Chenault
String[] args = {DOT, "-T"+type, "-Gdpi="+dpiSizes[this.currentDpiPos], dot.getAbsolutePath(), "-o", img.getAbsolutePath()};
Process p = rt.exec(args);
try {
img = File.createTempFile("graph_", "." + type, new File(GraphViz.TEMP_DIR));
Runtime rt = Runtime.getRuntime();
p.waitFor();
// patch by Mike Chenault
String[] args = {DOT, "-T" + type, "-Gdpi=" + dpiSizes[this.currentDpiPos], dot.getAbsolutePath(), "-o", img.getAbsolutePath()};
Process p = rt.exec(args);
FileInputStream in = new FileInputStream(img.getAbsolutePath());
img_stream = new byte[in.available()];
in.read(img_stream);
// Close it if we need to
in.close();
p.waitFor();
if (!img.delete())
System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
}
catch (java.io.IOException ioe) {
System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR+"\n");
System.err.println(" or in calling external command");
ioe.printStackTrace();
}
catch (java.lang.InterruptedException ie) {
System.err.println("Error: the execution of the external program was interrupted");
ie.printStackTrace();
}
FileInputStream in = new FileInputStream(img.getAbsolutePath());
img_stream = new byte[in.available()];
in.read(img_stream);
// Close it if we need to
in.close();
return img_stream;
}
if (!img.delete())
System.err.println("Warning: " + img.getAbsolutePath() + " could not be deleted!");
} catch (java.io.IOException ioe) {
System.err.println("Error: in I/O processing of tempfile in dir " + GraphViz.TEMP_DIR + "\n");
System.err.println(" or in calling external command");
ioe.printStackTrace();
} catch (java.lang.InterruptedException ie) {
System.err.println("Error: the execution of the external program was interrupted");
ie.printStackTrace();
}
/**
* Writes the source of the graph in a file, and returns the written file
* as a File object.
* @param str Source of the graph (in dot language).
* @return The file (as a File object) that contains the source of the graph.
*/
private File writeDotSourceToFile(String str) throws java.io.IOException
{
File temp;
try {
temp = File.createTempFile("dorrr",".dot", new File(GraphViz.TEMP_DIR));
FileWriter fout = new FileWriter(temp);
fout.write(str);
BufferedWriter br=new BufferedWriter(new FileWriter("/tmp/dotsource.dot"));
br.write(str);
br.flush();
br.close();
fout.close();
}
catch (Exception e) {
System.err.println("Error: I/O error while writing the dot source to temp file!");
return null;
}
return temp;
}
return img_stream;
}
/**
* Returns a string that is used to start a graph.
* @return A string to open a graph.
*/
public String start_graph() {
return "digraph G {";
}
/**
* Writes the source of the graph in a file, and returns the written file
* as a File object.
*
* @param str Source of the graph (in dot language).
* @return The file (as a File object) that contains the source of the graph.
*/
private File writeDotSourceToFile(String str) throws java.io.IOException {
File temp;
try {
temp = File.createTempFile("dorrr", ".dot", new File(GraphViz.TEMP_DIR));
FileWriter fout = new FileWriter(temp);
fout.write(str);
BufferedWriter br = new BufferedWriter(new FileWriter("/tmp/dotsource.dot"));
br.write(str);
br.flush();
br.close();
fout.close();
} catch (Exception e) {
System.err.println("Error: I/O error while writing the dot source to temp file!");
return null;
}
return temp;
}
/**
* Returns a string that is used to end a graph.
* @return A string to close a graph.
*/
public String end_graph() {
return "}";
}
/**
* Returns a string that is used to start a graph.
*
* @return A string to open a graph.
*/
public String start_graph() {
return "digraph G {";
}
/**
* Takes the cluster or subgraph id as input parameter and returns a string
* that is used to start a subgraph.
* @return A string to open a subgraph.
*/
public String start_subgraph(int clusterid) {
return "subgraph cluster_" + clusterid + " {";
}
/**
* Returns a string that is used to end a graph.
*
* @return A string to close a graph.
*/
public String end_graph() {
return "}";
}
/**
* Returns a string that is used to end a graph.
* @return A string to close a graph.
*/
public String end_subgraph() {
return "}";
}
/**
* Takes the cluster or subgraph id as input parameter and returns a string
* that is used to start a subgraph.
*
* @return A string to open a subgraph.
*/
public String start_subgraph(int clusterid) {
return "subgraph cluster_" + clusterid + " {";
}
/**
* Read a DOT graph from a text file.
*
* @param input Input text file containing the DOT graph
* source.
*/
public void readSource(String input)
{
StringBuilder sb = new StringBuilder();
/**
* Returns a string that is used to end a graph.
*
* @return A string to close a graph.
*/
public String end_subgraph() {
return "}";
}
try
{
FileInputStream fis = new FileInputStream(input);
DataInputStream dis = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
dis.close();
}
catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
/**
* Read a DOT graph from a text file.
*
* @param input Input text file containing the DOT graph
* source.
*/
public void readSource(String input) {
StringBuilder sb = new StringBuilder();
this.graph = sb;
}
try {
FileInputStream fis = new FileInputStream(input);
DataInputStream dis = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(dis));
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
dis.close();
} catch (Exception e) {
System.err.println("Error: " + e.getMessage());
}
this.graph = sb;
}
} // end of class GraphViz

View file

@ -1,79 +1,77 @@
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;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
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);
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!");
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)
{
StringBuilder dotInfo= new StringBuilder();
for(String arco:arcos) {
private static String imprimirGrafo(List<String> arcos) {
StringBuilder dotInfo = new StringBuilder();
for (String arco : arcos) {
dotInfo.append(arco);
System.out.println("ARCO: "+arco);
System.out.println("ARCO: " + arco);
}
System.out.println("\nCFG:");
System.out.println(dotInfo);
return dotInfo.toString();
}
// Elimina todos los comentarios de un nodo y sus hijos
private static void quitarComentarios(Node node){
private static void quitarComentarios(Node node) {
node.removeComment();
for (Comment comment : node.getOrphanComments())
{
for (Comment comment : node.getOrphanComments()) {
node.removeOrphanComment(comment);
}
// Do something with the node
for (Node child : node.getChildNodes()){
quitarComentarios(child);
}
// Do something with the node
for (Node child : node.getChildNodes()) {
quitarComentarios(child);
}
}
}

View file

@ -1,6 +1,4 @@
package grafos;
import java.util.List;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.body.MethodDeclaration;
@ -9,83 +7,77 @@ import com.github.javaparser.ast.stmt.ExpressionStmt;
import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.visitor.VoidVisitorAdapter;
import java.util.List;
public class Visitador extends VoidVisitorAdapter<List<String>>
{
public class Visitador extends VoidVisitorAdapter<List<String>> {
//********************************************************/
//********************** Atributos ***********************/
//********************************************************/
// Usamos un contador para numerar las instrucciones
private int contador=1;
private int contador = 1;
private String nodoAnterior = "Start";
private String nodoActual = "";
//********************************************************/
//*********************** Metodos ************************/
//********************************************************/
// Visitador de métodos
// Visitador de métodos
// Este visitador añade el nodo final al CFG
@Override
public void visit(MethodDeclaration methodDeclaration, List<String>collector)
{
// Visitamos el método
@Override
public void visit(MethodDeclaration methodDeclaration, List<String> collector) {
// Visitamos el método
super.visit(methodDeclaration, collector);
// Añadimos el nodo final al CFG
collector.add(nodoAnterior+"-> Stop;");
collector.add(nodoAnterior + "-> Stop;");
}
// Visitador de expresiones
// Cada expresión encontrada genera un nodo en el CFG
@Override
public void visit(ExpressionStmt es, List<String>collector)
{
public void visit(ExpressionStmt es, List<String> collector) {
// Creamos el nodo actual
nodoActual = crearNodo(es);
nodoActual = crearNodo(es);
crearArcos(collector);
nodoAnterior = nodoActual;
// Seguimos visitando...
super.visit(es, collector);
}
// Añade un arco desde el último nodo hasta el nodo actual (se le pasa como parametro)
private void añadirArcoSecuencialCFG(List<String>collector)
{
private void añadirArcoSecuencialCFG(List<String> collector) {
System.out.println("NODO: " + nodoActual);
String arco = nodoAnterior + "->" + nodoActual + ";";
collector.add(arco);
}
// Crear arcos
private void crearArcos(List<String>collector)
{
añadirArcoSecuencialCFG(collector);
private void crearArcos(List<String> collector) {
añadirArcoSecuencialCFG(collector);
}
// Crear nodo
// Añade un arco desde el nodo actual hasta el último control
private String crearNodo(Object objeto)
{
return "\"("+ contador++ +") "+quitarComillas(objeto.toString())+"\"";
private String crearNodo(Object objeto) {
return "\"(" + contador++ + ") " + quitarComillas(objeto.toString()) + "\"";
}
// Sustituye " por \" en un string: Sirve para eliminar comillas.
private static String quitarComillas(String texto)
{
return texto.replace("\"", "\\\"");
private static String quitarComillas(String texto) {
return texto.replace("\"", "\\\"");
}
// Dada una sentencia,
// Si es una <EFBFBD>nica instrucci<EFBFBD>n, devuelve un bloque equivalente
// Si es un bloque, lo devuelve
private BlockStmt convertirEnBloque(Statement statement)
{
private BlockStmt convertirEnBloque(Statement statement) {
if (statement instanceof BlockStmt)
return (BlockStmt) statement;
@ -97,5 +89,5 @@ public class Visitador extends VoidVisitorAdapter<List<String>>
return block;
}
}

View file

@ -2,15 +2,13 @@ package ejemplos;
public class Bucles_1 {
public static void main(String[] args)
{
public static void main(String[] args) {
// BUCLE WHILE (sin anidamiento)
int x=1;
while (x<=10)
{
int x = 1;
while (x <= 10) {
System.out.print(x);
x++;
}
System.out.println();
System.out.println();
}
}

View file

@ -2,19 +2,16 @@ package ejemplos;
public class Bucles_2 {
public static void main(String[] args)
{
public static void main(String[] args) {
// BUCLE WHILE anidado a otro WHILE
System.out.println("Empieza bucle WHILE anidado a otro WHILE:");
int x=1;
char y='a';
while (x<=10)
{
System.out.print(" "+x);
y='a';
while (y<='c')
{
System.out.print(" "+y);
System.out.println("Empieza bucle WHILE anidado a otro WHILE:");
int x = 1;
char y = 'a';
while (x <= 10) {
System.out.print(" " + x);
y = 'a';
while (y <= 'c') {
System.out.print(" " + y);
y++;
}
x++;

View file

@ -4,34 +4,32 @@ public class Bucles_3 {
public static void main(String[] args) {
int x;
// BUCLE FOR (sin anidamiento)
System.out.println("Empieza bucle FOR:");
for (x=1;x<=10;x++)
{
System.out.print(" "+x);
System.out.println("Empieza bucle FOR:");
for (x = 1; x <= 10; x++) {
System.out.print(" " + x);
}
System.out.println();
// BUCLE WHILE (sin anidamiento)
System.out.println("Empieza bucle WHILE:");
x=1;
while (x<=10)
{
System.out.print(" "+x);
System.out.println("Empieza bucle WHILE:");
x = 1;
while (x <= 10) {
System.out.print(" " + x);
x++;
}
System.out.println();
// BUCLE DO WHILE (sin anidamiento)
System.out.println("Empieza bucle DO WHILE:");
x=1;
do{
System.out.print(" "+x);
System.out.println("Empieza bucle DO WHILE:");
x = 1;
do {
System.out.print(" " + x);
x++;
}
while (x<=10);
while (x <= 10);
System.out.println();
}
}

View file

@ -2,22 +2,19 @@ package ejemplos;
public class Bucles_4 {
public static void main(String[] args)
{
int x=1;
public static void main(String[] args) {
int x = 1;
//Bucle 1: Contador
while (x<10)
{
while (x < 10) {
System.out.println(x);
x++;
}
//Bucle 2: Sumatorio
int suma=0;
int y=1;
while (y<10)
{
int suma = 0;
int y = 1;
while (y < 10) {
suma += y;
y++;
}
@ -27,8 +24,7 @@ public class Bucles_4 {
int sumatorio = 0;
int min = 10;
int max = 100;
for (int num = min; num <= max; num++)
{
for (int num = min; num <= max; num++) {
sumatorio += num;
}
System.out.println(sumatorio);

View file

@ -5,29 +5,25 @@ public class Bucles_5 {
public static void main(String[] args) {
int x = 0;
char y = '0';
// BUCLE FOR anidado a otro FOR
System.out.println("Empieza bucle FOR anidado a otro FOR:");
for (x=1;x<=10;x++)
{
System.out.print(" "+x);
for (y='a';y<='c';y++)
{
System.out.print(" "+y);
System.out.println("Empieza bucle FOR anidado a otro FOR:");
for (x = 1; x <= 10; x++) {
System.out.print(" " + x);
for (y = 'a'; y <= 'c'; y++) {
System.out.print(" " + y);
}
}
System.out.println();
// BUCLE WHILE anidado a otro WHILE
System.out.println("Empieza bucle WHILE anidado a otro WHILE:");
x=1;
while (x<=10)
{
System.out.print(" "+x);
y='a';
while (y<='c')
{
System.out.print(" "+y);
System.out.println("Empieza bucle WHILE anidado a otro WHILE:");
x = 1;
while (x <= 10) {
System.out.print(" " + x);
y = 'a';
while (y <= 'c') {
System.out.print(" " + y);
y++;
}
x++;
@ -35,18 +31,17 @@ public class Bucles_5 {
System.out.println();
// BUCLE FOR anidado a bucle DO WHILE
System.out.println("Empieza bucle FOR anidado a bucle DO WHILE:");
x=1;
do{
System.out.print(" "+x);
for (y='a';y<='c';y++)
{
System.out.print(" "+y);
System.out.println("Empieza bucle FOR anidado a bucle DO WHILE:");
x = 1;
do {
System.out.print(" " + x);
for (y = 'a'; y <= 'c'; y++) {
System.out.print(" " + y);
}
x++;
}
while (x<=10);
while (x <= 10);
System.out.println();
}
}

View file

@ -2,26 +2,22 @@ package ejemplos;
public class Bucles_6 {
public static void main(String[] args)
{
public static void main(String[] args) {
// BUCLE WHILE (sin anidamiento)
System.out.println("Empieza bucle WHILE:");
int x=1;
while (x<=10)
{
System.out.print(" "+x);
System.out.println("Empieza bucle WHILE:");
int x = 1;
while (x <= 10) {
System.out.print(" " + x);
x++;
while (x<=10)
{
System.out.print(" "+x);
while (x <= 10) {
System.out.print(" " + x);
x++;
}
}
while (x<=10)
{
System.out.print(" "+x);
while (x <= 10) {
System.out.print(" " + x);
x++;
}
System.out.println();
System.out.println();
}
}

View file

@ -2,12 +2,11 @@ package ejemplos;
public class Test_1 {
public static void main(String[] args)
{
public static void main(String[] args) {
System.out.println("HOLA mundo");
int x=1;
x=2;
x=3;
x=4;
int x = 1;
x = 2;
x = 3;
x = 4;
}
}

View file

@ -2,13 +2,12 @@ package ejemplos;
public class Test_2 {
public static void main(String[] args)
{
int x=1;
public static void main(String[] args) {
int x = 1;
x++;
++x;
int y=0;
x=x+y;
int y = 0;
x = x + y;
System.out.println(x);
}
}

View file

@ -2,13 +2,12 @@ package ejemplos;
public class Test_3 {
public static void main(String[] args)
{
int x=1;
if (x==1)
x=2;
x=3;
x=4;
public static void main(String[] args) {
int x = 1;
if (x == 1)
x = 2;
x = 3;
x = 4;
}
}

View file

@ -2,20 +2,17 @@ package ejemplos;
public class Test_4 {
public static void main(String[] args)
{
int x=1;
if (x==1)
{
x=2;
if (x>=1)
{
x=3;
x=4;
public static void main(String[] args) {
int x = 1;
if (x == 1) {
x = 2;
if (x >= 1) {
x = 3;
x = 4;
}
}
x=5;
x=6;
x = 5;
x = 6;
}
}

View file

@ -2,21 +2,18 @@ package ejemplos;
public class Test_5 {
public static void main(String[] args)
{
int x=1;
if (x==1)
{
x=2;
if (x>=1)
{
x=3;
x=4;
public static void main(String[] args) {
int x = 1;
if (x == 1) {
x = 2;
if (x >= 1) {
x = 3;
x = 4;
}
x=5;
x = 5;
}
x=6;
x=7;
x = 6;
x = 7;
}
}

View file

@ -2,20 +2,16 @@ package ejemplos;
public class Test_6 {
public static void main(String[] args)
{
int x=1;
if (x==1)
{
x=2;
x=3;
public static void main(String[] args) {
int x = 1;
if (x == 1) {
x = 2;
x = 3;
} else {
x = 4;
x = 5;
}
else
{
x=4;
x=5;
}
x=6;
x = 6;
}
}

View file

@ -3,21 +3,16 @@ package ejemplos;
public class Test_7 {
public static void main(String[] args)
{
int x=1;
if (x==1)
{
x=2;
}
else x=3;
x=4;
if (x==2)
{
x=5;
}
else if (x==3) x=6;
x=7;
public static void main(String[] args) {
int x = 1;
if (x == 1) {
x = 2;
} else x = 3;
x = 4;
if (x == 2) {
x = 5;
} else if (x == 3) x = 6;
x = 7;
}
}

View file

@ -2,21 +2,18 @@ package ejemplos;
public class Test_8 {
public static void main(String[] args)
{
int x=1;
if (x==1)
{
x=2;
public static void main(String[] args) {
int x = 1;
if (x == 1) {
x = 2;
}
x=5;
x=6;
if (x==2)
{
x=7;
x = 5;
x = 6;
if (x == 2) {
x = 7;
}
if (x==3) x=8;
x=9;
if (x == 3) x = 8;
x = 9;
}
}

View file

@ -2,29 +2,23 @@ package ejemplos;
public class Test_9 {
public static void main(String[] args)
{
public static void main(String[] args) {
// ANIDAMIENTO de IF y WHILE
// ANIDAMIENTO de IF y WHILE 2
int x=0;
if (x>1)
{
x=1;
while (x>2)
{
x=2;
while (x>3)
{
x=3;
if (x>4)
{
x=4;
if (x>5)
{
x=5;
int x = 0;
if (x > 1) {
x = 1;
while (x > 2) {
x = 2;
while (x > 3) {
x = 3;
if (x > 4) {
x = 4;
if (x > 5) {
x = 5;
}
x--;
}
@ -34,8 +28,8 @@ public class Test_9 {
}
x--;
}
x--;
}
}