Autómata en Java
Autómata en Java
Autómata en Java
CONTENIDO
INTRODUCCIÓN .............................................................................................................................. 2
AUTÓMATA HA PROGRAMAR..................................................................................................... 2
ANÁLISIS ........................................................................................................................................... 3
RECURSIVIDAD........................................................................................................................... 3
DIAGRAMA DE FLUJO ............................................................................................................... 3
PROGRAMACIÓN EN JAVA .......................................................................................................... 4
Primer Método “Status 1”. ........................................................................................................... 4
Segundo Método “Status 2” ........................................................................................................ 6
Tercer Método “Status 3”. ........................................................................................................... 6
1
Lenguajes y Autómatas - Alberto García Rojas
INTRODUCCIÓN
En la presente actividad, vamos a desarrollar un autómata programado en lenguaje
java. Los recursos que utilizaremos son: Frames para la interfaz gráfica de usuario,
diagrama de flujo para el análisis del autómata, y el autómata que nos han
proporcionado.
AUTÓMATA HA PROGRAMAR.
El autómata que vamos a programar es el siguiente:
∑ = {a, b, c, d}
El diagrama es el siguiente.
Con ayuda del diagrama podemos analizar una cadena entrante y comprobar si es
aceptada o no.
2
Lenguajes y Autómatas - Alberto García Rojas
ANÁLISIS
El autómata tiene 6 estados, en 3 de ellos (q2, q4 y q5) hay ciclos, por esto, una
estructura hecha por medio de condicionales no funciona, porque en dichos ciclos
podemos repetir el carácter infinidad de veces. Debido a esto, pensé que cada
estado seta un método, al hacerlo así, podemos utilizar la recursividad y esto nos
permitirá regresar a un estado tantas veces como necesitemos.
RECURSIVIDAD
La recursividad es una herramienta de programación que ayuda a crear ciclos, como
un for o un while, pero en un método recursivo dicho método se llama a sí mismo, y
esto es lo que crea el ciclo.
DIAGRAMA DE FLUJO
El siguiente diagrama representa el camino que sigue cada carácter de la cadena,
para comprobar si ésta es aceptada o no.
3
Lenguajes y Autómatas - Alberto García Rojas
PROGRAMACIÓN EN JAVA
Para iniciar el programa en java, vamos a enlistar lo que necesitaremos:
if (s.charAt(index) == 'a') {
status2(s, index + 1, size - 1);
}
if (s.charAt(index) == 'b') {
status3(s, index + 1, size - 1);
}
}
La cadena “s” es el texto introducido por el usuario, el cual lo tomamos del “text field”
como se muestra en la figura 1.
4
Lenguajes y Autómatas - Alberto García Rojas
Figura 1.
1. La cadena en sí.
2. El índice con el cual queremos iniciar el análisis, éste siempre será 0.
3. El tamaño de la cadena, que en este ejemplo es 3
Dicho lo anterior, vamos a explicar que hace el método en sí. Como podemos
observar en el autómata, el estado inicial solo acepta una ‘a’ o ‘b’. Mediante las
estructuras de control “if” comprobamos que la entrada sea ‘a’ o ‘b’, de lo contrario
la cadena no será válida porque el programa no continuará a ningún otro estado y
5
Lenguajes y Autómatas - Alberto García Rojas
la variable booleana esta definida en “false”. Dicha variable es la que cambia según
la cadena sea aceptada o no.
Podemos observar que este método puede ejecutar otros 2 métodos. “Status 2” y
“Status 3” dependiendo del valor de entrada.
try {
if (s.charAt(index) == 'c') {
status2(s, index + 1, size - 1);
} else {
isAcepted = false;
}
if (s.charAt(index) == 'd') {
status1(s, index + 1, size - 1);
}
} catch (Exception e) {
isAcepted = false;
}
}
6
Lenguajes y Autómatas - Alberto García Rojas
try {
if (s.charAt(index) == 'c') {
status4(s, index + 1, size - 1);
} else {
isAcepted = false;
}
if (s.charAt(index) == 'd') {
status5(s, index + 1, size - 1);
}
} catch (Exception e) {
isAcepted = false;
}
}
try {
if (s.charAt(index) == 'a') {
status4(s, index + 1, size - 1);
} else {
isAcepted = false;
}
if (s.charAt(index) == 'c') {
status6_final(size - 1);
}
} catch (Exception e) {
isAcepted = false;
}
}
7
Lenguajes y Autómatas - Alberto García Rojas
try {
if (s.charAt(index) == 'a') {
status4(s, index + 1, size - 1);
} else {
isAcepted = false;
}
if (s.charAt(index) == 'c') {
status6_final(size - 1);
}
} catch (Exception e) {
isAcepted = false;
}
}
8
Lenguajes y Autómatas - Alberto García Rojas