next up previous contents
Next: 6.3.2 Estructuras de datos Up: 6.3 Integración con el Previous: 6.3 Integración con el

6.3.1 La variable token

Para facilitar la interacción del analizador sintáctico son el reconocedor léxico no determinista, se ha optado por mantener intactas las estructuras generadas por Flex y añadir una nueva variable, denominada token, que almacene la lista de componentes léxicos reconocidos en cada ejecución de la función yylex.

La variable token tiene como tipo una nueva estructura denominada ice_lex_object. Esta estructura, que se define en el fichero de cabecera que contiene las declaraciones de tipos y fuenciones C utilizadas en el reconocedor generado por Flex, se muestra en el siguiente fragmento de código:

struct ice_lex_object
{
        char         *word;
        INT_LIST     category,
                     gender, 
                     number,
                     person, 
                     verbal_tense;
        STRING_LIST  lemma;  
}

El siginificado de los distintos campos es el siguiente:

Estos dos campos cosnstituyen la información básica que se debe almacenar en token para permitir el enlace entre los anlizadores léxico y sintáctico. Por tanto, debe ser incorporada en cualquier programa Flex que pretenda utilizar el reconocimiento no determinista de los componentes léxicos. El resto de la información almacenada en la variable token es específica de la aplicación que se trata en este trabajo. Diferentes aplicaciones pueden redefinir la estructura ice_lex_object para adaptar el contenido de los campos a sus necesidades específicas. Otra posible solución hubiese sido situar esta información dependiente de la aplicación en la variable yylval. Para ello habría que definir dicha variable como un puntero a una lista de estructuras en las que se almacenaría tal información. El problema surge al tratar de mantener la consistencia entre la lista de componentes léxicos (representada como una lista de ice_lex_object's) y la lista de yylval's. Para facilitar el mantenimiento de esta consistencia se ha considerado más adecuado almacenar toda la información que tiene relación con las capacidades no deterministas en una única estructura. Con ello se consigue adicionalmente un alto grado de aislamiento de estas nuevas características con respecto a las capacidades estándar de los reconocedores generados por Flex.

Los campos con información adicional dependiente de la aplicación que se han utilizado son:


next up previous contents
Next: 6.3.2 Estructuras de datos Up: 6.3 Integración con el Previous: 6.3 Integración con el

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