next up previous contents
Next: 2.7.4 Acceso al los Up: 2.7 Asociación multinivel Previous: El árbol de enlace

2.7.3 La estructura ICEeditor

 

La estructura ICEeditor es la estructura de datos central de ICEeditor, en torno a la cual se organiza el programa. Se utiliza para establecer una relación estructurada entre los siguientes elementos:

En este capítulo no se trata la información concerniente a la imagen de ICEeditor, por lo que la discusión se centrará en aquellos campos relacionados directamente con el comportamiento interno del editor de componentes léxicos.

El campo TTLT

Este campo almacena el árbol de enlace. Realmente es un puntero de entrada al nodo raíz, a partir del cual podremos acceder a cualquiera de los nodos hoja, pasando por el nodo intermedio correspondiente.

Se ha utilizado una tabla hash que utiliza eq como predicado de comparación para el acceso a la clave. La elección de este predicado en lugar de equal se debe a la utilización del número de línea, que es un entero, como clave. El predicado eq se muestra como el más eficiente predicado de comparación entre enteros. Recordemos que la función de la tabla hash incorporada en el nodo raíz es la de actuar de puente hacia los nodos intermedios, como un índice de primer nivel construido a partir de los números de línea.

El campo operations

La interacción del usuario con los componentes léxicos es un proceso dinámico, en el que sucesivamente se van realizando operaciones de edición sobre los componentes léxicos, incluyendo la posibilidad de editar varias veces el texto correspondiente a un mismo componente léxico antes de proceder a realizar un nuevo análisis del texto.

Cuando se realice un nuevo análisis será preciso pasarle a ICE información sobre los componentes léxicos que han sido editados. Es por ello que se necesita algún lugar en el que ir almacenando datos acerca de las modificaciones realizadas entre dos análisis consecutivos.

Para almacenar esta información se utiliza el campo operations. Cada vez que se termine una operación de edición sobre un componente léxico, se almacenará en este campo, en la entrada correspondiente a ese componente léxico, el tipo de operación realizado, el texto antiguo y el nuevo texto editado. Puesto que toda operación de edición puede verse como una operación de modificación del componente léxicogif, es conveniente transformar cada operación realizada en su modificación equivalente antes de almacenarla en el campo operations.

La utilización de este campo permite al implemetador optar entre las siguientes alternativas a la hora de tratar con la edición de componentes léxicos borradosgif:

Se ha optado por utilizar una tabla hash porque proporciona un método de acceso rápido, con tiempo constante y evita el tener que realizar las ordenaciones a las que nos veríamos obligados en el caso de haber optado por otras estructuras, ya que el usuario posee libertad total en la elección del orden en que modificará los componentes léxicos. Puesto que los elementos de esta tabla tendrán un número fijo de componentes, lo más adecuado es utilizar vectores para su representación, con lo que evitamos el elevado coste que supone la utilización de elementos de tipo estructura.

El campo parsered-p

Este campo tiene caracter lógico, es decir, sus posibles valores son () (falso) y t (verdadero). Se le ha añadido el sufijo -p porque el método utilizado para su recuperación se comporta como un predicado lógico. El significado de este campo es el siguiente:

El campo edit-state

Este campo indica la operación actual que se está realizando o se va a realizar sobre alguno de los componentes léxicos. El valor de este campo podrá ser:

Según el valor almacenado en este campo, la información de edición será actualizada de forma distinta, y se utilizarán los colores y fuentes apropiados a la operación correspondiente.

El campo current-op

Este campo es muy útil en las tareas de sincronización del texto almacenado en el editor con la información presente en el árbol de enlace. Al igual que en la estrategia indirecta, en la estrategia multinivel es adecuado mantener puntos de sincronización en los cuales se garantiza la perfecta coherencia entre la información de la TTLT y el texto, mientras que entre dos puntos de sincronismo consecutivos se permiten modificaciones controladas sobre el texto. Con ello se evita la sobrecarga computacional que implicaría el tener que ir actualizando la TTLT cada vez que se inserta o borra un carácter.

Uno de los acontecimientos que dispara la activación de un punto de sincronización es la elección de una nueva operación de edición. En ese momento el campo edit-etate cambiará de valor para reflejar la nueva operación. Sin embargo, los cálculos de la sincronización deberán realizarse teniendo en cuenta la operación realizada sobre el último componente léxico, es decir, la que se halla precisamente almacenada en este campo. Una vez realizada la sincronización, este campo pasará a tener el mismo valor que edit-state.


next up previous contents
Next: 2.7.4 Acceso al los Up: 2.7 Asociación multinivel Previous: El árbol de enlace

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997