Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Memoria
Memoria
INDICE
1. Resumen ...................................................................................................................... 1 1.1 TALFi (Versin en castellano) ............................................................................ 1 1.2 TALFi (English version) ...................................................................................... 1 2. Objetivos ...................................................................................................................... 3 3. Informacin ................................................................................................................. 5 3.1 Antecedentes ......................................................................................................... 5 3.2 Introduccin terica a la aplicacin .................................................................... 5 3.3 Viabilidad .............................................................................................................. 8 3.4 Ejercicios posibles ................................................................................................. 8 3.4.1 Ejercicios automticos ................................................................................... 8 3.4.2 Ejercicios no automticos ........................................................................... 33 3.5 Requisitos tecnolgicos ....................................................................................... 33 3.6 Entorno de desarrollo......................................................................................... 33 3.7 Bibliotecas usadas ............................................................................................... 33 3.8 Arquitectura de la aplicacin ............................................................................ 34 3.9 Pruebas del Sistema ............................................................................................ 34 3.10 Implementacin y cierre del proyecto ............................................................ 34 3.11 Posible trabajo futuro ...................................................................................... 35 4. Descripcin de la aplicacin .................................................................................... 39 4.1. Patrones de diseo ............................................................................................. 39 4.2 Visin terica de la Aplicacin .......................................................................... 40 4.3. Diagramas UML ................................................................................................ 45 4.5 Suposiciones y dependencias ............................................................................. 53 4.6 Bases de datos ..................................................................................................... 54 4.6.1 Base de datos de usuarios............................................................................ 54 4.6.2 Base de datos de ejemplos y ejercicios ....................................................... 55 5. Manual de usuario .................................................................................................... 57 5.1 Perfiles de usuario .............................................................................................. 57 5.2 Ejecucin de algoritmos ..................................................................................... 57 5.3 Sistema de proposicin y evaluacin de ejercicios ........................................... 61 5.4 Cambiar propiedades de los estados y aristas.................................................. 63 5.5 Copiar, cortar y pegar ........................................................................................ 65 5.6 Seleccionar parte de un autmata. Interaccin ............................................... 66 5.7 Almacenar y recuperar autmatas y ejercicios. Adjuntarlos a la BD ........... 68 5.7.1 Guardar/Recuperar autmatas dibujados ................................................ 68 5.7.2 Recuperar ejercicios .................................................................................... 71 5.8 Aclaraciones finales ............................................................................................ 72 6. Planificacin temporal del proyecto ....................................................................... 73 6.1. Diagrama de Gantt ............................................................................................ 73 6.2. Resumen de la planificacin temporal ............................................................. 73 7. Glosario de trminos ................................................................................................ 75 8. Palabras clave ........................................................................................................... 77 9. Conclusin ................................................................................................................. 79 10. Bibliografa .............................................................................................................. 81 Anexos ............................................................................................................................ 83 Anexo 1. Listado de rdenes de la aplicacin por consola .................................... 85 Anexo 2. WEB Applet de la aplicacin ................................................................... 87 Anexo 3. JavaDoc...................................................................................................... 89 Anexo 4. Estructura archivos XML ........................................................................ 91
TALFi
Captulo 1.
Resumen
1.1 TALFi (Versin en castellano)
TALFi es una aplicacin cuyo objetivo es ser una herramienta para el aprendizaje y el uso de diversos algoritmos aplicados al tratamiento de autmatas. Con TALFi podemos crear autmatas y ver sus transformaciones en otros autmatas, gracias a los diferentes algoritmos que se pueden aplicar sobre ellos. Es una herramienta de fcil uso, capaz de ser usada en un terminal o bajo una interfaz grfica. La aplicacin se puede ejecutar bajo previa instalacin en un equipo o va internet. TALFi dispone de una base de datos con diversos ejemplos de autmatas, la cual puede ser ampliada por el usuario con nuevos autmatas creados por l mismo. Adems la aplicacin posee una base de datos con ejercicios que tambin puede ser extendida, pero en este caso slo por el administrador. La aplicacin est pensada para ser una herramienta de ayuda para los estudiantes que cursen asignaturas donde se traten temas de lenguajes formales y autmatas.
TALFi
Captulo 2.
Objetivos
El objetivo principal de la aplicacin es ser una herramienta til de estudio para los estudiantes de asignaturas que traten sobre autmatas y las diferentes interacciones entre ellos. Como el motivo docente es evidente, hemos implementado una herramienta visual, donde el usuario puede interaccionar en una interfaz grfica, en donde se muestra todo el potencial de la aplicacin. Otro de los objetivos es que los alumnos, o usuarios, puedan con TALFi resolver ejercicios de autmatas de manera automtica y servirse de dicha herramienta para averiguar la correccin o incorreccin de sus soluciones. Por tanto, la solucin que les mostrar nuestra herramienta se podr utilizar tanto para averiguar cmo se realiza un ejercicio, como para comprobar la solucin propia averiguando en que paso se ha cometido un error o si sta es correcta. Para poder cumplir estos objetivos creemos conveniente que la aplicacin implemente todos los algoritmos automticos de la parte de lenguajes regulares. Es decir, cualquier transformacin entre los distintos de autmatas finitos y las expresiones regulares. Por lo tanto, nuestra aplicacin permitir generar un ciclo, pasando por todos los autmatas y expresiones regulares. Esta transformacin se realizar siguiendo el siguiente esquema: AFND- AFND AFD ER
Tambin nos parece interesante que nuestra aplicacin permita minimizar los AFD. De esta forma se podr comprobar la equivalencia entre iguales. Esta equivalencia se lograr a travs de la transformacin de cualquiera de ellos en el correspondiente AFD mnimo y se comprobar la igualdad entre los autmatas finitos deterministas correspondientes. La codificacin de la aplicacin se enfocara en dos partes diferenciadas: una que corresponde con la lgica de los algoritmos y de la aplicacin en general y otra que corresponder con la parte de interaccin con el usuario y muestra de resultados. En una primera etapa bajo una vista por consola y a posteriori con una interfaz grfica de usuario amigable y de fcil manejo. La consola utilizar el enfoque UNIX ya que es un estndar muy usado en la actualidad y conocido por todo el mundo. La aplicacin grfica generar rdenes de consola automticamente en funcin de la seleccin del usuario. De esta manera ser posible realizar mejoras en la codificacin de la interfaz sin tener que modificar la lgica de la aplicacin, ya sea creando diferentes interfaces grficas sobre la misma consola o modificando la existente. Hay que tener en cuenta que pretendemos que la aplicacin sea fcilmente mejorada y ampliada con nuevos autmatas, mquinas de Turing y otros conocimientos que se estudian en Teora de Autmatas que no se han tenido en esta. Por tanto, implementaremos el cdigo de los algoritmos e interfaz grfica con vistas a posibles mejoras y ampliaciones futuras. Adems dicho cdigo deber estar documentado con el
TALFi
fin de que pueda ser fcilmente reutilizable en futuros proyectos de ampliacin y mejora. Una de nuestras pretensiones es que dicha aplicacin no slo sea utilizada por los alumnos de nuestra universidad, sino que pueda ser utilizada en otras universidades. Para ello, y con el fin de ampliar el pblico que pueda utilizarla, la aplicacin debe ser traducible a diferentes idiomas. Adems, deber ser posible cambiar de un idioma a otro dinmicamente en cualquier momento durante el uso de la aplicacin y tambin deber ser sencilla la traduccin de la aplicacin o otros idiomas. Por ltimo, pretendemos que la aplicacin pueda ser utilizada para el desarrollo de ejercicios a distancia y permita un control individualizado sobre los conocimientos de cada uno de sus usuarios. Para ello, permitir un seguimiento a los alumnos en base a la resolucin de ejercicios, que se corrigen automticamente. Esto se lograr guardando informacin en la base de datos de los ejercicios que cada alumnos haya realizado correcta e incorrectamente.
TALFi
Captulo 3.
Informacin
3.1 Antecedentes
No conocemos ningn antecedente directo o indirecto de una aplicacin que trate el tema de los autmatas con la intencin docente que le hemos dado nosotros. Precisamente por ello elegimos ste proyecto, ya que nos gustaba la idea de crear algo que ayudara a los alumnos en su estudio de autmatas. Si bien no existe ninguna herramienta con marcado carcter docente de este tipo, si que existe una llamada JFLAP de la que nuestro proyecto toma ciertas ideas intuitivas a la hora del diseo de la interfaz grfica, ya que en s la que plantea dicha herramienta nos parece sencilla en cuanto a su manejo. Sin embargo hemos aadido mucha funcionalidad a la parte grfica y desarrollado los algoritmos desde cero con la intencin docente de que los alumnos puedan visualizar los pasos al aplicar cualquier algoritmo, opcin no disponible en JFLAP. Existen otras aplicaciones desarrolladas en la misma lnea, como por ejemplo: - dk.brics.automaton Es un paquete de Java que contiene una implementacin de autmatas con estados finitos que soportan operaciones con expresiones regulares. Se puede descargar gratuitamente desde la pgina web: http://www.brics.dk/automaton/ - Visual automata Simulator Herramienta para la simulacin, visualizacin y transformacin de autmatas finitos y mquinas de Turing. Se puede descargar gratuitamente desde la pgina web: http://www.versiontracker.com/dyn/moreinfo/win/35508 - Proyecto SEPa! Proyecto que busca la creacin de una herramienta conjunta de simulacin de autmatas y traductores de lenguajes formales. Se puede descargar gratuitamente desde la pgina web: http://www.ucse.edu.ar/fma/sepa/
TALFi
(conjunto de caracteres) finito. El nombre lenguaje se justifica porque las estructuras que con ste se forman tienen reglas de sintaxis (gramtica) e interpretacin semntica (significado) en una forma muy similar a los lenguajes hablados o naturales. Un posible alfabeto sera, digamos, , y una cadena cualquiera sobre este alfabeto sera, por ejemplo, . Un lenguaje sobre este alfabeto, que incluyera esta cadena, sera por ejemplo el conjunto de todas las cadenas que contienen el mismo nmero de smbolos que . La palabra vaca (esto es, la cadena de longitud cero) se permite en este tipo de lenguajes. Para referirnos a ella usamos el smbolo , o simplemente la llamaremos lambda. A diferencia de lo que ocurre con el alfabeto (que es un conjunto finito) y con cada palabra (que tiene una longitud tambin finita), un lenguaje puede estar compuesto por un nmero infinito de palabras. El concepto de autmata Un autmata es un modelo matemtico para una mquina de estado finita (Finite State Machines, FSM sus siglas en ingls). Una FSM es una mquina que, dada una entrada de smbolos, "salta" a travs de una serie de estados de acuerdo a una funcin de transicin (que puede ser expresada como una tabla). En la variedad comn "Mealy" de FSMs, esta funcin de transicin dice al autmata a qu estado cambiar dados unos determinados estado y smbolo. En este proyecto, nicamente hemos tratado autmatas finitos. Hay 3 tipos de autmatas finitos: Autmata finito determinista (AFD) Cada estado de un autmata de este tipo tiene una transicin por cada smbolo del alfabeto desde cada estado. As, por ejemplo, si partimos del alfabeto {0,1}, el autmata que se presenta a continuacin sera un autmata finito determinista que reconoce la palabras que contienen un nmero par de ceros.
Autmata finito no determinista (AFND) Los estados de un autmata de este tipo pueden tener varias transiciones por cada smbolo del alfabeto desde el mismo estado. El autmata acepta una palabra si existe al menos un camino desde el estado inicial a un estado final etiquetado con la palabra de entrada. Si una transicin no est definida, de manera que el autmata no puede saber cmo continuar leyendo la entrada, la palabra es rechazada. Autmata finito no determinista, con transiciones (AFND-) Adems de ser capaz de alcanzar ms de un estado leyendo un smbolo, igual que el AFND, permite alcanzar otro estado sin leer ningn smbolo. Si un estado tiene transiciones etiquetadas con , entonces el AFND- puede encontrarse en cualquier de
TALFi
los estados alcanzables por las transiciones , directamente o a trav s de otros estados con transiciones . El conjunto de estados que pueden ser alcanzados mediante este mtodo desde un estado q, se denomina el cierre lambda de q. El autmata que se presenta a continuacin parte del alfabeto de entrada {0,1} y reconoce las palabras que contienen una cantidad par de ceros o de unos.
Todos estos tipos de autmatas (AFD, AFND y AFND-) aceptan los mismos lenguajes, es decir, los lenguajes regulares. Por lo tanto, siempre se puede construir un AFD que acepte el mismo lenguaje que el dado por un AFND o que un AFND- y al revs. Expresin regular sobre un alfabeto (ER) Una expresin regular describe un conjunto de cadenas sin enumerar sus elementos. Toda expresin regular bsicamente se puede ver como una cadena formada por las letras del alfabeto y ciertos operadores. Para que la cadena sea considerada una expresin regular deber seguir una construccin gramatical correcta. A continuacin presentamos las reglas para la construccin de expresiones regulares de manera recursiva: 1. , la palabra vaca, es una expresin regular. En nuestra aplicacin la palabra vaca se representa con el smbolo 2. es una expresin regular tambin, que identifica el conjunto vaco de palabras que se reconocen, es decir, ninguna. 3. Cualquier letra perteneciente al alfabeto es una expresin regular en s misma. Dadas las anteriores expresiones regulares, consideremos ahora que E y F son expresiones regulares correctamente formadas entonces: 4. E + F (operacin de suma) es tambin una expresin regular. 5. EF o EF (operacin de concatenacin) es una expresin regular correcta. En nuestra aplicacin optaremos por la segunda representacin.
TALFi
6. E* (operacin de clausura) es una expresin regular correcta (E^+ no es estrictamente una expresin regular pero se acepta ya que es una abreviacin de EE*). 7. (E) es una expresin regular correcta.
Y dadas estas reglas, no existe ninguna expresin regular correcta que no pueda formarse con algunas de las siete reglas anteriores.
3.3 Viabilidad
La viabilidad del proyecto ha sido lo primero que hemos tenido que acotar, dado que es una materia donde se puede entrar en muchos temas distintos. Como el objetivo de la aplicacin es ser una herramienta docente, hemos querido centrarnos en uno de los temas principales del estudio de autmatas: la interaccin entre los diferentes autmatas finitos y el paso de una expresin regular a su equivalente autmata. Una vez acotado nuestro proyecto, no hemos encontrado ningn punto terico que haya sido insalvable.
TALFi
En TALFi obtenemos el mismo resultado como puede verse ejecutando la aplicacin y capturando por pantalla la ejecucin por pasos:
10
TALFi
Las X indican no distinguibilidad de estados, y los + indican distinguibilidad de estados. Como se puede ver en la imagen los estados p0 y p2 son indistinguibles, por tanto pueden colapsarse en uno solo. Lo mismo pasa con las siguientes parejas de estados: (p5,p6), (p5,p7), (p7,p6). En este caso pueden colapsarse en nuevo estado: (p5,p6,p7).
Aqu podemos observar el autmata final obtenido tras la minimizacin. Donde se ven las nuevas transiciones y los nuevos estados que lo conforman.
TALFi
11
2. Ejercicio de transformacin de AFD a Expresin regular (AFD-->ER) El algoritmo desarrollado para resolver este ejercicio consiste en lo siguiente: Entrada: autmata finito determinista. Salida: Expresin regular. Paso 1: Eliminar todos aquellos estados que no son finales (salvo el inicial) y aadir su parte de expresin regular a las transiciones entre estados finales. Paso 2: Calcular para cada estado final su expresin regular. Paso 3: Eliminar todos los estados finales (salvo el inicial) y devolver la expresin regular resultante en el estado inicial. Dado el siguiente autmata finito, se pide obtener la expresin regular equivalente:
12
TALFi
TALFi
13
Finalmente Su expresin regular asociada es: ((00+(1+01)(11+0(0+11))*(10+010))*)*+(00+(1+01)(11+0(0+11))*(10+010))*(1+01)( 11+0(0+11))* En la aplicacin TALFI obtenemos el mismo resultado:
Obteniendo la salida por pasos del algoritmo en la aplicacin sobre el mismo autmata finito, obtenemos:
14
TALFi
TALFi
3. Ejercicio de equivalencia de autmatas ((AFD, AFD) -->Resultado) El algoritmo desarrollado para resolver este ejercicio consiste en lo siguiente: Entrada: Dos autmatas finitos deterministas. Salida: Resultado cierto si los autmatas son indistinguibles, falso en caso contrario.
15
El algoritmo genera un autmata unin entre los dos autmatas de entrada, y genera la tabla del algoritmo de minimizacin. La condicin de equivalencia es la siguiente: si cada uno de los estados de uno de los autmatas son indistinguibles con al menos uno de los estados del otro autmata, los autmatas son indistinguibles. Decide la equivalencia entre estos dos autmatas finitos:
16
TALFi
TALFi
17 Los estados A y B pertenecen al primer autmata, los estados C, D y E pertenecen al segundo autmata. Observamos que: A es indistinguible con C. B es indistinguible con E. A es indistinguible con D.
Los autmatas son equivalentes. El resultado es este ya que todos los estados son indistinguibles con al menos uno de los estados del otro autmata, por tanto los autmatas son equivalentes. 4. Ejercicio de transformacin de autmata finito no determinista a autmata finito determinista. (AFN-->AFD) El algoritmo desarrollado para resolver este ejercicio consiste en lo siguiente: Entrada: autmata finito no determinista. Salida: autmata finito determinista. Se va creando un autmata finito nuevo recorriendo los estados y colapsando aquellos a los que se puede llegar con las mismas palabras, el resultado final es un autmata finito determinista. Obtn el autmata finito determinista a partir de este autmata finito no determinista.
18
TALFi
TALFi
19
El algoritmo va recorriendo los estados y generando nuevos a partir de las transiciones correspondientes, generando un nuevo autmata pero en este caso, determinista.
El autmata obtenido no contiene todas las transiciones que tendra un autmata finito determinista puro. Faltara incluir un estado basura, de no aceptacin, al que lleguen las transiciones que faltan. Hemos decidido no incluir dicho estado por simplicidad y facilidad de comprensin del resultado devuelto. 5. Ejercicio de transformacin de AFND- a AFND El algoritmo desarrollado para resolver este ejercicio consiste en lo siguiente: Entrada: autmata finito no determinista con transiciones lambda. Salida: autmata finito no determinista. Se eliminan las transiciones lambda y para cada una de ellas se aaden todas las transiciones que se encuentran en el cierre lambda del estado origen. Dado el siguiente autmata con transiciones lambda:
20
TALFi
TALFi
21
Tomamos como ejemplo el estado S4 del que salen transiciones lambda. El cierre lambda del estado S4, es decir los estados que pueden llegar usando la lambda, seran: S4, S2, S0. Una vez que tenemos el cierre lambda, hacemos la delta extendida del resultado del cierre lambda para cada letra del alfabeto. Vemos que con a vamos de S0 a S1 (y a S5 con una lambda) y que con b vamos de S2 a S3 (y a S5 con una lambda). Por lo tanto, el resultado final de S4 sern dos transiciones por letra, de S4 a S1 y a S5 con a y de S4 a S3 y a S5 con b. Para el resto de estados se sigue el mismo mtodo, dando lugar a la siguiente tabla de salida, donde 0 significa que no hay transicin:
22 Salida:
TALFi
6. Ejercicio de transformacin de ER a AFND- El algoritmo desarrollado para resolver este ejercicio consiste en lo siguiente: Entrada: Expresin regular. Salida: Autmata finito no determinista con transiciones lambda. Paso 1: Generar el rbol binario resultado del anlisis sintctico de la expresin regular. Paso 2: El algoritmo genera autmatas para cada "regin" del rbol. Ejemplo: si encuentra a, entonces genera un autmata que acepta una sola letra: a. Paso 3: Une todos los autmatas generados en uno solo mediante transiciones lambda. Dada la siguiente expresin regular: (a+b)b*+a(bb)* sobre el alfabeto A={a,b} obtener el autmata finito no determinista con transiciones lambda que la reconoce. En la aplicacin, una vez seleccionado el algoritmo correspondiente, lo primero que debemos hacer es meter al alfabeto, en esta caso meteremos a, b; para a posteriori meter la expresin tal cual la encontramos aqu: (a+b)b*+a(bb)*. Una vez realizados estos pasos ejecutamos el algoritmo con la opcin de pasos marcados y obtenemos el HTML con los autmatas dibujados en cada paso de ejecucin. Primero mostraremos el rbol sintctico que se genera a partir de la expresin:
TALFi
23
stas son las imgenes que muestra la pgina HTML de pasos y que se corresponden con la creacin del autmata segn se va recorriendo el rbol sintctico (ver imagen superior) que se ha generado. Cada uno de los autmatas tiene como ttulo el nmero de paso en que se genera y la operacin que lo desencadena (como aclaracin para el usuario):
24
TALFi
TALFi
25
26
TALFi
TALFi
27
28
TALFi
TALFi
29
30
TALFi
TALFi
31
Y el autmata final, que es el del ltimo paso del algoritmo, unin de los anteriores dependiendo de la operacin que sea:
32
TALFi
7. Equivalencia entre ER y AF. No hemos implementado, como tal, un algoritmo que permita la equivalencia entre expresiones regulares y autmatas finitos. Pero se puede obtener concatenando la ejecucin de los algoritmos anteriores. Como se explic anteriormente, se puede transformar de ER a AF ejecutando paso a paso el resto de algoritmos, una vez obtenido el autmata equivalente se puede calcular la equivalencia. Todo ello se puede gestionar mediante la interfaz grfica de la aplicacin y obtener el resultado deseado.
33
Este conjunto de ejercicios no son computables de manera automtica, por tanto no existe un algoritmo que los resuelva. Sin embargo, si tenemos una solucin correcta se puede comprobar si la solucin propuesta por el usuario es equivalente. 1. Ejercicio de obtencin de la expresin regular que reconoce un lenguaje expresado en modo textual. Hemos desarrollado un algoritmo utilizando los algoritmos automticos que hemos implementado. Dichos algoritmos comprueban la equivalencia entre la expresin regular almacenada en la base de datos como solucin con la expresin regular proporcionada por el usuario. 2. Ejercicio de generacin de un lenguaje asociado a un autmata. No es posible automatizar la comprobacin de lenguajes en forma textual. 3. Ejercicio de generacin de un autmata que acepta palabras de un lenguaje. Hemos utilizado el algoritmo de equivalencia para poder comprobar la distinguibilidad entre el autmata propuesto por el usuario con el autmata almacenado como solucin.
34
TALFi
algoritmos de recorrido mnimo o clculo de rboles de recubrimiento, lo cual implicaba que el nombre de las aristas fuera un nmero y no cualquier tipo de carcter como permite TALFi. Cmo hemos especificado en los requerimientos la librera mnima necesaria es la versin 5.0 del estndar Java.
TALFi
35
La decisin de programar la aplicacin sobre el lenguaje Java es debida sobre todo a nuestro conocimiento de este leguaje, adquirido en gran medida durante nuestros aos de formacin universitaria. Con Java es sencillo crear interfaces grficas gracias su librera Swing y la predecesora de esta, AWT, que proporcionan todos los componentes grficos necesarios para presentar un interfaz amigable y sencilla a la vez. Java es un estndar hoy en da con el que cuentan casi todos lo PCs de mundo y que cualquier usuario tiene instalado, lo cual nos permite llegar a un nmero elevado pblico sin que estos tengan que realizar complicadas labores de instalacin gracias a la difusin del software Java. As mismo es de destacar que, al ser Java un lenguaje multiplataforma, la interfaz grfica adopta la apariencia del sistema operativo sobre el que se est ejecutando de forma dinmica sin tener que realizar ninguna modificacin sobre el cdigo ni la ejecucin. El proyecto queda cerrado con las siguientes caractersticas, o algoritmos implementados: - Desarrollo de los modelos principales para el objetivo acordado: Hemos implementado todas las aplicaciones necesarias para hacer un buen tratamiento de stos tres modelos que hemos considerado bsicos para el correcto funcionamiento de la aplicacin. Existen en el cdigo funciones implementadas de las que no se hace uso en nuestra aplicacin que podran ser utilizadas en posteriores mejoras de la misma. - Desarrollo de la interfaz: La interfaz desarrollada en Java es sencilla de manejar y comprender para cualquier usuario a la que va destinada la aplicacin, con mensajes de ayuda y aclaraciones para posibles dudas a cerca del funcionamiento de algn componente especfico. Los mtodos de entrada y salida de datos estn presentes tanto en forma interna (XML internos dentro de la propia aplicacin), como externa mediante el uso de archivos HTML.
36
TALFi
de pila, capaces de reconocer lenguajes mucho ms potentes debido a la memoria disponib1e en la pila. Representar estos autmatas de pila y crear los algoritmos capaces de generarlos a partir del lenguaje que reconocen no es una tarea sencilla, ni siquiera es automtica. Tampoco lo es generar la gramtica incontextual de un lenguaje dado. Sin embargo s es posible realizar de forma automtica la transformacin desde una gramtica incontextual a un autmata de pila equivalente y viceversa. En esta categora de autmatas muchas otras tareas no son automticas, ya que por ejemplo tampoco lo es comprobar la equivalencia entre dos autmatas de pila, sin embargo aplicando tareas de testing es posible llegar a comprobar que dos autmatas son equivalentes en un nmero de palabras ya que generan la misma respuesta ante palabras iguales. El proceso de testing se podra realizar de manera manual eligiendo una serie de palabras divididas en dos tipo: las que queremos que el autmata de pila reconozca y las que no, una ver realizada la seleccin se pasan todas y cada una de las palabras por las dos mquinas que queremos comprobar su equivalencia. De esta forma a travs de este proceso podemos decir si dos mquinas son equivalentes o no para el conjunto de palabras seleccionadas. Si no lo son para ese conjunto es evidente que en general no lo sern luego podemos dar una respuesta negativa con toda seguridad, en caso contrario nica y exclusivamente podemos afirmar que ambas mquinas son equivalentes para el grupo de palabras propuesto pero no podemos extrapolar dicho resultado a una afirmacin general, pues podran encontrarse palabra no seleccionadas que no recibieran la misma respuesta de ambas mquinas. Como hemos dicho antes el proceso de comprobacin de equivalencia entre autmatas de pila ni es sencillo ni es automtico. Tenemos que tener en cuenta que los autmatas de pila no cubren todos los lenguajes posibles. Es decir, podemos encontrar lenguajes que no puedan ser reconocidos por estos autmatas. Ellos son capaces de reconocer por ejemplo el lenguaje que tiene las mismas bs que as, sin embargo no pueden reconocer una extensin de este que tiene tambin el mismo nmero de letras cs; para estos lenguajes existen otros autmatas todava ms potentes que se denominan mquinas de Turing. Si ya era complicado obtener algoritmos automticos para autmatas de pila, es todava ms complejo obtenerlos para mquinas de Turing, pues al tener mayor potencia reconocedora tambin se complica su anlisis automtico. Las mquinas de Turing tiene la particularidad de poseer una memoria infinita (al menos tericamente) en forma de cinta y la capacidad de moverse sobre la cinta mediante un cursor en las dos direcciones, hacia la izquierda y hacia la derecha, gracias a esto es por lo que pueden reconocer lenguajes con 3 o ms letras que aparecen el mismo nmero de veces. Los mecanismos sobre mquinas de Turing no son automticos tampoco y es donde se hace todava ms necesario un proceso de testing para comprobar que la mquina que se ha creado reconoce o no al menos las palabras involucradas en el proceso siempre y cuando se tenga otra con la que comparar las respuestas dadas. Queda por tanto como trabajo futuro la posibilidad de aadir a la aplicacin la capacidad de creacin de dichos autmatas y su comprobacin de equivalencia. Otros trabajos automticos que se podran incluir en la aplicacin, y que son mucho ms sencillos que los de mquinas de Turing o autmatas de pila, son las transformaciones entre gramticas.
TALFi
37
En esta lnea existe un algoritmo sencillo y de fcil aplicacin para la obtencin de la Forma Normal de Chomsky de una gramtica incontextual. Nuestro proyecto est centrado ms hacia los autmatas, es por ello que no se plante la implementacin de dicho algoritmo, sin embargo es otra posible tarea futura que se podra realizar de cara a obtener una aplicacin que cerrara todos los campos de la asignatura de TALF. Es posible as mismo realizar mejoras en las capacidades de la aplicacin sobre las propias cuestiones que implementa. Como por ejemplo mayor claridad a la hora de representar los autmatas grficamente con ms puntos de anclaje en las aristas, o la capacidad de pintarlas de forma que el recorrido de la lnea se el mnimo posible. Por otro lado, tambin se podran realizar mejoras en los algoritmos, sobre todo orientadas a la claridad en la especificacin de los pasos de minimizacin, incluyendo el diagrama de transiciones inversas o la razn por la que dos estados son indistinguibles y en que momento de le ejecucin sucede, todo con el fin de que los alumnos puedan aprender ms claramente donde y por qu se realiza cada paso en dicho algoritmo. Otra posible mejora en la aplicacin consiste en la deteccin de los estados no deterministas. De esta forma estos estados podran sealarse en el interfaz grfico Por ltimo queremos indicar que esta aplicacin, TALFi, podra utilizarse para realizar un curso de correccin de ejercicios que se podra colgar en un servidor con el fin de que los alumnos los resolvieran de cara a la preparacin de la asignatura sin ms que permitir el dibujo de autmatas como respuesta a los ejercicios y corregirlos usando la lgica implementada en TALFi para los algoritmos. En definitiva, hay muchas ms posibles variaciones en las que trabajar para mejorar la aplicacin en el futuro.
TALFi
39
Captulo 4.
Descripcin de la aplicacin
Tras sta introduccin de los aspectos externos de la aplicacin que hemos considerado ms importantes, vamos a ver una descripcin ms exhaustiva de la aplicacin en s. La aplicacin est dividida en dos partes: la aplicacin por consola y el interfaz grfico que funciona sobre la aplicacin de consola. La aplicacin por consola es plenamente funcional. Ha sido usada para hacer pruebas internas y probar que los algoritmos implementados funcionan correctamente. El interfaz grfico extiende las posibilidades de la aplicacin por consola. Ofrece un entorno visual ms amigable e intuitivo. Creemos que introducir y mostrar los resultados de una forma grfica es indispensable en una aplicacin de stas caractersticas. Iremos explicando ambas formas de entender la aplicacin a lo largo de ste apartado. Para ello consideramos que la mejor forma es ir desgranndola desde la base, el inicio del proyecto, a los apartados finales.
La vista est formada por todas las clases relacionadas con la interfaz grfica. El modelo est formado por todas las clases relacionadas con la lgica de la aplicacin, es decir: algoritmos, autmatas, alfabetos, expresiones regulares. El cometido del controlador es hacerles interactuar entre ambos, siempre que el controlador lo permita. Es decir, la vista nunca accede al modelo sin pasar por el controlador y viceversa (ver diagramas de interaccin en las pginas 46 a 48). b) Singleton:
40
TALFi
El patrn Singleton se aplica cuando nos interesa que un objeto sea nico en la aplicacin, y que el acceso a ella sea por un nico sitio. Nuestra aplicacin contiene varios objetos que exigen ese tratamiento: Tenemos un nico traductor HTML. Un nico mensajero. Un nico controlador. Un nico parser de xml. Una nica clase par guardar el autmata copiado o cortado para pegarlo. c) Application Service: El Controlador, realiza las funciones relacionadas con servicio de aplicacin. Es decir: su funcin es la de puerta a la lgica de programa desde la interfaz grfica o vista.
A.
Autmatas
El paquete de autmatas incluye las siguientes clases e interfaces, que pasaremos a explicar a continuacin una por una: Alfabeto y Alfabeto_imp. Automata. AutomataFD. AutomataFND. AutomataFNDL
41
Alfabeto es una interfaz que define las funciones de los alfabetos de la aplicacin. Alfabeto_Imp implementa stas funciones. Estn incluidas las funciones que consideramos bsicas como pueden ser devolver listas de letras, devolver el alfabeto entero, ver si est una letra en el alfabeto etc.
Autmata
Interfaz que define las funcionalidades bsicas para cualquier autmata, sea del tipo que sea.
AutomataFD
Clase que implementa todas las funciones de Autmata. Funciones que permiten entre otras cosas mostrar las aristas de un vrtice en concreto, insertar aristas, mostrar los estados que componen el autmata, eliminar vrtices etc.
AutomataFND y AutomataFNDLambda
Clases que extienden AutomataFD, ya que adems de las funciones definidas en Autmata necesitan de otras funciones especficas para resolver otras cuestiones propias del autmata en concreto. Funciones como cierre lambda, que calcula el cierre lambda de un estado, o delta extendida que devuelve la lista de estados a los que podemos ir usando una letra del alfabeto nos permiten tratar stos autmatas correctamente.
Coordenadas
Clase que almacena las coordenadas de los estados. Se usa nicamente en la parte grfica de la aplicacin en el caso de que se guardara el autmata incluyendo las coordenadas que se generan tras la modificacin.
B.
Expresin regular
El paquete de Expresin Regular contiene las siguientes clases e interfaces que explicaremos a continuacin: ArbolER y ArbolER_Imp. ExpresionRegular y ExpresionRegular_Imp.
ArbolER y ArbolER_Imp
ArbolER es una interfaz que define la funcionalidad de los rboles sintcticos para expresiones regulares. Incluye funciones bsicas para el tratamiento de rboles binarios, como getHijoIz que devuelve el hijo izquierdo de un nodo, getRaiz que devuelve la raz del rbol, o setHijoDr que modifica el hijo derecho de un nodo. La clase que implementa a la interfaz es ArbolER_Imp.
ExpresionRegular y ExpresionRegular_Imp
ExpresionRegular es una interfaz que define los mtodos que debe implementar las expresiones regulares. Funciones como getExpresionRegular, o getArbolER son imprescindibles para el tratamiento de expresiones regulares. La clase que implementa sta interfaz es ExpresionRegular_Imp.
42
TALFi
C.
Algoritmos
El paquete de Algoritmos contiene las siguientes clases e interfaces que explicaremos a continuacin: Algoritmo. ERtoAFNDLambda. AFD_TO_ER. Minimizacin. Automatas_Equivalentes. AFN_TO_AFD. AFNDLambda_to_AFND.
Algoritmo
Interfaz que define todos los mtodos que debern tener como mnimo cada uno de los algoritmos que se quieran crear en la aplicacin, es una interfaz sencilla, con nicamente tres mtodos, a saber: ejecutar que recibe como parmetro si es por pasos, registrarControlador que identifica el controlador que llevar acabo la ejecucin, en caso de que haya ms de uno y finalmente el mtodo que devuelve el xml getXML de pasos en caso de que se haya ejecutado con esa opcin.
ERtoAFNDLambda
Algoritmo que implementa la interfaz antes descrita y que aade a estos tres mtodos varios privados que realizan en conjunto la implementacin del algoritmo que obtiene el autmata finito no determinista con transiciones lambda equivalente a la expresin regular que hace las veces de entrada al algoritmo. Para ello simplemente se transforma a un rbol sintctico que se va recorriendo, por cada nodo del rbol recorrido, se obtiene el autmata finito no determinista con transiciones lambda equivalente hasta el momento. Por cada paso se genera un comentario predefinido dependiendo de la operacin que se aplique que posteriormente se aadir al HTML que se muestra, como aclaracin para los alumnos.
AFD_TO_ER
Algoritmo que implementa la interfaz y define nuevos mtodos que ayudan en su ejecucin. En este caso se enfoca el algoritmo mediante la eliminacin de estados no finales, con la excepcin del inicial, modificando las transiciones entre los que no se eliminan de forma que el autmata tras la eliminacin reconozca el mismo lenguaje. Una vez termina este proceso para cada estado no final se calcula su expresin regular, partiendo del estado inicial que como se ha comentado se mantiene en el autmata, para posteriormente concatenando todas las expresiones obtenidas para generar una nica expresin final resultado. Hay varios factores que implican un cambio en el desarrollo del algoritmo, uno de ellos y quiz el ms importante es el comprobar si el estado inicial del autmata es tambin final, pues dependiendo de esto la expresin resultante deber tener unas caractersticas u otras.
TALFi Minimizacin
43
Algoritmo de minimizacin de autmatas finitos deterministas, cuenta con los tres mtodos que debe implementar de la interfaz Algoritmo y con numerosos mtodos privados debido a la complejidad del algoritmo. Los mtodos privados llevan el verdadero cmputo que realiza y los mtodos implementados hacen la labor de interfaz con el resto de la aplicacin. Se genera un nuevo autmata basado en el de entrada, colapsando aquellos estados que son indistinguibles.
Automatas_equivalentes
Algoritmo de equivalencia de autmatas, de nuevo cuenta con los tres mtodos que debe implementar y otros privados y pblicos, los primeros son los que se encargan de la implementacin propiamente dicha del algoritmo y los segundos son los que llevan a cabo la inicializacin de los dos autmatas que intervienen en el algoritmo y la preparacin previa del mismo. Enfocamos el algoritmo de una manera prctica, inicializamos una nica tabla que identifica a los autmatas con una mezcla de ambos (renombrando estados si es necesario) y minimizamos a fin de encontrar distinguibilidad entre los estados de los dos autmatas. La respuesta se calcula en funcin del resultado de esta distinguibilidad obtenida en la tabla nica.
AFN_TO_AFD
Algoritmo de transformacin de autmata finito no determinista a autmata finito determinista, como el resto de algoritmos cuenta con los tres mtodos que debe implementar y otros privados. El algoritmo genera un nuevo autmata a partir del no determinista, obteniendo nuevos estados a partir de las aristas no deterministas.
AFNDLambda_to_AFND
Algoritmo que implementa la interfaz Algoritmo, extendindola con nuevos mtodos propios para la ejecucin del mismo. Dado un autmata con transiciones lambda, lo transformaremos en uno equivalente sin ellas. Para ello nos guiaremos de una serie de pasos, que se ejecutarn para cada estado del autmata, y para cada letra del alfabeto del mismo. Los pasos son: Cierre lambda del estado Delta extendida de los estados del cierre lambda, usando todas las letras del alfabeto. Los estados cuya delta extendida lleven a un estado sern una arista entre ste estado y el estado inicial del que se ha hecho el cierre lambda. Ejecutando stos pasos para todos los estados del autmata, tendremos como resultado un autmata finito no determinista sin transiciones lambda.
44
TALFi
D.
Controlador
El paquete de Algoritmos contiene las siguientes clases e interfaces que explicaremos a continuacin: Controlador. Controlador_imp.
Controlador
Interfaz que define los mtodos necesarios que debern implementar las clases que pretendan ejercer de controlador, en este caso el controlador dentro de la aplicacin se encarga de recibir la query (ver apndice uno a final de la memoria para ms informacin) que prepara la vista grfica segn los deseos del usuario y pasar los parmetros correctos al algoritmo correspondiente que se selecciona mediante las opciones especificadas en la query. Los mtodos son: registrarVista, getSalida, obtenerXML, tratarMensaje y setIdioma.
Controlador_imp
Esta es la clase que ejerce el papel de controlador en la aplicacin, como es evidente, implementan todos los mtodos de la interfaz anterior y algunos ms que son de rgimen privado y que realizan varias labores necesarias en la aplicacin. Es labor del controlador obtener los archivos xml de pasos, para delegando en otras clases, convertirlos a un formato html, del cual se pasar la ruta a la vista para que lo muestre. Tambin deber obtener del algoritmo correspondiente el resultado, ya sea un autmata o una expresin regular, que de nuevo mandar a la vista para que se encargue de mostrarla. As mismo, tambin tiene la capacidad, delegando en otras clases, de extraer tanto autmatas como expresiones regulares de archivos xml, para obtener la entrada que el usuario haya introducido grficamente. Una vez descritos los paquetes de cdigo ms importantes de la aplicacin, pasaremos a explicar el comportamiento de las clases y su interaccin a la hora de la ejecucin de las diferentes opciones que tiene la aplicacin TALFi con la ayuda de los diagramas UML.
TALFi
45
Usuario
Administrador
TALFi
TALFi
Diagrama de clases (paquete controlador)
47
A continuacin exponemos algunos diagramas de interaccin: Diagrama de interaccin para el algoritmo de equivalencia. Diagrama de interaccin para el algoritmo de paso de expresin regular a autmata no determinista con lambdas. Diagrama de interaccin para el algoritmo de paso de autmata determinista a expresin regular.
TALFi
TALFi
OyenteMenuI tem VistaGrafica PanelCentral AutomataCa nvas 1: getInstancia() 2: Controlador_imp File Controlador_ imp TraductorHT ML ParserXML Equivalencia Minimizacion
49
3: ejecuta()
17: ejecuta() 18: getPanel() 19: AutomataCanvas 20: traducirXML() 21: String 22: new File 23: append(String) String query = TALF -e (pasos) ruta file1 ruta file2
31: obtenerAutomata2()
34: extraerAutomata(Strign ruta2) 35: Automata b boolean pasos= query [pasos] 36: equivalencia(Automata a,Automata b,boolean pasos) 37: new Equivalencia 38: registraAutomata1(Automata a)
41: new Minimizacion 42: getInstancia() 43: Controlador_imp 44: ejecutar(boolean pasos) 45: registraControlador(Controlador_imp) 46: setSolucionEquivalencia() 47: ejecutar(boolean pasos) 48: getTablaMinimizacion() 49: HasMap<String,HashMap<String,ArrayList<String>> automata si pasos= true se genera xml de pasos
53: new File 54: append(String xml) 55: getInstancia() 56: TraductorHTML 57: salidaXML() 58: String ruta 59: traducirPasosEquivalencia(String ruta) 60: String rutaHTML
50
TALFi
Diagrama de interaccin para el algoritmo de paso de expresin regular a autmata no determinista con lambdas.
TALFi
OyenteM enuI tem Panel Al fabet Alfabeto_i m o p Panel Expres ionRegul ar VistaGrafica Controlador_ im p T raductorHT ML Fil e ParserXML ER_T O_AF NDLambda ExpresionRe gular_i mp Arbol_im p
51
AutomataCa nvas
Panel Central
1: new PanelAlfabeto() 2: new Al fabeto_imp() 3: ani adirLetra(String l etra); Se aaden todas las letras introducidas al alfabeto 4: getAl fabeto() 5: Al fabeto 6: new PanelExpresi onRegul ar() Se introduce la expresi n regular 7: getExpresionRegul ar() 8: Stri ng expresion 9: traducirXML() 10: introduceER(expresion,al fabeto) return expresi on 11: String ruta
14: getInstancia() 15: Controlador_im p String query=T ALF -r[pasos] ruta 16: ej ecutar(Stri ng query) 17: anal izaQuery(Stri ng query) 18: getInstancia() 19: ParserXML String ruta=query[2]
20: extraerExpresi on(Stri ng ruta) 21: new Expresi onRegular_i mp 22: new Arbol _i mp 23: anal iza() 24: arbol_imp arb 25: setExpreion(String expresion)
26: ExpresionRegular a
boolean pasos=query[pasos]
28: new ER_T O_AFD(a.getArbol (),a.getAlfabeto()) 29: getRai z() Se recore el arbol usando estos 3 mtodos 30: getHi joDerecho() 31: getHi joIzqui erdo()
32: registraControlador(Controlador) 33: ej ecutar(bool ean pasos) 34: getSal ida() 35: Autom ata a 36: getXM L() 37: String Xm l 38: new Fi le(rutaXM L) 39: append(String xml ) 40: salidaXML() 41: return rutaXML 42: getInstancia() 43: TraductorHTML 44: traducirPasosER(String rutaXml) 45: String rutaHTM L 46: muestraHT ML(pasos,rutaHT ML) 47: getSal ida() 48: Autom ata a 49: getPanel() 50: Autom ataCanvas 51: cargarAutomataNuevo(Automata a) 52: setT ipoAutomata(AFDNLabmda) 53: activaT oogl eButtons() 54: setExpresi String expresionon()
52
TALFi
8: generarImagenJPG(String rutaImg) 9: getInstancia() 10: Controlador_imp String query=T ALF t3[pasos] ruta 11: ejecutarQuery(String query) 12: getInstancia() 13: ParserXML String ruta=query[2] 14: extraerAutomata(String ruta) 15: Automata a
boolean pasos=query[pasos] 16: afdtoer(boolean pasos,Automata a) 17: registraControlador(Controlador_imp) 18: ejecutar(boolean pasos) 19: getSlidaER() 20: String expresion 21: getXML() 22: String XML 23: new File 24: append(xml)
25: salidaXML() 26: String rutaXML 27: getInstancia() 28: TraductorHT ML 29: traducirPasosAFDT OER(rutaXML) 30: String rutaHT ML 31: getSalida() 32: String salida 33: setExpresion(salida)
TALFi
53
54
TALFi
55
La base de datos de ejemplos y ejercicios de la aplicacin se carga en el panel izquierdo de la vista grfica que tiene forma de rbol de directorios, con el fin de que se puedan cargar cualquiera de los ejemplos o ejercicios de forma directa sin ms que hacer doble click sobre el ejemplo que se desee. Cualquier usuario puede guardar un ejemplo en un archivo xml en cualquier parte de su pc para posteriormente cargarlo de nuevo, sin embargo y por comodidad cada vez que se guarde un ejemplo la aplicacin pregunta al usuario si desea incluir dicho ejemplo en la base de datos, si contesta de forma afirmativa, el ejemplo queda cargado en el rbol de directorios automticamente, y ste se refresca instantneamente, de forma que a partir de ese momento el usuario ya dispone del ejemplo para cargarlos sobre el panel de dibujo haciendo doble click sobre l. El ejemplo se guardar en la carpeta del rbol segn corresponda al tipo de autmata que se ha guardado. Esta caracterstica es totalmente independiente del guardado del archivo.xml que el usuario haya decidido y donde lo considere oportuno, es decir, tanto si el usuario responde afirmativamente a guardar el ejemplo en la base de datos como si no, se guarda el archivo xml en la carpeta que se decidi anteriormente. Es posible tambin guardar los ejercicios en la base de datos y se realiza de la misma forma que con los ejemplos, sin embargo esta accin est restringida al usuario administrador, ya que es necesario especificar la solucin en algunos casos como en los ejercicios de calcular la expresin regular de un leguaje, en otros sin embargo el profesor (o administrador) slo ha de dibujar el autmata que desea que el alumno vea y al guardar el ejercicio; la aplicacin calcula la solucin y la almacena automticamente. Los ejercicios al ser guardados tambin refrescan el rbol de ejemplos/ejercicios automticamente. Al actualizar un ejercicio o ejemplo nuevo modificando el archivo xml del que se carga dinmicamente el rbol de la vista grfica, se modifica el rbol de directorios de forma dinmica tambin.
TALFi
57
Captulo 5.
Manual de usuario
5.1 Perfiles de usuario
La aplicacin soporta bsicamente dos tipos de usuario: 1. Usuario administrador del sistema. 2. Usuario normal. El usuario normal puede realizar todas las opciones que ofrece la aplicacin, ejecutar algoritmos sobre ejemplos, crear ejemplos, y evaluarse a s mismo probando los ejercicios. El usuario administrador puede adems crear nuevos ejercicios para aadirlos a la base de datos de ejercicios.
La flecha indica que ests activando el modo de editar, es decir puedes seleccionar los estados y aristas y moverlos por la ventana. El crculo es el smbolo de Nuevo Estado, al pulsarlo, el sistema nos solicita el nombre y su condicin de final, inicial o estado normal.
58
TALFi
La barra es el smbolo de nueva arista, una vez pulsado, debemos seleccionar un estado y llevar la arista que se dibuja a otro estado, o al propio estado. El sistema nos solicita cual es el smbolo (letra del alfabeto), encargado de hacer la transicin.
La calavera permite eliminar estados y aristas, una vez que se ha pulsado, haciendo click con el ratn sobre un estado o una arista, desaparecer. En cualquier momento podemos editar un estado o una arista, debemos pulsar con el botn derecho del ratn sobre un estado o una arista y el sistema nos permitir modificar sus caractersticas. Hay que tener en cuenta que en los autmatas con transiciones lambda el smbolo / es la lambda, si usamos ese smbolo al etiquetar una transicin mientras dibujamos un autmata, dicho autmata se considerar autmata con transiciones lambda. b) Cmo cargar una expresin regular? Para cargar una expresin regular en el sistema debemos utilizar el siguiente botn:
Acto seguido el sistema nos solicita el alfabeto correspondiente a la expresin regular, en el ejemplo hemos elegido el alfabeto a, b.
Despus el sistema nos solicita cual es la expresin regular, en el ejemplo a+b. Cuando el sistema recibe la expresin regular calcula automticamente el autmata con transiciones lambda que reconoce el lenguaje expresado por la expresin regular. El sistema nos da a elegir si queremos que se ejecute por pasos, o sin pasos.
TALFi
59
Si elegimos la primera opcin, se abrir una pgina web html, con toda la informacin de ejecucin del algoritmo y se cargar el autmata con transiciones lambda en la ventana principal. Si por el contrario decidimos ejecutarlo sin pasos, el sistema cargar el autmata con transiciones lambda en la ventana principal, sin mostrar la pgina HTML con los pasos. c) Cmo cargar un ejemplo de la base de datos de ejemplos?
Los ejemplos se dividen en los tres tipos de autmatas con los que trabaja la aplicacin, si como en la imagen seleccionamos el ejemplo 4, se est seleccionando un autmata finito determinista, esto hay que tenerlo en cuenta para posteriormente seleccionar el algoritmo adecuado. En este caso, los algoritmos posibles seran: minimizacin, equivalencia de autmatas y traduccin de autmata finito determinista a expresin regular. Una vez cargado el ejemplo, podremos modificarlo a nuestro gusto, con los botones de edicin, al igual que ocurre con los autmatas dibujados por nosotros. Haciendo doble click con el ratn sobre cualquiera de los ejemplos, cargaremos la informacin del ejemplo sobre la ventana principal, como se ve en la siguiente imagen.
60
TALFi
d) Cmo ejecutar un algoritmo? Para ejecutar un algoritmo debemos seleccionar en el men de navegacin, la pestaa algoritmos y seleccionar el algoritmo que queramos ejecutar. Hay que tener en cuenta que el algoritmo debe ser adecuado para el tipo de autmata que tenemos dibujado en la ventana.
Por ejemplo si tenemos cargado en la ventana un autmata finito determinista, como se ve en la imagen:
TALFi
61
Podemos ejecutar por ejemplo el algoritmo de minimizacin de autmatas finitos deterministas. El sistema solicitar si queremos ver los pasos de ejecucin o no, mediante la siguiente ventana:
Si decidimos ver los pasos, el sistema ejecutar un explorador de internet y cargar una pgina web html con la informacin de ejecucin y los pasos de ejecucin. En el ejemplo mostrar: el autmata de entrada, la tabla de minimizacin y el autmata de salida. Adems el sistema cargar en la interfaz grfica el nuevo autmata generado, en nuestro ejemplo, el autmata minimizado, con el cual podemos operar y aplicar nuevos algoritmos. Otros algoritmos tienen un tratamiento distinto, pero es sencillo seguir las instrucciones que marca la aplicacin para ejecutarlos.
62 2. Ejercicios de transformacin AFNLambda a AFN. 3. Ejercicios de transformacin AFN a AFD. 4. Ejercicios de minimizacin de AFD. 5. Ejercicios de transformacin de AFD a ER.
TALFi
Para cargar un ejercicio nuevo, que queremos intentar resolver, debemos ir al men de la aplicacin, y elegir un ejercicio de la batera de ejemplos:
Si hacemos doble click sobre cualquiera de los ejemplos, el sistema cargar en la interfaz grfica, el enunciado y el contenido del ejercicio. Tal y como se observa en la siguiente imagen:
En la imagen se observa, que hemos seleccionado un ejercicio de minimizacin y el sistema nos muestra el enunciado y el autmata a minimizar. Una vez resuelto el ejercicio en papel, debemos enviar nuestra solucin al sistema. Si hacemos click sobre el botn: Dibujar solucin, el sistema solicitar que tipo de autmata queremos dibujar, en este caso autmata finito determinista, y acto seguido podemos dibujarlo sobre la ventana de la aplicacin. Si una vez que le hemos dado a Dibujar solucin hemos olvidado, que autmata queramos minimizar no tenemos ms que dar al botn: ver html con el ejercicio y se abrir un explorador web mostrndonos el enunciado del ejercicio, con toda la informacin.
TALFi
63
Una vez terminado el dibujo, debemos enviarlo a corregir, pulsando sobre el botn Mandar solucin. El sistema nos indicar cual es el resultado de la correccin, como se ve en la siguiente imagen:
El tratamiento de ejercicios con expresiones regulares (lenguaje o traduccin de AFD a expresin regular) es el mismo, salvo que en este caso debemos escribir la expresin regular resultado.
64
TALFi
De igual forma se procede con las aristas, solo que en este caso la ventana de cambio de propiedades es distinta e incluye un campo de texto (relleno con las letras de la transicin) para poner las letras que desencadenarn el paso por la arista y que se pueden modificar o aadir nuevas y dos mens donde estn los estados entre los que est dibujada la arista y que podemos cambiar a nuestro gusto sin ms que seleccionar los estados entre los que deseemos que se redibuje la arista de cualquiera de las dos listas con todos los estados del autmata. De nuevo al aceptar los cambios son visibles de forma inmediata. En la imagen a continuacin expuesta se ve que hemos pinchado con el derecho sobre la arista que une los estados Q1 y Q2 y que tiene como letra una b, la siguiente imagen muestra el cuadro de texto explicado del cambio de propiedades de las aristas.
TALFi
65
66
TALFi
Como podemos ver en las imgenes los botones de pegar estn desactivados, por qu? Es que no se puede pegar? Pues no, hasta que no hayamos copado o cortado alguna vez no es posible pegar nada, una vez hayamos hecho cualquiera de las dos cosas el botn de pegar se activar y ya podremos pegar todas las veces que deseemos, siempre se pegar el ltimo autmata cortado. Los eventos de copiar, cortar y pegar en la aplicacin realizan la accin sobre el contenido completo del panel, es decir que copian, cortan y pegan autmatas completos, en ningn caso se puede seleccionar parte de un autmata y copiarlo, cortarlo o pegarlo, cosa que s se puede hacer a la hora de suprimir parte de un autmata como veremos ahora. Veamos la imagen del botn de pegar activado.
TALFi
67
Una vez seleccionada la parte deseada, podemos o bien variar su posicin dentro del panel, o suprimir los estados seleccionados, para realizar esta ltima tarea slo hemos de pulsar el botn suprimir y se eliminarn los estados que estn seleccionados y con sus respectivas aristas tanto de entrada como de salida a los mismos. En esta imagen hemos borrado los estados que seleccionamos anteriormente, nada ms que pulsando suprimir.
Si quisiramos mover la parte seleccionada del autmata, solamente habramos de pulsar u arrastrar uno de los estados seleccionados mediante el cuadro de seleccin que habramos abierto anteriormente. As de esta forma movemos la seleccin entera que hayamos hecho. Seleccionemos de los estados que quedan los dos estados t1 y t2:
68
TALFi
TALFi
69
La diferencia con guardar a secas, es que si ya habamos cargado el autmata desde un archivo guardado en nuestro PC, la aplicacin memoriza dicha ruta y al pulsar guardar, se sobrescribe. Si pulsamos guardar sobre un autmata que no parta de un archivo guardado en el PC, se produce el mismo comportamiento que con el botn de men de guardar como.
La opcin de guardar una vez almacenado el ejemplo en el fichero correspondiente nos permite introducir dicho autmata en el rbol de ejemplos de la parte izquierda de la aplicacin. Para ello tras confirmar el guardado del autmata, se inicia una ventana en la que se nos pregunta si deseamos guardar al autmata en la base de datos de ejemplos, si contestamos afirmativamente, de inmediato se realiza la accin y el panel de ejemplos en forma de rbol se recarga dinmicamente y ya es posible ejecutar el ejemplo que acabamos de guardar. Si hubiramos contestado que no deseamos guardarlo, la ventana desaparece y el autmata no se guarda en los ejemplo, pero s queda registrado en nuestro disco duro tal y como hicimos anteriormente.
70
TALFi
Para abrir un autmata previamente guardado con el mtodo anterior se dispone de nuevo en el men con un botn especfico para tal uso su nombre: abrir.
Al pulsar sobre l, nos aparece una ventana de apertura de archivos muy similar a la de guardar, donde debemos de buscar la carpeta que contenga el archivo que queremos abrir. En el panel central de la vista de abrir, nos aparecern los archivos que contiene la carpeta en la que estemos, sin embargo nica y exclusivamente aparecern las carpeta, que podemos abrir para entrar en un nuevo directorio, y los archivos con extensin .xml ya que son los nicos reconocidos por la aplicacin. Nada ms hemos de selecciona un archivo vlido de un autmata y hacer doble click sobre l, o pulsar aceptar para que se dibuje en el panel, manteniendo las coordenadas que los estados tenan cuando se guard.
TALFi
71
Al pulsar sobre el botn aparece una ventana de dilogo igual a la que se utiliz para abrir autmatas, y con las mismas caractersticas que aquella, con lo que remitimos al lector a su explicacin para comprender esta. Antes de concluir este apartado de guardar y recuperar autmatas y ejercicios, queremos indicar otra optimizacin de la aplicacin, pues una vez se ha guardado o abierto un autmata o ejercicio la siguiente vez que se intente realizar una de dichas acciones, la aplicacin abrir la ventana de guardar o abrir respectivamente, con la ltima carpeta
72
TALFi
donde se guard o abri el ltimo archivo, es decir que la aplicacin guarda informacin sobre la ltima carpeta en la que se efectu una accin de este tipo.
TALFi
73
Captulo 6.
Trabajo
Documentacin 20% Especificacin 5% Diseo 5% Reuniones 5%
Especificacin Implementacin
Reuniones Documentacin
74
TALFi
TALFi
75
Captulo 7.
Glosario de trminos
Autmata: Un autmata es un modelo matemtico para una mquina de estado finita (FSM sus siglas en ingls). Una FSM es una mquina que, dada una entrada de smbolos, "salta" a travs de una serie de estados de acuerdo a una funcin de transicin (que puede ser expresada como una tabla). En la variedad comn "Mealy" de FSMs, esta funcin de transicin dice al autmata a que estado cambiar dados uno determinado estado y smbolo. TALF: Siglas de Teora de autmatas y lenguajes formales, asignatura del segundo curso de Ingeniera Informtica en la universidad complutense de Madrid. Trata lo referente al estudio de autmatas. Alfabeto: El alfabeto, es el conjunto ordenado de las letras de un idioma. Referente a los autmatas, el alfabeto es el conjunto de letras que el autmata es capaz de comprender. Lenguaje: Un lenguaje formal es un conjunto de palabras (cadenas de caracteres) de longitud finita en los casos ms simples o expresiones vlidas (formuladas por palabras) formadas a partir de un alfabeto (conjunto de caracteres) finito. El nombre lenguaje se justifica porque las estructuras que con este se forman tienen reglas de buena formacin (gramtica) e interpretacin semntica (significado) en una forma muy similar a los lenguajes hablados o naturales. Expresin regular: Una expresin regular es una expresin que describe un conjunto de cadenas sin enumerar sus elementos. Los elementos estarn formados por smbolos del alfabeto que describa la expresin regular. Lambda: Lambda ( ) es la u n cima d letra del alfabeto griego. En el estudio de autmatas normalmente se usa para nombrar a la palabra vaca. Algoritmo: Un algoritmo es una lista bien definida, ordenada y finita de operaciones que permite hallar la solucin a un problema. Dado un estado inicial y una entrada, a travs de pasos sucesivos y bien definidos se llega a un estado final, obteniendo una solucin. Computabilidad: La Teora de la computabilidad es la parte de la computacin que estudia los problemas de decisin que pueden ser resueltos con un algoritmo o equivalentemente con una mquina de Turing.
TALFi
77
Captulo 8.
Palabras clave
Autmata, TALF, computabilidad. alfabeto, lenguaje, expresin regular, lambda, algoritmo,
TALFi
79
Captulo 9.
Conclusin
Desarrollar ste proyecto ha sido un autntico reto desde el principio hasta el final. Ya que los algoritmos no solo deban funcionar y dar el resultado correcto sino que adems deban aportar una explicacin de cmo se ha llegado al resultado final, mediante unas tablas con los pasos que se han seguido para llegar a la solucin. Pasos que pueden servir a los alumnos como gua y les ayudan a comprender la asignatura en su totalidad. La lgica de la aplicacin se centra en la codificacin de todos los algoritmos automticos de la parte terica de la asignatura relacionada con expresiones regulares y autmatas finitos, cada uno de ellos con una salida explicativa en forma de los pasos que se han de dar para obtener el resultado correcto. La aplicacin permite convertir entre los diferentes tipos de autmatas y expresiones regulares a otro cualquiera de estas materias, ya que se cierra el ciclo completo de transformacin con todos los algoritmos desarrollados. Este era nuestro principal objetivo, la realizacin de una aplicacin de autmatas y expresiones cerrada, de ayuda a los alumnos. Una vez que se cumple el objetivo de desarrollar una herramienta didctica a travs de los algoritmos con la muestra de los pasos, hemos desarrollado una interfaz grfica sobre la aplicacin por consola y la propia lgica de los algoritmos, funcionando de manera independiente. La interfaz grfica aporta facilidad de uso y funcionalidad a los usuarios que prefieran este enfoque ms visual. Es posible utilizar la aplicacin si necesidad de la interfaz grfica gracias a la vista por consola con comandos, muy al estilo de UNIX, y gracias a la creacin y edicin de archivos XML con un formato determinado (ver apndice cuatro) que representan los parmetros de entrada a los algoritmos. La interfaz grfica es traducible a cualquier idioma pensando en posibles usos para alumnos de cualquier nacionalidad. La versin entregada puede ser utilizada en ingls y espaol. Se puede traducir de manera sencilla a cualquier otro idioma ya que cuenta con ficheros XML de lenguajes. En la interfaz grfica se incluye la capacidad de creacin de ejercicios por parte del profesor. Estos ejercicios pueden ser enviados a los alumnos para que los intenten realizar en sus ordenadores y comprueben el resultado con el que ha introducido el profesor como solucin en el propio ejercicio, es decir, una vez el profesor los ha enviado el ejercicio ste se corrige automticamente si la necesidad del reenvo de la solucin. De esta forma el alumno puede autoevaluarse y aprender de sus errores. Los resultados de los ejercicios bien o mal realizados se guardan en la base de datos del usuario de forma que el profesor puede controlar si se han dado las respuestas correctamente o no y en cules de ellos. En la aplicacin hemos reunido muchos conocimientos aprendidos durante la carrera en multitud de asignaturas que hemos estudiado, en nuestro caso, las pertenecientes a la rama de software, que son: Ingeniera del Software: para la planificacin de un proyecto de envergadura, diseo de la aplicacin, etc.
80
TALFi
Estructuras de Datos y de la Informacin: tratamiento de las estructuras de datos, en nuestro caso, tablas hash, rboles binarios de bsqueda, listas, etc. Informtica Grfica: colocacin de los autmatas mediante algoritmos trigonomtricos sobre la ventana de la interfaz grfica. Laboratorios de programacin. Programacin Orientada a Objetos: el proyecto est implementado en Java, lenguaje mundialmente conocido como orientado a objetos. Accesibilidad en la web: cdigo HTML que hemos aprendido durante la asignatura. Bases de datos y Sistemas de Informacin: todo lo aprendido en la asignatura sobre tratamiento de ficheros (bases de datos) XML. Teora de Autmatas y Lenguajes Formales: todo el conocimiento terico sobre el que se basa la aplicacin se explica en esta asignatura.
TALFi es una aplicacin verstil y til para el alumnado y profesorado de las asignaturas de Teora de Autmatas en general. Facilitar el estudio de los contenidos y ayudar a las personas interesadas en la comprensin de forma agradable gracias a la interfaz diseada y la ejecucin por pasos de los algoritmos.
TALFi
81
Captulo 10.
Bibliografa
Nuestro director de proyecto es profesor en la temtica que trata el proyecto, y la mayor fuente de informacin procede de las reuniones con l y sus propias notas. A pesar de ello hemos tenido que consultar alguna bibliografa complementaria para implementar alguno de los algoritmos, de la que dejamos aqu constancia: 1- Hopcraft, Motwani, Uliman. "Introduccin a la teora de autmatas. Lenguajes y computacin" Addison Wesley 2002. 2- Dean Kelley: "Teora de Autmatas y Lenguajes Formales". Prentice Hall, 1997. 3- J. G. Brookshear, Teora de la Computacin: Lenguajes Formales, Autmatas y Complejidad, Addison-Wesley Iberoamericana, 1993.
TALFi
83
Anexos
TALFi
85
Anexo 1.
86
TALFi
transformacin, si se ha decidido ejecucin por pasos:-p, se obtiene adems una tabla de pasos con toda la informacin correspondiente. Algoritmo de transformacin ER->AFNLambda: Talfi r [-p] rutaxml Ejecuta el algoritmo de transformacin de ER->AFNLambda sobre la expresin regular almacenada en el archivo cuya ruta sea rutaxml, devuelve el autmata resultante de la transformacin, si se ha decidido ejecucin por pasos:-p, se obtiene adems una tabla de pasos con toda la informacin correspondiente.
TALFi
87
Anexo 2.
TALFi
89
Anexo 3.
JavaDoc
Todo el cdigo fuente de la aplicacin cuenta con comentarios explicativos, aparte de ello hemos realizado toda la documentacin JavaDoc que permitir a futuros desarrolladores reutilizar el cdigo y comprenderlo mejor, ya que adjuntamos con l toda una API de funcionalidad sobre cada una de las clases, mtodos y funciones que contiene el cdigo fuente. ndice del JavaDoc de la aplicacin: se encuentra en el CD adjunto a la memoria en la carpeta JavaDoc. El ndice se encuentra en la pgina: index.html.
TALFi
91
Anexo 4.
.
</menu>
2.-Archivos XML relacionados con los mensajes por pantalla. Estos archivos almacenados en la aplicacin como mensajes.xml y messages.xml, respectivamente en espaol e ingls tienen como estructura principal las cadenas de caracteres que devuelve como mensajes de alerta, error e informacin de la aplicacin. Como por ejemplo:
<?xml version="1.0" encoding="ISO-8859-1"?> <mensajes> <pasos> <pregunta>Steps?</pregunta> <preguntaG>Do you want to see all the steps?</preguntaG> <con>With steps</con> <sin>Without steps</sin> </pasos>
92
</mensajes>
TALFi
3.-Archivos XML relacionados con los mensajes de las pginas HTML. Estos archivos almacenados en la aplicacin como trhtml_esp.xml y trhtml_eng.xml, respectivamente en espaol e ingls tienen como estructura principal las cadenas de caracteres que se usan como mensajes en las pginas HTML generadas automticamente en la aplicacin. Como por ejemplo:
<traductorhtml> <minimizacion> <title>Minimization algorithm result</title> <input>Input</input> <output>Output</output> <steps>Steps-Minimization table</steps> </minimizacion> </traductorhtml>
4.-Archivos XML relacionados con los autmatas. Estos archivos almacenados en la carpeta de ejemplos, aunque pudieran aparecer en cualquier otro lugar, se generan automticamente mediante la interfaz grfica y contiene toda la informacin relacionada con los autmatas finitos, es decir, estados, transiciones, alfabeto y tipo de autmata. Como por ejemplo:
<authomata> <type> <item>AutomataFD</item> </type> <alphabet> <item>1</item> <item>0</item> </alphabet> <states> <state>S0</state> <state>S1</state> </states> <init> <state>S0</state> </init> <finals> <state>S0</state> </finals> <arrows> <arrow> <state>S0</state> <state>S1</state> <item>1</item> </arrow> <arrow> <state>S1</state> <state>S0</state> <item>0</item>
TALFi
</arrow> <arrow> <state>S0</state> <state>S0</state> <item>0</item> </arrow> <arrow> <state>S1</state> <state>S1</state> <item>1</item> </arrow> </arrows> </authomata>
93
5.-Archivos XML relacionados con los ejercicios Estos archivos almacenados en la carpeta de ejercicios, aunque pudieran aparecer en cualquier otro lugar, se pueden generan automticamente mediante la interfaz grfica y contiene toda la informacin relacionada con los ejercicios a resolver por los usuarios, es decir, enunciado, entrada y resultado. Como por ejemplo, el siguiente ejemplo de minimizacin de autmatas:
<ejercicio> <tipo>Minimizacion</tipo> <enunciado>Minimiza el siguiente automata finito</enunciado> <input> <authomata> <type> <item>AutomataFD</item> </type> <alphabet> <item>a</item> <item>b</item> </alphabet> <states> <state>S1</state> <state>S2</state> <state>S3</state> <state>S4</state> </states> <init> <state>S1</state> </init> <finals> <state>S4</state> </finals> <arrows> <arrow> <state>S1</state> <state>S2</state> <item>a</item> </arrow> </arrows> </authomata> </input> <output> <authomata> <type> <item>AutomataFD</item> </type> <alphabet>
94
<item>a</item> <item>b</item> </alphabet> <states> <state>S10</state> <state>S43</state> <state>[S21,S32]</state> </states> <init> <state>S10</state> </init> <finals> <state>S43</state> </finals> <arrows> <arrow> <state>S10</state> <state>[S21,S32]</state> <item>b</item> </arrow> </arrows> </authomata> </output> </ejercicio>
TALFi
Se autoriza a la Universidad Complutense a difundir y utilizar con fines acadmicos, no comerciales y mencionando expresamente a sus autores, tanto la propia memoria, como el cdigo, la documentacin y / o el prototipo desarrollado. Fdo: Miguel Ballesteros Martnez: