Las tablas de transición de estados:
Son normalmente tablas de dos dimensiones. Hay dos formas comunes para construirlas.
La dimensión vertical: Indica los Estados Actuales,
La dimensión horizontal: indica eventos, y las celdas (intersecciones fila/columna) de la tabla contienen el siguiente estado si ocurre un evento (y posiblemente la acción enlazada a esta transición de estados)
En el siguiente código se muestra un autómata con su tabla de transición.
Tabla de Dos dimensiones:
Estados:
el codigo esta elaborado en netbeans 6.9
package automatas;
public class Automata {
int cont;
boolean aceptada;/*para guardar los caratcteres y los va ir separando*/
char [] car;
public static void main(String[]args){
Automata aut= new Automata();
String cadena = "abab";
aut.car=cadena.toCharArray();
aut.inicio();
}
public void inicio (){ /*metodo*/
cont = 0;
aceptada = false;
q0();/*irnos al codigo 0 */
}
public void q0(){
System.out.println("En q0";/*imprimimos y decimos que estamos en q0*/
if(cont < car.length){/*cuantos espacios tiene mi arreglo*/
if(car[cont]=='a'){/*el arreglo car en el contador 0 lo vamos a comparar si es = a*/
cont++;/*incrememnto mi contador*/
q0();/*si no lo dejo en 0*/
}else if (car[cont]=='b'){/*si es una b me muevo al q1*/
cont++;
q1();/*nos va a mover al estado uno*/
}
}
}
public void q1(){
System.out.println("En q1";
if(cont < car.length){/*cuantos espacios tiene mi arreglo*/
if(car[cont]=='a'){/*el arreglo car en el contador 0 lo vamos a comparar si es = a*/
cont++;
q1();
}else if (car[cont]=='b'){
cont++;
q2();/*nos va a mover al estado uno*/
}
}
}
public void q2(){
System.out.println("En q2";
if(cont < car.length){/*cuantos espacios tiene mi arreglo*/
if(car[cont]=='a'){/*el arreglo car en el contador 0 lo vamos a comparar si es = a*/
cont++;
q2();
}else if (car[cont]=='b'){
cont++;
q3();/*nos va a mover al estado uno*/
}
}
}
public void q3(){
System.out.println("En q3 cadena aceptada";
aceptada = true;/*que es aceptada*/
if(cont < car.length){/*cuantos espacios tiene mi arreglo*/
if(car[cont]=='a'){/*el arreglo car en el contador 0 lo vamos a comparar si es = a*/
cont++;
q3();
}else if (car[cont]=='b'){
cont++;
qError();/*nos va a mover al estado uno*/
}
}
}
public void qError(){
System.out.println("Error";
aceptada = false;/*restablecemos nuestra bandera */
return;/*regresamos*/
}
}
ESPERO LES SIRVA ESTE PEQUEÑO AUTÓMATA.
NOTA: el código esta bastante fácil, la cadena de caracteres se puede mostrar la que su profesor les pida o ustedes ingresen.
Explicación tabla y codigo
Estoy en q0 y llega una a me quedo en q0, si entra una b avanzo a q1
estoy en q1 y llega una a me quedo en q1, si entra una b avanzo a q2
Estoy en q2 y llega una a me quedo en q2, si entra una b avanzo a q3
Estoy en q3 y llega una a me quedo en q3, si entra una b avanzo a qerror
Estoy en qerror y llega cualquier instrucción me marca error

