Implementados metodos para reorganizar los estados en un ArrayList de Estados y a su vez los enlaces en un ArrayList de enlaces (Lista de adyacencia)
This commit is contained in:
parent
66284f875a
commit
75083921a0
98
src/mt/Automata.java
Normal file
98
src/mt/Automata.java
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
package mt;
|
||||||
|
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
class Enlace{
|
||||||
|
char si;
|
||||||
|
char sj;
|
||||||
|
char movimiento;
|
||||||
|
Estado qj;
|
||||||
|
|
||||||
|
public Enlace(char si,Estado qj,char sj, char move){
|
||||||
|
setMovimiento(move);
|
||||||
|
setSj(sj);
|
||||||
|
setQj(qj);
|
||||||
|
setSi(si);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSi(char si){
|
||||||
|
this.si = si;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setSj(char sj){
|
||||||
|
this.sj = sj;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setMovimiento(char movimiento){
|
||||||
|
this.movimiento = movimiento;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setQj(Estado qj){
|
||||||
|
this.qj = qj;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
return ","+si+") = (q"+qj.q+","+sj+","+movimiento+")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Estado{
|
||||||
|
int q;
|
||||||
|
ArrayList<Enlace> link;
|
||||||
|
|
||||||
|
public Estado(int q) {
|
||||||
|
this.q = q;
|
||||||
|
link = new ArrayList<Enlace>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean createLink(char si,Estado qj,char sj, char move){
|
||||||
|
if(link.isEmpty()) link.add(new Enlace(si,qj,sj,move));
|
||||||
|
for(int i=0;i<link.size();i++){
|
||||||
|
if(link.get(i).si == si) return false;
|
||||||
|
}
|
||||||
|
link.add(new Enlace(si,qj,sj,move));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString(){
|
||||||
|
String _return = "";
|
||||||
|
for(int i=0; i<link.size();i++){
|
||||||
|
_return += "(q"+q+link.get(i)+"\n";
|
||||||
|
}
|
||||||
|
return _return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class Automata {
|
||||||
|
ArrayList<Estado> estados;
|
||||||
|
public Automata(Document document){
|
||||||
|
estados = new ArrayList<Estado>();
|
||||||
|
Estado aux;
|
||||||
|
for(int i=0;i<document.getElementsByTagName("transicion").getLength();i++){
|
||||||
|
char move = document.getElementsByTagName("movimiento").item(i).getTextContent().charAt(0);
|
||||||
|
if(move == 'E' || move == 'R' || move == 'L' || move == '*'){
|
||||||
|
int qi = Integer.parseInt(document.getElementsByTagName("qi").item(i).getTextContent());
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
System.out.println("Movimiento invalido de cinta");
|
||||||
|
System.exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -30,6 +30,10 @@ class LeerXML {
|
|||||||
* @return Devuelve un document de XML o null si hay algun error.
|
* @return Devuelve un document de XML o null si hay algun error.
|
||||||
*/
|
*/
|
||||||
Document leerArchivo(File archivo) {
|
Document leerArchivo(File archivo) {
|
||||||
|
if(archivo == null){
|
||||||
|
System.out.println("No se ha seleccionado archivo");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (!archivo.exists() || !archivo.getName().endsWith(".xml")) {
|
if (!archivo.exists() || !archivo.getName().endsWith(".xml")) {
|
||||||
System.out.println("Archivo " + archivo.getName() + " no existe o no es compatible");
|
System.out.println("Archivo " + archivo.getName() + " no existe o no es compatible");
|
||||||
return null;
|
return null;
|
||||||
@ -160,7 +164,7 @@ class LeerXML {
|
|||||||
* @throws SAXException La excepción thrown
|
* @throws SAXException La excepción thrown
|
||||||
*/
|
*/
|
||||||
public void error(SAXParseException e) throws SAXException {
|
public void error(SAXParseException e) throws SAXException {
|
||||||
System.out.println(e.getMessage());
|
//System.out.println(e.getMessage());
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +176,7 @@ class LeerXML {
|
|||||||
* @throws SAXException La excepción thrown
|
* @throws SAXException La excepción thrown
|
||||||
*/
|
*/
|
||||||
public void fatalError(SAXParseException e) throws SAXException {
|
public void fatalError(SAXParseException e) throws SAXException {
|
||||||
System.out.println(e.getMessage());
|
//System.out.println(e.getMessage());
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -193,7 +197,7 @@ class LeerXML {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void error(org.xml.sax.SAXParseException e) {
|
public void error(org.xml.sax.SAXParseException e) {
|
||||||
System.out.println(e.getMessage());
|
//System.out.println(e.getMessage());
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -204,7 +208,7 @@ class LeerXML {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void fatalError(org.xml.sax.SAXParseException e) {
|
public void fatalError(org.xml.sax.SAXParseException e) {
|
||||||
System.out.println(e.getMessage());
|
//System.out.println(e.getMessage());
|
||||||
error = true;
|
error = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,8 @@ public class MT extends Application {
|
|||||||
* @param primaryStage La ventana principal
|
* @param primaryStage La ventana principal
|
||||||
* @throws Exception La excepción
|
* @throws Exception La excepción
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static Machine machine;
|
||||||
@Override
|
@Override
|
||||||
public void start(final Stage primaryStage) throws Exception{
|
public void start(final Stage primaryStage) throws Exception{
|
||||||
//Parent root = FXMLLoader.load(getClass().getResource("mt.fxml"));
|
//Parent root = FXMLLoader.load(getClass().getResource("mt.fxml"));
|
||||||
@ -47,15 +49,11 @@ public class MT extends Application {
|
|||||||
File archivo = fileChooser.showOpenDialog(primaryStage);
|
File archivo = fileChooser.showOpenDialog(primaryStage);
|
||||||
LeerXML xml = new LeerXML();
|
LeerXML xml = new LeerXML();
|
||||||
Document document = xml.leerArchivo(archivo);
|
Document document = xml.leerArchivo(archivo);
|
||||||
if (document != null) {
|
if(document != null) {
|
||||||
System.out.println(document.getDocumentElement().getNodeName());
|
machine = new Machine(document);
|
||||||
for(int i=0;i<document.getElementsByTagName("transicion").getLength();i++){
|
for(int i=0; i<machine.machine.estados.size();i++){
|
||||||
System.out.println("("+document.getElementsByTagName("qi").item(i).getTextContent()+","+
|
System.out.println(machine.machine.estados.get(i));
|
||||||
document.getElementsByTagName("si").item(i).getTextContent()+") = ("+
|
}
|
||||||
document.getElementsByTagName("qj").item(i).getTextContent()+","+
|
|
||||||
document.getElementsByTagName("sj").item(i).getTextContent()+","+
|
|
||||||
document.getElementsByTagName("movimiento").item(i).getTextContent()+")");
|
|
||||||
}//Ciclo base para obtener la función completa de las transiciones
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -6,6 +6,11 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
package mt;
|
package mt;
|
||||||
|
import org.w3c.dom.Document;
|
||||||
|
|
||||||
public class Controller {
|
public class Machine {
|
||||||
|
Automata machine;
|
||||||
|
public Machine(Document document){
|
||||||
|
machine = new Automata(document);
|
||||||
|
}
|
||||||
}
|
}
|
95
xmltest/TuringIgual0sIgual1s.xml
Normal file
95
xmltest/TuringIgual0sIgual1s.xml
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE root SYSTEM "mtbase.dtd">
|
||||||
|
<root>
|
||||||
|
<transicion>
|
||||||
|
<qi>0</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>X</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>1</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>1</qi>
|
||||||
|
<si>Y</si>
|
||||||
|
<qj>1</qj>
|
||||||
|
<sj>Y</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>1</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>2</qj>
|
||||||
|
<sj>Y</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>2</qi>
|
||||||
|
<si>X</si>
|
||||||
|
<qj>0</qj>
|
||||||
|
<sj>X</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>2</qi>
|
||||||
|
<si>0</si>
|
||||||
|
<qj>2</qj>
|
||||||
|
<sj>0</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>2</qi>
|
||||||
|
<si>#</si>
|
||||||
|
<qj>3</qj>
|
||||||
|
<sj>#</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>2</qi>
|
||||||
|
<si>1</si>
|
||||||
|
<qj>2</qj>
|
||||||
|
<sj>1</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>2</qi>
|
||||||
|
<si>Y</si>
|
||||||
|
<qj>2</qj>
|
||||||
|
<sj>Y</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>3</qi>
|
||||||
|
<si>Y</si>
|
||||||
|
<qj>3</qj>
|
||||||
|
<sj>Y</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>3</qi>
|
||||||
|
<si>X</si>
|
||||||
|
<qj>4</qj>
|
||||||
|
<sj>X</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>4</qi>
|
||||||
|
<si>X</si>
|
||||||
|
<qj>4</qj>
|
||||||
|
<sj>X</sj>
|
||||||
|
<movimiento>L</movimiento>
|
||||||
|
</transicion>
|
||||||
|
<transicion>
|
||||||
|
<qi>4</qi>
|
||||||
|
<si>#</si>
|
||||||
|
<qj>5</qj>
|
||||||
|
<sj>#</sj>
|
||||||
|
<movimiento>R</movimiento>
|
||||||
|
</transicion>
|
||||||
|
</root>
|
Loading…
Reference in New Issue
Block a user