lunes, 29 de abril de 2013

¡He conseguido que el programa consiga pasar a AFD! o casi...

La solución que tome al final fue la de ir pasando a AFD según inserta una nueva expresión regular.

Ahora en lugar de almacenar en los arboles de ER y de Nombres su ANDLT, los comprime a AFD. Pero las distintas ER son unidas mediante un ANDLT, como estructura general.

Por ejemplo, tenemos el AFD de un dígito y el AFD de un natural, pues estas estructuras son unidas entre sí mediante un ANDLT, es decir, las une mediante estados Landa.

He dotado al programa para que mediante un parámetro trabaje con ANDLT o con AFD para el cálculo del ANDLT principal.

Lancé el programa y tardó aproximadamente 1 hora en realizar todos los cálculos con las ER que se indicaron en el post anterior. Pasó de 17540 estados a 9679, reduciendo así en 44,79%.

Pero aún no estoy contento. Observando las tablas de transiones he notado que se pueden comprimir mucho más, así que voy a implementar otra capa más, el AFD mínimo.

Y aún  queda por pasar el ANDLT general a todo un AFD y mínimo.

Eso sí, los tiempos para realizar un reconocimiento de una ER son buenísimos. Apenas tiene que hacer transiciones, y eso que no es un AFD mínimo completo.

Estoy planteandome el que cuando se lance el programa, en lugar de generar toda esta estructura, lo interesante sería recuperarla de disco, habiendo almacenado previamente todas las tablas de transiciones de los AFDminimos ya calculados de las ER, para evitar su nuevo cálculo y agilizar el inicio.

Bueno, paso a paso, por lo menos ¡¡¡ TERMINA EL CÁLCULO!!!.

No hay comentarios:

Publicar un comentario