diff --git a/ejemplos/FirstLetterEqual(1).xml b/ejemplos/FirstLetterEqual(1).xml
new file mode 100644
index 0000000..5ba9a38
--- /dev/null
+++ b/ejemplos/FirstLetterEqual(1).xml
@@ -0,0 +1,102 @@
+
+
+
+
+ R
+ a
+ 1
+ 0
+ #
+
+
+ 1
+ a
+ #
+ 1
+ R
+
+
+ 1
+ b
+ R
+ 1
+ #
+
+
+ 1
+ c
+ 2
+ #
+ R
+
+
+ 2
+ a
+ 3
+ #
+ R
+
+
+ 3
+ a
+ 3
+ #
+ R
+
+
+ 3
+ b
+ 3
+ #
+ R
+
+
+ 0
+ b
+ 4
+ #
+ R
+
+
+ 4
+ a
+ 4
+ #
+ R
+
+
+ 4
+ b
+ 4
+ #
+ R
+
+
+ 4
+ c
+ 5
+ #
+ R
+
+
+ 5
+ b
+ 6
+ #
+ R
+
+
+ 6
+ a
+ 6
+ #
+ R
+
+
+ 6
+ b
+ 6
+ #
+ R
+
+
diff --git a/ejemplos/FirstLetterEqual.xml b/ejemplos/FirstLetterEqual.xml
index b029375..283e807 100644
--- a/ejemplos/FirstLetterEqual.xml
+++ b/ejemplos/FirstLetterEqual.xml
@@ -99,4 +99,18 @@
#
R
+
+ 3
+ #
+ 7
+ #
+ *
+
+
+ 6
+ #
+ 7
+ #
+ *
+
diff --git a/ejemplos/TuringIgual0sIgual1s.xml b/ejemplos/TuringIgual0sIgual1s.xml
index 06d7ad1..188c3c8 100644
--- a/ejemplos/TuringIgual0sIgual1s.xml
+++ b/ejemplos/TuringIgual0sIgual1s.xml
@@ -1,5 +1,5 @@
-
+
0
diff --git a/ejemplos/mT.xml b/ejemplos/mT.xml
index 9239d85..75c14bd 100644
--- a/ejemplos/mT.xml
+++ b/ejemplos/mT.xml
@@ -1,5 +1,5 @@
-
+
0
diff --git a/ejemplos/mT4.xml b/ejemplos/mT4.xml
index aa4d925..276e123 100644
--- a/ejemplos/mT4.xml
+++ b/ejemplos/mT4.xml
@@ -1,5 +1,5 @@
-
+
0
diff --git a/ejemplos/mtbase.dtd b/ejemplos/mtbase.dtd
index 357ec32..e43b54e 100644
--- a/ejemplos/mtbase.dtd
+++ b/ejemplos/mtbase.dtd
@@ -1,7 +1,29 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ejemplos/mtbase_.dtd b/ejemplos/mtbase_.dtd
new file mode 100644
index 0000000..61ea1f4
--- /dev/null
+++ b/ejemplos/mtbase_.dtd
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/cl/cromer/mt/Automata.java b/src/cl/cromer/mt/Automata.java
index fc4da9e..1f0f04e 100644
--- a/src/cl/cromer/mt/Automata.java
+++ b/src/cl/cromer/mt/Automata.java
@@ -11,10 +11,21 @@ import org.w3c.dom.Document;
import java.util.ArrayList;
+/**
+ * Clase que contiene método que guarda y ordena cada transición del archivo XML ya validado
+ */
+
public class Automata {
private ArrayList estados;
private ArrayList estadosExistentes;
+ /**
+ * Constructor de la clase Automata, organiza las etiquetas del XML en un array de estados
+ * y filtra los subindices de cada estado obtenido
+ *
+ * @param document Document del XML
+ */
+
public Automata(Document document) {
setEstados(new ArrayList<>());
for (int i = 0; i < document.getElementsByTagName("transicion").getLength(); i++) {
@@ -24,27 +35,13 @@ public class Automata {
int qj = Integer.parseInt(document.getElementsByTagName("qj").item(i).getTextContent());
char si = document.getElementsByTagName("si").item(i).getTextContent().charAt(0);
char sj = document.getElementsByTagName("sj").item(i).getTextContent().charAt(0);
- /*if(estados.isEmpty() && qi != qj){
- estados.add(qi, new Estado(qi));
- estados.add(qj, new Estado(qj));
- }
- else if(estados.isEmpty() && qi == qj) {
- estados.add(qi, new Estado(qi));
- }*/
if (estados.size() <= qi) {
estados.add(qi, new Estado(qi));
}
if (estados.size() <= qj) {
estados.add(qj, new Estado(qj));
}
- if (!estados.get(qi).createLink(si, estados.get(qj), sj, move)) {
- if (qi == qj) {
- System.out.println("Recursivo");
- }
- else {
- System.out.println("En" + qi + " a " + qj + "Transicion para " + si + " ya esta creada");
- }
- }
+ estados.get(qi).createLink(si, estados.get(qj), sj, move);
}
else {
System.out.println("Movimiento invalido de cinta");
@@ -59,18 +56,38 @@ public class Automata {
}
}
+ /**
+ * Retorna un lista de estados
+ *
+ * @return ArrayList de Estados
+ */
public ArrayList getEstados() {
return estados;
}
+ /**
+ * Asigna una lista de estados
+ *
+ * @param estados Estados ya creados
+ */
public void setEstados(ArrayList estados) {
this.estados = estados;
}
+ /**
+ * Retorna una lista de números que serán los subindices de los estados existentes
+ *
+ * @return estadosExistentes Lista de subindices
+ */
public ArrayList getEstadosExistentes() {
return estadosExistentes;
}
+ /**
+ * Asigna una lista de estados existentes
+ *
+ * @param estadosExistentes
+ */
public void setEstadosExistentes(ArrayList estadosExistentes) {
this.estadosExistentes = estadosExistentes;
}
diff --git a/src/cl/cromer/mt/Enlace.java b/src/cl/cromer/mt/Enlace.java
index e88f5f8..b54c74f 100644
--- a/src/cl/cromer/mt/Enlace.java
+++ b/src/cl/cromer/mt/Enlace.java
@@ -7,12 +7,23 @@
package cl.cromer.mt;
+/**
+ * Clase que funciona como enlaze entre dos estados ó asi mismo
+ */
public class Enlace {
private char si;
private char sj;
private char movimiento;
private Estado qj;
+ /**
+ * Contructor de la clase
+ *
+ * @param si Simbolo a analizar en la cadena
+ * @param qj Estado con que se enlaza
+ * @param sj Simbolo a escribir en la cadena
+ * @param move Movimiento del indice de la cadena
+ */
public Enlace(char si, Estado qj, char sj, char move) {
setMovimiento(move);
setSj(sj);
@@ -20,38 +31,83 @@ public class Enlace {
setSi(si);
}
+ /**
+ * Retorna simbolo a analizar
+ *
+ * @return simbolo
+ */
public char getSi() {
return this.si;
}
+ /**
+ * Asigna simbolo a analizar
+ *
+ * @param si
+ */
private void setSi(char si) {
this.si = si;
}
+ /**
+ * Retorna simbolo a escribir
+ *
+ * @return simbolo
+ */
public char getSj() {
return this.sj;
}
+ /**
+ * Asigna simbolo a escribir
+ *
+ * @param sj
+ */
public void setSj(char sj) {
this.sj = sj;
}
+ /**
+ * Retorna el movimiento del indice de la cadena
+ *
+ * @return simbolo caracteristico (R,L,E ó *)
+ */
public char getMovimiento() {
return this.movimiento;
}
+ /**
+ * Asigna el movimiento del indice
+ *
+ * @param movimiento simbolo caracteristico (R,L,E ó *)
+ */
public void setMovimiento(char movimiento) {
this.movimiento = movimiento;
}
+ /**
+ * Retorna el estado con que se enlaza
+ *
+ * @return estado siguiente
+ */
public Estado getQj() {
return qj;
}
+ /**
+ * Asigna el estado con que se enlaza
+ *
+ * @param qj estado siguiente
+ */
public void setQj(Estado qj) {
this.qj = qj;
}
+ /**
+ * Retorna la función de transición definida en un String
+ *
+ * @return String con la función
+ */
@Override
public String toString() {
return "," + si + ") = (q" + qj.getQ() + "," + sj + "," + movimiento + ")";
diff --git a/src/cl/cromer/mt/Estado.java b/src/cl/cromer/mt/Estado.java
index 07623ce..a13c20b 100644
--- a/src/cl/cromer/mt/Estado.java
+++ b/src/cl/cromer/mt/Estado.java
@@ -8,23 +8,50 @@ package cl.cromer.mt;
import java.util.ArrayList;
+/**
+ * Clase que almanecerá un estado con su subindices y sus enlaces adyacentes
+ */
public class Estado {
private final int q;
private final ArrayList enlaces;
+ /**
+ * Contructor de la clase
+ *
+ * @param q Subindice del estado
+ */
public Estado(int q) {
this.q = q;
enlaces = new ArrayList<>();
}
+ /**
+ * Retorna una lista con los enlaces de un estado
+ *
+ * @return ArrayList de Enlaces
+ */
public ArrayList getEnlaces() {
return enlaces;
}
+ /**
+ * Retorna el subindice asociado al estado
+ *
+ * @return Subindice
+ */
public int getQ() {
return q;
}
+ /**
+ * Crea un enlace entre dos estados ó a si mismo
+ *
+ * @param si Simbolo a analizar en la cadena
+ * @param qj Estado adyacente
+ * @param sj Simbolo que escribe en la cadena
+ * @param move Movimiento del cabezal (indice de la cadena)
+ * @return Verdadero si se creó, falso si ya existe
+ */
public boolean createLink(char si, Estado qj, char sj, char move) {
if (enlaces.isEmpty()) {
enlaces.add(new Enlace(si, qj, sj, move));
@@ -38,6 +65,11 @@ public class Estado {
return true;
}
+ /**
+ * Retorna un String con la/s función/es de transición asociado a un estado
+ *
+ * @return String con la/s función/es
+ */
@Override
public String toString() {
StringBuilder _return = new StringBuilder();
diff --git a/src/cl/cromer/mt/LeerXML.java b/src/cl/cromer/mt/LeerXML.java
index c9b6ce0..c4294d0 100644
--- a/src/cl/cromer/mt/LeerXML.java
+++ b/src/cl/cromer/mt/LeerXML.java
@@ -8,13 +8,15 @@
package cl.cromer.mt;
import org.w3c.dom.Document;
+import org.w3c.dom.NodeList;
+import javax.print.Doc;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.*;
/**
- * Esta clase puede abrir y validar un archivo de XML. Se necesita un archivo mtbase.dtd
+ * Esta clase puede abrir y validar un archivo de XML. Se necesita un archivo mtbase_.dtd
*/
class LeerXML {
/**
@@ -61,7 +63,10 @@ class LeerXML {
DocumentBuilder db = dbf.newDocumentBuilder();
documento = db.parse(archivo);
documento.getDocumentElement().normalize();
- return documento;
+ if(validarEtiquetas(documento)){
+ return documento;
+ }
+ return null;
}
catch (Exception e) {
if (e.getMessage().contains(".dtd")) {
@@ -111,10 +116,10 @@ class LeerXML {
BufferedReader br = new BufferedReader(new FileReader(original));
BufferedWriter bw = new BufferedWriter(new FileWriter(temp));
if ((aux = br.readLine()).startsWith("");
+ bw.write(aux + "\n");
}
else {
- bw.write("\n" + aux);
+ bw.write("\n" + aux);
}
for (aux = ""; aux != null; aux = br.readLine()) {
if (!aux.startsWith("