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.
|
||||
*/
|
||||
Document leerArchivo(File archivo) {
|
||||
if(archivo == null){
|
||||
System.out.println("No se ha seleccionado archivo");
|
||||
return null;
|
||||
}
|
||||
if (!archivo.exists() || !archivo.getName().endsWith(".xml")) {
|
||||
System.out.println("Archivo " + archivo.getName() + " no existe o no es compatible");
|
||||
return null;
|
||||
@ -160,7 +164,7 @@ class LeerXML {
|
||||
* @throws SAXException La excepción thrown
|
||||
*/
|
||||
public void error(SAXParseException e) throws SAXException {
|
||||
System.out.println(e.getMessage());
|
||||
//System.out.println(e.getMessage());
|
||||
error = true;
|
||||
}
|
||||
|
||||
@ -172,7 +176,7 @@ class LeerXML {
|
||||
* @throws SAXException La excepción thrown
|
||||
*/
|
||||
public void fatalError(SAXParseException e) throws SAXException {
|
||||
System.out.println(e.getMessage());
|
||||
//System.out.println(e.getMessage());
|
||||
error = true;
|
||||
}
|
||||
|
||||
@ -193,7 +197,7 @@ class LeerXML {
|
||||
*/
|
||||
@Override
|
||||
public void error(org.xml.sax.SAXParseException e) {
|
||||
System.out.println(e.getMessage());
|
||||
//System.out.println(e.getMessage());
|
||||
error = true;
|
||||
}
|
||||
|
||||
@ -204,7 +208,7 @@ class LeerXML {
|
||||
*/
|
||||
@Override
|
||||
public void fatalError(org.xml.sax.SAXParseException e) {
|
||||
System.out.println(e.getMessage());
|
||||
//System.out.println(e.getMessage());
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
|
@ -30,6 +30,8 @@ public class MT extends Application {
|
||||
* @param primaryStage La ventana principal
|
||||
* @throws Exception La excepción
|
||||
*/
|
||||
|
||||
static Machine machine;
|
||||
@Override
|
||||
public void start(final Stage primaryStage) throws Exception{
|
||||
//Parent root = FXMLLoader.load(getClass().getResource("mt.fxml"));
|
||||
@ -47,16 +49,12 @@ public class MT extends Application {
|
||||
File archivo = fileChooser.showOpenDialog(primaryStage);
|
||||
LeerXML xml = new LeerXML();
|
||||
Document document = xml.leerArchivo(archivo);
|
||||
if (document != null) {
|
||||
System.out.println(document.getDocumentElement().getNodeName());
|
||||
for(int i=0;i<document.getElementsByTagName("transicion").getLength();i++){
|
||||
System.out.println("("+document.getElementsByTagName("qi").item(i).getTextContent()+","+
|
||||
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
|
||||
}
|
||||
if(document != null) {
|
||||
machine = new Machine(document);
|
||||
for(int i=0; i<machine.machine.estados.size();i++){
|
||||
System.out.println(machine.machine.estados.get(i));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
button.addEventFilter(MouseEvent.MOUSE_CLICKED,eventHandler);
|
||||
|
@ -6,6 +6,11 @@
|
||||
*/
|
||||
|
||||
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