Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen – En el presente documento se realiza la construcción algunos métodos con el fin de optimizar el código. Por otro
tanto de un AFD como un AFND haciendo uso de dos lenguajes de lado, para la programación del segundo caso de estudio, se usa
programación. Para poder realizar esto, se realiza una Python haciendo uso de la librería “automata-lib”, la cual
investigación con el fin de poder conocer las diferentes implementa estructuras y algoritmos para autómatas finitos. El
herramientas existentes para el diseño de autómatas finitos. Para uso de las librerías para cualquier lenguaje de programación
ambos casos, con el fin de probar el correcto funcionamiento del
programa realizado tanto en Java como en Python, se realizan
proporciona algunas ventajas dentro de las cuales se encuentran
pruebas con la herramienta JFLAP. [3]:
Para la codificación del primer caso de estudio correspondiente
al desarrollo de un AFD se hace uso del IDE Eclipse, y para el caso • Estructura y organización del código predeterminada.
de estudio correspondiente al desarrollo de un AFND se hace uso • Reutilización de código.
del IDE Spyder. • Agilidad y rapidez en el desarrollo.
• Optimización de código.
Índice de Términos – AFND, AFD, Python, Java, JFLAP.
II. MATERIALES Y MÉTODOS
Para poder validar que la entrada sea aceptada por el autómata TABLA II
TRANSICIONES AFND CASO DE ESTUDIO
se hace uso de la función “accepts_input”, esta función se
Entrada
encuentra dentro de la subclase NFA, a la cual se le debe Estado
1 2 3
ingresar la cadena a evaluar. Esto se puede observar en la q0 q0, q1, q2 q0, q1, q2, q3 q0, q3
Imagen 2. Ejemplo validación entrada AFND.
q1 q4
q2 q2 q4
q3 q3 q3 q4
C. Construcción de un AF en Java
aceptación del autómata. este, poder realizar la comparación con el estado de aceptación
del autómata, en el caso de que estos dos sean iguales, se retorna
un mensaje el cual muestra que la cadena ingresada es aceptada,
D. Caso de estudio AFD en Java en caso contrario, se muestra un mensaje el cual muestra que la
cadena ingresad NO es aceptada.
Realizar un autómata finito no determinista que acepte cadenas
sobre el alfabeto {x, y} tal que las cadenas empiecen en “x” y Con el fin de poder realizar las pruebas respectivas para el
terminen con “xy”. correcto funcionamiento del autómata programado se realiza la
Con el fin de poder entender de mejor manera el creación de un ArrayList el cual cuenta con 28 cadenas, estas
funcionamiento del AFND como primera medida, se realiza el mismas cadenas se prueban en el AFD realizado en JFLAP, los
diseño gráfico de este en JFLAP para así poder determinar resultados se pueden ver en la Imagen 11. Pruebas AFD JFLAP
todos los elementos necesarios para realizar la programación de y en la Imagen 12. Prueba AFD en Java.
este en Java. La representación gráfica de este se puede ver en
la Imagen 10. AFD caso de estudio Java.
• Estado_inicial: 1
• Estado_final: 5
• Alfabeto: {x, y}
TABLA IV
TRANSICIONES AFD CASO DE ESTUDIO
Entrada
Estado
x y
1 3 2
2 2 2
3 3 4
4 5 4 Imagen 12. Pruebas AFD en Java
5 3 4
Con el resultado de las imágenes anteriores se puede observar
que las cadenas ingresadas tanto en JFLAP como en Java tienen
Luego de tener claras las transiciones del AFD se realiza la el mismo resultado de aceptación del autómata.
definición tanto del estado final como del estado inicial, en este
caso, estos se guardan dentro de una variable tipo “int”. Ya Con el fin de realizar pruebas con cadenas diferentes a las
sabiendo esto, se procede a realizar las respectivas transiciones ingresadas de manera predeterminada se realiza un pequeño
del autómata las cuales se encuentran se describen en la Tabla menú el cual cuenta con tres opciones:
IV Transiciones AFD caso de estudio. Estas se realizan
haciendo uso del ciclo iterativo “while” y dentro de este se • 1 para verificar cadenas predeterminadas.
empiezan a comparar cada uno de los caracteres y los estados • 2 para verificar una nueva cadena.
del autómata para saber cuá006C es el siguiente estado al que • 3 para salir.
tiene que pasar la cadena a evaluar, luego de realizar la
comparación de todos los caracteres de la cadena, el método Esto se puede observar en la Imagen 13. Menú de opciones
retorna el valor del estado en el que termina la cadena para con
201910632 5
REFERENCIAS
[1] “AUTOMATAS FINITOS”.
[2] “G H D.”
https://www.institucional.frc.utn.edu.ar/sistemas/ghd/
T-M-AFD.htm (accessed Jul. 07, 2022).
[3] tiThink, “Framework o librerías: ventajas y
desventajas View Larger Image.” Framework o
librerías: ventajas y desventajas View Larger Image
(accessed Jul. 07, 2022).
[4] “autómatas-lib · PyPI.”
https://pypi.org/project/automata-lib/#class-nfafa
Imagen 13.Menú de opciones
(accessed Jul. 06, 2022).
Si el usuario selecciona la opción 1 el resultado que se mostrará
en pantalla se puede ver en la Imagen 12. Prueba AFD en Java.
Mientras que, para el caso de la opción 2, se mostrará una
ventana en la cual el usuario debe escribir la cadena la cual
quiere evaluar, luego de esto, se mostrará un mensaje que puede
ser: Aceptado o No aceptado. Esto se puede ver en la Imagen
14. Comprobación cadena ingresada por el usuario.
IV. CONCLUSIONES
• La programación de un AFND en Python resulta
bastante sencilla gracias a la implementación de la
librería correspondiente.
• Con el uso de la librería que brinda Python para
realizar AFD y AFDN los programas desarrollados
brindan más optimización y sencillez en el código.
• Se determinó, que para el desarrollo de los dos
programas desarrollados fue necesario identificar cada
uno de los elementos de la quíntupla que compone un
autómata ya que estos son necesarios a la hora de
realizar la codificación del código.
• Se logró evidenciar que suele ser conveniente la
implementación de diferentes métodos a la hora de
desarrollar un programa, ya que, a la hora de realizar
modificaciones dentro del programa es más sencillo
poder encontrar la parte a modificar, mientras que, si
se hace el código de manera secuencial, estas
modificaciones se vuelven más tediosas y toman más
tiempo.
• Se identificó que, para la programación de un AFD
como un AFND es más recomendable hacer uso de
Python ya que este cuenta con librerías para realizar
estos diseños, haciendo que el programa sea más
entendible y optimo.