Edición Interactiva en Entornos Incrementales

Miguel Angel Alonso Pardo

Tesis de Licenciatura.
Facultade de Informática, Universidade da Coruña, 1994.


Resumen

En este proyecto de estudian diferentes estrategias de interfaz que se pueden utilizar para conseguir una integración eficiente y a la vez elegante de un entorno de generación de analizadores no deterministas incrementales. Conjuntamente se va mostrando el proceso de construcción de una implementación real en la que se integran los siguientes elementos:

A continuación describimos muy sucintamente cada uno de los distintos componentes.

El analizador sintáctico se ha construido con la herramienta ICE (de Incremental Context-Free Environment). Brevemente, diremos que ICE es capaz, a partir de la definición de una gramática cuyas reglas se expresan en el mismo formalismo que el utilizado por Yacc, de generar un analizador sintáctico no determinista e incremental para dicha gramática.

El analizador léxico no determinista se ha desarrollado utilizando Flex. Brevemente, diremos es capaz de realizar todos los posibles análisis morfológicos de cada palabra de un texto en español partiendo de su lexema y estudiando sus morfemas. De ello se deriva un reducido tamaño y una alta eficiencia. Puesto que los analizadores generados por Flex son deterministas, ha sido necesario definir un mecanismo para conseguir que los reconocedores generados exhibiesen un comportamiento no determinista. Para ello se han definido condiciones de arranque y funciones especiales para la vuelta atrás en el análisis, todo ello conjugado con un sistema de semáforos.

Se ha utilizando la herramienta AIDA de Ilog para desarrollar la aplicación ICEeditor, que proporciona al usuario elementos gráficos de interacción como menús desplegables, botones, editores, ventanas de selección, etc. Su componente más importante lo constituye el editor de componentes léxicos, que permite editar interactivamente la representación textual de los componentes léxicos. Las operaciones básicas permitidos son la inserción, la modificación y el borrado de componente léxicos. Adicionalmente se ha definido un conjunto suplementario de operaciones, combinación de las anteriores, que facilitan la labor del usuario. En la realización del análisis incremental, los cambios introducidos en los componentes léxicos son pasados al analizador, y la estructura generada por éste es tenida en cuenta por el ICEeditor para reestablecer el enlace entre el texto y los componentes léxicos. Para conseguir un enlace eficiente se utilizan dos estructuras de datos: una primera encargada de sincronizar los componentes léxicos con la porción de texto que los representa, implemetada mediante una tabla hash multinivel en la cual la clave de acceso la constituye la posición de comienzo del texto de cada uno de los componentes léxicos, y una segunda que mantiene las operaciones de edición realizadas que es necesario conocer para realizar el análisis incremental, implementada mediante una tabla hash a la que se accede mediante el identificador del componente léxico.

ICEeditor proporciona un conjunto adicional de utilizades relacionadas directamente con la depuración y seguimiento del proceso de análisis, ente las cuales figura la posibilidad de visualizar una traza con la información que el usuario estime relevante. Es posible mostrar una traza de la generación de los itemsets, las operaciones de reducción y desplazamiento realizadas, los nodos compartidos generados en el bosque de análisis, las operaciones de push y pop realizadas por el autómata LALR subyacente y el análisis de complejidad del proceso de análisis. ICEeditor también permite realizar una navegación interactiva a través del bosque de análisis, incluyendo el acceso a las distintas opciones que se generan como consecuencia de la aparición de ambiguedades.

Palabras clave: Análisis sintáctico incremental, edición interactiva, entornos de programación.


Miguel Angel Alonso Pardo / alonso@dc.fi.udc.es