Next: 5.4.4 La recuperación de
Up: 5.4 La integración con
Previous: 5.4.2 La lista de
Para controlar la posición de cada componente léxico, mantenemos las cuatro variables
globales:
- token_info_list, de tipo TOKEN_INFO, que apunta
al inicio de la lista de información de componentes léxicos. Sólo se
inicializa una vez.
- item_token_info_list, un puntero al elemento de la lista en el que
se va almacenando la infomación del componente léxico que se está
reconociendo. Se debe crear un nuevo elemento en cada palabra
y asignarlo a este puntero.
- last_token_info_list, un puntero al último elemento de
la lista. Se utiliza para aumentar la eficiencia del proceso de enlace
de nuevos elementos al final de la lista.
- line_no, una variable entera en la que se almacena el
número de línea actual en el que se encuentra el reconocedor.
- pos_no, en la que se almacena la posición dentro de la
línea del carácter en el que se encuentra el proceso de
reconocimiento de palabras.
El procedimiento que se sigue para el control de la posición se
resume a continuación:
- Se incializan a cero las variables line_no y pos_no.
- En la última regla que se ejecuta en la detección no
determinista de cada palabra
, se crea un elemento de tipo
ITEM_TOKEN_INFO mediante
una llamada a la función malloc, se asigna a la variable
item_token_info_list y se rellenan los campos token_line y
token_pos con los valores de line_no y pos_no,
respectivamente.
- Cuando se llega a la regla de la condición de arranque <
S>, se rellena el campo token_len de la estructura apuntada
por item_token_info con el valor obtenido de calcular la
longitud del texto almacenado en yytext. Este valor también se
suma a pos_no para actualizar el valor de esta variable.
Se enlaza la información del nuevo componente léxico a la lista mediante una
llamada a la función CONC1_TOKEN_INFO.
- La regla que trata con los caracteres separadores no
significativos debe ser partida en tres: una que trate con
espacios en blanco, otra con tabuladores y otra para los
caracteres
de nueva línea:
- En la regla del tabulador y la del espacio tan sólo hay
que actualizar convenientemente el valor de
pos_no.
- En la regla de los caracteres de nueva línea, se
debe incrementar el valor de line_no y establecer a cero el
valor de pos_no.
Las reglas que tratan con los caracteres de puntuación se tratan
igual que las que reconocen lexemas, pues en este analizador, una
marca de puntuación es equivalente al lexema de un componente léxico, cuyo texto
es el propio carácter de puntuación.
Next: 5.4.4 La recuperación de
Up: 5.4 La integración con
Previous: 5.4.2 La lista de
Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997