InformeTesis-YeinielAlfonso-Optimizacion ER - AFN
InformeTesis-YeinielAlfonso-Optimizacion ER - AFN
InformeTesis-YeinielAlfonso-Optimizacion ER - AFN
net/publication/324114613
CITATIONS READS
0 2,770
2 authors:
All content following this page was uploaded by Yeiniel Alfonso on 30 March 2018.
Facultad de Informática
Matanzas, Cuba
Julio, 2010.
¿Por qué esta magnífica tecnología científica, que
ahorra trabajo y nos hace la vida más fácil, nos aporta
tan poca felicidad? La repuesta es esta, simplemente:
porque aún no hemos aprendido a usarla con tino.
Albert Einstein
Y para que así conste, firmo la presente a los 28 días del mes de junio del 2009.
______________ ______________
Existen innumerables situaciones en las que se hace necesario comprobar, a partir de un patrón,
si un elemento se corresponde con la estructura deseada. En otros casos es preciso sustituir una
determinada estructura por otra o simplemente remplazarla totalmente. Para esto son buenas las
Expresiones Regulares (ER). Pero existe una gran variedad de formas en que pueden ser
implementadas, encontrar la óptima según la longitud de la cadena que la representa es una tarea
compleja porque requiere de estudios profundos sobre el tema.
La tesis titulada Optimización de expresiones regulares a partir del autómata finito equivalente
presentada por el estudiante Yeiniel Alfonso Martínez, en opción al título de Ingeniero Informático,
desarrollada en la UMCC, intenta resolver una problemática de gran actualidad, pues busca
solucionar un problema que aún no ha sido resuelto. Por lo que considero que es un tema que
permitiría ir más allá de un trabajo de diploma.
El tutor de este trabajo de diploma considera que, durante su ejecución, el estudiante mostró las
cualidades que a continuación se detallan:
En su trabajo fue consecuente con los aspectos tanto metodológicos como de la investigación
científica propiamente. Desarrolló su investigación con disciplina. Gracias a esto logra una feliz
culminación de su propuesta, obteniendo no solo excelentes resultados de valor para la
comunidad de investigadores, sino también como valor agregado de nuevas funciones para un
producto informático que se utiliza como herramienta para la docencia en nuestra facultad. La
documentación y los experimentos realizados, tienen gran valor y están correctamente
estructurados. Demostró dominio sobre el tema y captó con rapidez los principales elementos
abordados, especialmente el trabajo con Expresiones Regulares y Autómatas Finitos. En el
trabajo se aprecia rigor, manifestado desde el tratamiento de los conceptos estudiados y
referenciados en la bibliografía, hasta las conclusiones, lo que ha contribuido a la correcta
solución de los problemas enfrentados y ha dejado planteados importantes elementos a tener en
consideración en futuras investigaciones.
Las pruebas realizadas de forma manual y automatizada para validar su hipótesis no sólo son la
vía para certificar su trabajo, sino una demostración de lo que se puede lograr cuando se trabaja
con pasión e interés por la excelencia. Es importante destacar el uso de herramientas para
automatizar el proceso de pruebas unitarias como elemento de ingeniería de software en la etapa
que más influye en la calidad del software resultante.
Las conclusiones están correctamente estructuradas y en concordancia con los objetivos a lograr.
El trabajo cumple con los objetivos propuestos, aborda un tópico de gran actualidad y rigor
científico. El producto obtenido es de gran importancia para la comunidad de investigadores en
PLN, pues permite realizar operaciones que en la primera versión de la herramienta no estaban
disponibles y han sido bien recibidas por sus usuarios.
Por todo lo anteriormente señalado, considero que el estudiante Yeiniel Alfonso Martínez reúne
los requisitos para el título de Ingeniero Informático y espero le sea otorgada la mejor calificación
de este Tribunal.
__________________________
Ing. Abel Pérez Martínez Emitida: 28 de junio de 2010.
Resumen
Las expresiones regulares o cadenas de texto para describir un patrón de búsqueda,
son útiles en compilación y desarrollo del Procesamiento de Lenguaje Natural. Estos
contienen un autómata finito equivalente. Por las ventajas que ofrecen las expresiones
regulares, se ha elaborado un método que permite definir los procesos de equivalencia
de los autómatas y optimizarlos, con el objetivo de obtener a partir de ellos su
expresión regular mínima, implementando una biblioteca de clase que se adicionó al
software ERAFPLN. Se recoge el estudio del estado del arte asociado a la temática.
Se realiza un historial de desarrollo para medir el esfuerzo. Para demostrar la hipótesis
departida se detallan los experimentos aplicados. El resultado más relevante de esta
investigación es haber obtenido un método y aplicarlo a un recurso informático para la
optimización de expresiones regulares a partir de su autómata finito.
Tabla de Contenidos
Introducción ................................................................................................................................. 1
Recomendaciones ..................................................................................................................... 70
En Informática, sería transformar un programa para que realice las mismas tareas en
menos tiempo, con menos requerimientos de memoria y empleando los recursos de
forma óptima. Siempre han existido (y existirán) situaciones que requieren la
optimización para resolver un problema dado. En el caso de los informáticos, si con
pocos códigos pudieran mejorar un software, ahorrarían tiempo y disminuiría el
desgaste físico e intelectual.
Para el programador las expresiones regulares son muy útiles. Esta poderosa
herramienta permite escribir códigos cortos y ahorrar tiempo, especialmente en
JavaScript cuando no se cuenta con una conexión a Internet de alta velocidad. La
mayor parte de la sintaxis de las expresiones regulares trabaja igual en una amplia
variedad de herramientas y lenguajes de programación.
1
sintaxis para un inexperto difícil de recordar y bastante compleja. Una expresión
regular tiene un autómata finito equivalente, o sea, al confeccionar un autómata finito
podemos generar una cadena de texto (una vía más cómoda para inexpertos).
Al procesar una tabla con una cantidad de registros del orden de los millones en una
base de datos de una aplicación, sería factible utilizar expresiones regulares pues
resulta más costoso e impreciso usar en una consulta un operador como LIKE. De
igual forma si se conecta un mayor número de usuarios, la simplificación de la
expresión regular contribuiría a incrementar la velocidad en el procesamiento de los
datos.
Objetivos específicos:
3
Capítulo 1. Fundamentación teórica y tendencias
tecnológicas
1.1 Motivación
En este capítulo, en aras de comprender la problemática planteada para proponer la
solución, se exponen definiciones y algoritmos matemáticos sobre las
transformaciones de equivalencias de expresiones regulares y autómatas. Se realiza
un estudio del estado del arte a un grupo de herramientas informáticas que tratan las
expresiones regulares y los autómatas. Además, se aborda la fundamentación teórica
de las pruebas automáticas como elemento fundamental de ingeniería de software
utilizada en la construcción de la solución.
Conjunto Vacío (): Cuando ninguno de sus elementos cumple una condición
dada.
4
Conjunto potencia: Todos los subconjuntos de un conjunto A.
Subconjunto: Es una parte del conjunto y a la vez es un conjunto per se. Ejemplo:
Sean los conjuntos A= {0, 1, 2, 3, 5, 6, 7, 8, 9} y B= {3, 4, 5}, en este caso decimos que B
Optimizar: Buscar la mejor manera de realizar una actividad, según la Real Academia
Española(3).En Informática, tratar de adaptar un programa o software que realice las
mismas funciones o tareas en menos tiempo y requerimiento de memoria. Utilizar los
recursos de forma rápida y eficiente.
5
No Determinismo: Existen varias alternativas.
L, es finito.
6
L, es la estrella de Kleene de algún lenguaje regular, L = R*.
Una expresión regular es una cadena de texto para describir un patrón de búsqueda.
Es una fórmula que caracteriza un lenguaje ─un conjunto de cadenas. Resultan útiles
en compilación y desarrollo del Procesamiento de Lenguaje Natural. También permiten
sustituir textos, editar o generar nuevos ficheros, manipulando el contenido de otros.
λ y Ø ER
Si ζ ∑, entonces ζ ∑ ER.
Si E1, E2 ER, entonces (E1 | E2) ER, (E1 • E2) ER, (E1)* ER.
L(ζ) = { ζ }, ζ ∑
L( ( R • S ) ) = L(R)L(S), R,S ER
7
L( ( R | S ) ) = L(R) U L(S),R, S ER
L( (R)* ) = L(R)*,R ER
Operadores Básicos:
Una o más repeticiones (+): a+ indica que acepta una o más repeticiones de
a.
O lógico (|): a|b indica que existe una alternativa que puede aceptar aob.
Comodines y abreviaturas:
8
\s: indica los caracteres de separación (\t ,\n, \r y espacio).
Teorema: Todo lenguaje definido por una expresión regular también es definido por un
autómata finito(5).
Q es un conjunto de estados.
∑ es el alfabeto de entrada.
s K es el estado inicial.
9
La palabra “ami’ en francés, significa “amigo” en español. Se puede notar que tienen
cierta similitud, “ami” es un subconjunto de “amigo”, A = {a, m, i}, B = {a, m, i, g, o},
Figura 1.3Autómata finito que reconoce las cadenas "amigo", “amigos”, "ami" y “amis”
10
Tabla 1.1 Transición del autómata finito Figura 1.2
a m i g o
q1 q2
q2 q3
q3 q4
q4 q5
q5 q7
q7
Partiendo de un estado y un símbolo del alfabeto hay un solo estado siguiente, o sea
si el estado qQ, para el símbolo d∑ existe una sola transición δ(q,d) posible,
entonces el autómata es determinista (AFD).
De un estado parten varias transiciones con el mismo símbolo del alfabeto, o sea el
estado qQ, para el símbolo d∑ existe más de una transición δ(q,d) posible,
entonces el autómata es no determinista (AFND).
Si contiene transiciones vacías o, permite cambiar de estado sin procesar ningún
símbolo de la entrada, entonces el autómata es no determinista con transiciones
vacías (AFND-). Es el que más estados posee.
Los AFND tienen menos restricciones que los AFD, siendo este último un caso
particular de los AFND. Todo AFD es un AFND.
11
Figura 1.4 Modelo de equivalencia entre expresiones regulares y autómatas; y entre los diferentes
autómatas
ab:
(ab):
12
Figura 1.6 AFND- equivalente, de la expresión regular (ab)
13
Figura 1.9 AFND- equivalente de la expresión regular a|b|c
a*:
a+:
14
Figura 1.12 AFND- equivalente de la expresión regular a+
Iteración 2:se aplica la operación de concatenación a los nodos (q1, q3) y (q2, q4):
15
Figura 1.15 AFND- equivalente de la expresión regular ad|ad*
Ejemplos:
16
1.2.5.1 Conversión de AFND- a AFD
a d Aceptación
A={q0}∪{q1, q2}
Iteración 2: Se calculan todos los estados alcanzables con la letra a y d desde cada
elemento del Conjunto A.
a d Aceptación
A={q0}∪{q1, q2} B={q6, q7}∪{q18, q4, q5}
B={q6, q7}∪{q18, q4, q5} sí
Iteración 3: Se calculan todos los estados alcanzables con la letra a y d desde cada
elemento del Conjunto B.
Con la letra d desde q6 se llega a q3, desde q18 a q19 formando el conjunto {q3, q19}
al cual se aplica la clausura y forman el conjunto {q5, q18, q4}, y la unión de ambos
17
Tabla 1.4 Tabla de transición del autómata (Figura 1.15)
a d Aceptación
A={q0}∪{q1, q2} B={q6, q7}∪{q18, q4, q5}
C={q3, q19}∪{q5, sí
B={q6, q7}∪{q18, q4, q5} q18, q4}
C={q3, q19}∪{q5, q18, q4} sí
Iteración 4: Se calculan todos los estados alcanzables con la letra a y d desde cada
elemento del Conjunto C.
Con la letra d desde q18 se llega a q19, formando el conjunto {q19} al cual se le aplica
la clausura emergiendo el conjunto {q3, q5, q18, q4}. Al unir estos dos conjunto se
a d Aceptación
B={q6, q7}∪{q18, q19, q4,
A={q0}∪{q1, q2} q5}
C={q3, q19}∪{q5, q18, sí
B={q6, q7}∪{q18, q4, q5} q4}
C={q19}∪{q3, q5, sí
C={q3, q19}∪{q5, q18, q4} q18, q4}
Iteración 5 y final: No existe conjunto nuevo a analizar. Obteniendo la tabla del AFD
equivalente.
a d Aceptación
A B
B C sí
C C sí
18
Figura 1.16 AFD equivalente del AFND (Figura 1.15)
A medida que se obtienen los conjuntos del autómata, se calcula la tabla de transición.
Con la letra a desde q0 se llega a q1 y q2, formando el conjunto {q1, q2} denominado
B.
a d
A={q0} B={q1, q2}
B
Iteración 2: Se calculan todos los estados alcanzables con la letra a y d del conjunto
{q1, q2}
19
Con la letra d desde q1 se llega a q3 y desde q2 se llega a q4, formando el conjunto
C{q3, q4}.
a d
A={q0} B={q1, q2}
B C={q3, q4}
C
Iteración 3: Se calculan todos los estados alcanzables con la letra a y d desde cada
elemento del Conjunto C.
Con la letra d desde q3 se llega a q3, formando el conjunto {q3} que pertenece a C.
a d
A={q0} B={q1, q2}
B C={q3, q4}
C C
20
Dos estados son distinguibles cuando uno tiene la condición de aceptación o final, y el
otro no. Ejemplo: La Figura A y C son distinguibles.
Cuando dos estados son equivalentes, se elimina uno para evitar redundancias. El
problema de esta acción radica en qué hacer con las flechas que conectan el estado
eliminado con el resto. Esto se soluciona con los siguientes criterios (4):
Las flechas que llegan al estado eliminado son redirigidas hacia su estado
equivalente.
Construir Tabla: Las filas y columnas están etiquetadas con estados. Representando
una pareja de estados del autómata. Ejemplo: Del AFD (Figura 1.16) su Tabla de
estados equivalentes es (Tabla 1.10).
A simétrico simétrico
B simétrico
C
A B C
21
Esta tabla se construye de forma optimizada, o sea, triangular porque se buscan
relaciones de equivalencia:
A B
B X
C X
A B
Si se analiza el par (B, C), a la vez se analiza (C, B) porque se cumple la propiedad
simétrica de una relación binaria de equivalencia.
δ(B, d) = C , δ(C, d) = C se forma el par (C, C).Al analizar la Tabla 1.10, este par
equivalente se halla en la diagonal. Si el par formado en la tabla se encuentra marcado
entonces no es equivalente y se marca, de lo contrario, es equivalente. (Tabla 1.13)
B X
C X (B, C)
22
A B
B (B, C)
C X
A B
B √
C X √
A B
23
Figura 1.19 AFD equivalente de la expresión regular c+|d|aac*|ba
q2 X
q3 X
q4 X X
q5 X X
q6 X X X
q7 X X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q1, q4): los alfabetos de entrada son {a, b, c, d}, como para cada
cadena de entrada x, δ(q1, x) ≡ δ (q4, x), y se elabora la tabla de transición de
equivalencia (Tabla 1.17).
a d c d
q1 q4 q5 q2 q3
q4 q6
24
Tabla de transición de equivalencia: Forma de representar δ(q, x) ≡ δ (p, x) siendo
(x) una cadena de entrada. Las intersecciones de fila y columna muestran el próximo
estado con la cadena de entrada específica. Si contiene la tabla una casilla vacía, los
estados q y p no son equivalentes. Pero cuando todas las casillas se marcan, o sea,
están ocupadas, los pares que se forman son responden a la unión del superior con el
inferior. Ejemplo: (q4,q6).
q2 X
q3 X
q4 √ X X
q5 X X
q6 X X X
q7 X X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q1, q5): los alfabetos de entrada son {a, b, c, d}, como para cada
cadena de entrada x, δ(q1, x) ≡ δ (q5, x), elaborándose la siguiente tabla de transición
de equivalencia (Tabla 1.19).
a d c d
q1 q4 q5 q2 q3
q5 q7
25
Tabla 1.20 Tabla de Estados Equivalentes del autómata (Figura 1.19)
q2 X
q3 X
q4 √ X X
q5 √ X X
q6 X X X
q7 X X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q2, q3): el alfabeto de entrada es {c}, como para cada cadena de
entrada x,δ(q2, x) ≡ δ (q3, x), se elabora la tabla de transición de equivalencia (Tabla
1.21).
c
q2 q2
q3
q2 X
q3 X √
q4 √ X X
q5 √ X X
q6 X X X
q7 X X X
26
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q2, q6): el alfabeto de entrada es {c}, como para cada cadena de
entrada x,δ(q2, x) ≡ δ (q6, x), y se elabora la tabla de transición de equivalencia (Tabla
1.23)
c
q2 q2
q6 q6
Cuando se revisa en la tabla (Tabla 1.22) el par formado (q2, q6), no se encuentra
q2 X
q3 X √
q4 √ X X
q5 √ X X
q6 X (q2, q6) X X
q7 X X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q2, q7): el alfabeto de entrada es {c}, como para cada cadena de
entrada x,δ(q2, x) ≡ δ (q7, x) y se elabora la tabla de transición de equivalencia (Tabla
1.25)
c
q2 q2
27
q7
Los estados q2 y q7 no son equivalentes, por lo que se marca la casilla (Tabla 1.26):
q2 X
q3 X √
q4 √ X X
q5 √ X X
q6 X (q2, q6) X X
q7 X √ X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q3, q6): el alfabeto de entrada es {c}, como para cada cadena de
entrada x, δ(q3, x) ≡ δ (q6, x) y se elabora la tabla de transición de equivalencia (Tabla
1.27)
c
q3
q6 q6
Los estados q3 y q6 no son equivalentes, de ahí que se marque la casilla (Tabla 1.28):
q2 X
q3 X √
q4 √ X X
q5 √ X X
28
q6 X (q2, q6) √ X X
q7 X √ X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q3, q7): no contienen alfabetos de entrada. En este caso los dos
estados tienen la condición de aceptación. Se marcan como equivalentes (Tabla 1.29):
q2 X
q3 X √
q4 √ X X
q5 √ X X
q6 X (q2, q6) √ X X
q7 X √ (q3, q7) X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q4, q5): el alfabeto de entrada es {a}, como para cada cadena de
a
q4 q6
q5 q7
Si se revisa en la tabla (Tabla 1.29) el par (q6, q7) no se encuentra la casilla marcada,
29
Tabla 1.31 Tabla de Estados Equivalentes del autómata (Figura 1.19)
q2 X
q3 X √
q4 √ X X
q5 √ X X (q6, q7)
q6 X (q2, q6) √ X X
q7 X √ (q3, q7) X X
q1 q2 q3 q4 q5 q6
Al analizar la casilla (q6, q7): el alfabeto de entrada es {c}, como para cada cadena de
entrada x,δ(q6, x) ≡ δ (q7, x). y se elabora la tabla de transición de equivalencia (Tabla
1.32)
c
q6 q6
q7
casilla (q4, q5) se encuentra el par (q6, q7) por ende q4 y q5 no son equivalentes y se
marca la casilla (Tabla 1.33):
q2 X
q3 X √
q4 √ X X
q5 √ X X √
q6 X (q2, q6) √ X X
30
q7 X √ (q3, q7) X X √
q1 q2 q3 q4 q5 q6
Los estados equivalentes son: q2 ≡ q6, q3 ≡ q7, siendo el autómata finito determinista
optimizado (Figura 1.20)
Algoritmo:
Se adiciona un estado inicial (qi) al autómata (qi, ) = q0, con el objetivo de que
exista un estado inicial al cual no llegue ninguna transición,
31
Figura 1.22 El AFD (Figura 1.21) con los dos estados temporales.
Se eliminan los estados intermedios, o sea, todos los que estén en el camino entre qi y
qf. Al suprimir un estado, se reemplazan todos los caminos que pasan a través de él
se forma el par (qi, qf). En el paso C al eliminar q2 se adiciona en el par (qi, q3) la
secuencia bb con el operador básico de alternativa (O lógico). El paso D y final, realiza
lo mismo que el paso C, siendo la expresión regular resultante (aa|bb)|a.
32
Figura 1.23Proceso de conversión de AFD a expresión regular
33
En el análisis de las herramientas se tuvieron en cuenta los siguientes puntos:
B. Aplicación Web
C. Aplicación de Escritorio
G. Dibujar autómatas.
K. open source.
L. Pago
M. Gratis
Herramientas A B C D E F G H I J K L M N
RegExlib(7) x x x x x
x x x x
Javascript Regular
34
ExpressionValidator(8)
RegexPal(9) x x x
Metriplica(10) x x x
Regular
ExpressionTool(11) x x x
Regular
ExpressionWorkbench(16) x x x x x
RegexDesigner v1.0.2727
(17) x x x x x
SP-PS1 (19) x x x x x x x
ERAFPLN (1) x x x x x x x
RegexBuddy3 (20) x x x x x
0 6 9 15 6 9 2 1 2 1 2 1 14 1
35
16
14
12
10
0
A B C D E F G H I J K L M N
Figura 1.24 Gráfico de barras sobre las características de un grupo de 15 herramientas que facilitan el
proceso de obtención y prueba de expresiones regulares.
36
PHP PHPUnit
.NET NUnit
Dicho problema puede ser resuelto, con una extensión para la herramienta
ERAFPLN(1), que siga el modelo matemático de equivalencia entre expresiones
regulares y autómatas; y entre los diferentes autómatas, como se muestra en la Figura
1.4de John. E. Hopcroft(5), haciendo mayor énfasis en la optimización del autómata
finito determinista.
37
Capítulo 2. Descripción de la solución
2.1 Motivación
La propuesta de solución es la optimización de las expresiones regulares a partir del
autómata finito determinista. Se procedió a la construcción de una biblioteca de clases
denominada AutomatonLib y se adicionó ala herramienta informática ERAFPLN.
Esta extensión implementa un proceso elaborado por el autor de la investigación
(Figura 2.1), basado en el modelo matemático (Figura 1.4) de John. E. Hopcroft.
Figura 2.1Modelo de equivalencia entre expresiones regulares y autómatas; y entre los diferentes
autómatas, propuesto por el autor, para la solución del problema planteado
38
Este método se basa en las operaciones básicas de las expresiones regulares, sin
tener en cuenta las transiciones, como se describe en el epígrafe1.2.4.
En el siguiente algoritmo se explica con detalle, en cada caso, los pasos a seguir.
Algoritmo:
formado por los pares (q1, q2) = ab y (q1, q4) = cd. Después se buscan todos los
pares que comiencen con q2, para formar los que se inicien con el nuevo
estado (q4) y los estados finales de q2 y sus valores, en este caso sería (q4,
39
Figura 2.4 AFND equivalente de la expresión regular a(ab|cd)b
Figura 2.5 AFND equivalente de dividir la subexpresión ab|cd, de la expresión regular a(ab|cd)b
(Figura 2.4)
Figura 2.8) En este caso de q1 se transita a q2 y q3, formando los pares (q0,
40
Figura 2.8 AFND equivalente de la expresión regular a?(b|c)
auto enlace con el valor a, como de q1 se transita a q2, se forma el par (q0, q2)
41
Figura 2.11AFND equivalente de la expresión regular a*b
42
Figura 2.15 AFND equivalente de la expresión a|(b(c|d*e))
43
Figura 2.18 AFND equivalente de la expresión a|(b(c|d*e))
comiencen con q5 y se crean los que comiencen con q3 y terminen con los estados
finales y sus valores de los nodos buscados. Así se forma el autómata siguiente
(Figura 2.20).
44
Figura 2.20 AFND equivalente de la expresión a|(b(c|d*e))
a d Aceptación
q0 {q6, q7}
q7
q6
Caminos () = {q4, q5, q18}; como q5 es un estado de aceptación q7 adquiere esta
a d Aceptación
q0 {q6, q7}
q7 q19 sí
q6
q19
a d Aceptación
q0 {q6, q7}
q7 q19 sí
q6 q3
q19
q3
Caminos () = {q4, q5, q18}; como q5 es un estado de aceptación q19 adquiere esta
d. (Tabla 2.4).
a d Aceptación
q0 {q6, q7}
q7 q19 sí
q6 q3
q19 q19 sí
q3
46
Tabla 2.5 Tabla de transición del autómata (Figura 1.15)
a d Aceptación
q0 {q6, q7}
q7 q19 sí
q6 q3
q19 q19 sí
q3 sí
47
Ofrecer opciones que permitan realizar el proceso descrito en la Figura 2.1y
poder guardar el autómata con la opción donde se quedó.
LaFigura 2.23 muestra el diseño de las clases principales y su relación entre ellas. La
clase principal AutomatonElementBase hereda de AutomatonElement,
aprovechando las características de éste AutomatonElementBase usa la clase
48
Conjunto como elemento para realizar un proceso. Heredan de
AutomatonElementBaselas clases AutomatonAFND y AutomatonAFD, y esta
última usa a AutomatonAFND, y como elementos para realizar cálculos a ElemTable
y TableAFDElem. La clase AutomatonHelper contiene los procesos necesarios
utilizados en la interfaz, y tiene como objetivo organizar y concentrar los métodos en
una sola clase, para que el usuario que utilice esta biblioteca de clases, no tenga
necesidad de instanciar los diferentes autómatas. (Figura 2.24).
50
2.8 Implementación del algoritmo de AFND- a AFND
La implementación de este algoritmo se basa en el método descrito en el epígrafe 2.3
y la Figura 2.27muestra el diagrama de actividades. Este procedimiento se encuentra
en la clase AutomatonAFND. Se comienza recibiendo un AFND- y se eliminan las
transiciones formando un AFND equivalente.
51
Figura 2.29Diagrama de actividades donde se implementa el algoritmo de equivalencia de AFND a AFD
52
Figura 2.32Diagrama de actividades donde se implementa el algoritmo de optimización del AFD
En la clase ElemTable el atributo inicio indica la relación entre las filas y columnas
de la tabla de equivalencia, y el atributo nodo, los pares que son posibles
equivalentes.
53
findEquivalenteel cual devuelve los pares de nodos equivalentes, como se explica
a continuación (Figura 2.33:)
54
Figura 2.34 Diagrama de Clase denominada ElemTable
55
Figura 2.36 Relación de clases en el paquete erafpln
56
Debido a las modificaciones operadas en el diseño de la herramienta se logró
adicionar la extensión programada.
57
Capítulo 3. Experimentación, discusión y análisis de
los resultados
3.1 Motivación
En este capítulo se exponen los elementos que se tuvieron en cuenta para validar la
propuesta de solución. Se abordan las pruebas manuales y automáticas realizadas al
software. Además de un historial sobre el desarrollo de la extensión, con el cual se
demuestra la validez de la hipótesis planteada.
Tabla 3.1 Historial que refleja la cantidad de días, horas, comentarios, cantidad de interrupciones y faces
de desarrollo
58
Diseño febrero 22, 16.72 8 Estudio y elaboración de
2010 diseño en papel.
02:02:48 PM Diseño en NetBeans 6.1
Diseño gráfico.
7.45
0.48 Planificación
70.63 125.12 Código
Diseño
79.3
16.72 Revisar Código
Revisar Diseño
33 0 26 Planificación
8
Código
219 Diseño
133
Revisar Código
Revisar Diseño
Pruebas
3.3 Pruebas
AutomatonLib fue sometido a un experimento con datos reales, como parte del
ineludible proceso de pruebas por el que debe pasar todo software en sus fases
finales antes de ser liberado como versión definitiva.
El experimento realizado puede ser clasificado por el tiempo de duración como breve,
pues duró en todo el proceso de investigación aproximadamente siete horas. Por las
59
funciones de los métodos empíricos de investigación como verificador porque se
orienta hacia la comprobación de una hipótesis. En función de las condiciones para la
realización se clasifica como de laboratorio, debido a que los datos seleccionados
fueron escogidos teniendo en cuenta si existe o no optimización de los autómatas y
expresiones regulares.
Donde:
n es el tamaño de muestra.
60
Como no se dispone de un grupo de expertos en este tema, se verificarán solo 41
casos, 21 por pruebas manuales y 20 por pruebas automáticas.
Se realizó una serie de pruebas manuales (21 autómatas finitos) basado en la solución
propuesta (Figura 2.1) siguiendo las secuencias siguientes:
61
Figura 3.5Proceso de Optimización de un AFD.
62
Figura 3.7 El AFD óptimo de la Figura 3.6
63
Figura 3.9AFND-λ equivalente de la expresión regular ab*|a
64
Figura 3.12AFD equivalente de la expresión regular ab*|a
65
Figura 3.15AFD equivalente óptimo de la expresión regular ab*|a
Dentro de los casos exitosos, se encuentran expresiones regulares que con respecto
al original son mínimas, pero no son las más óptimas.
JUnitTest
Resultado
Pruebas ExReg Óptimo Nulo No Nulo Exitosas
1 ab*|ab+|ab ab* ab* x
2 (ab)(ab)* (ab)+ (ab)+ x
3 a|a|a|a+ a+ a+ x
4 b?b* b* b* x
66
5 a|ab? ab? ((ab)|a)
6 abc|abc(a|b)*|abc(a|b)? abc(a|b)* abc(a|b)* x
7 (a|b)|a?|b? (a|b) ((a|b)) x
8 (casa)|(casa)?|(casa)* (casa)* ((cas(acas)*a)) x
9 (ab)?cd|cd (ab)?cd ((abcd)|(cd)) (((cd))|(abcd))
10 (ab*|ab+)?d|(ab+)?d|(ab*)?d (ab*)?d ((ab*d)|(d) x
11 (ab)?d|d (ab)?d ((abd)|d) ((d)|(abd))
12 (ab*|ab+|ab)*|(ab)? (ab*)* ((a(a|b)*)) ((a+b((a+b)|b)*)) x
13 a.b a.b a.b x
14 [abc] [abc] [abc] x
15 [0-9]* [0-9]* ([0-9]*)
16 [0-9]+ [0-9]+ ([0-9])+
17 (a|b)*d (a|b)*d (a|b)*d x
18 aaaaa* aaaa+ aaaa+ x
19 a?a+ a+ a+ x
20 amigo|ami ami(go)? ((amigo)|(ami))
45.546 34.421
segundos segundos 14
14
Existosas
Fallidas
67
45.546
34.421
Nulo No Nulo
68
Conclusiones generales
Mediante los conocimientos teóricos adquiridos asociados a las expresiones regulares
y autómatas, se elaboró un método basado en el modelo matemático para la solución
del problema.
Se logró implementar un algoritmo que convierte una expresión regular a un AFND sin
transiciones vacías, a través de una serie de patrones establecidos.
Debido al costo computacional del método teórico para convertir un AFND-λ a un AFD,
fue necesario modificarlo para obtener de un AFND-λ un AFND.
69
Recomendaciones
Investigar cómo optimizar la transformación de un autómata finito a su expresión
regular equivalente.
70
Referencias Bibliográficas
1. Pérez Martínez, Abel. ERAFPLN. 2009.
71
17. Sells, Chris and Weinhardt, Michael.RegexDesigner v1.0.2727. [En línea]
http://www.sellsbrothers.com/tools/.
72
Anexo 3