Implantación de un analizador de léxico
La información en un diagrama de transición puede representarse por medio de una tabla que contenga por columnas a los símbolos del alfabeto del lenguaje y por renglones los diversos estados que constituyen al diagrama.
Para el ejemplo anterior donde se describen los patrones de las unidades de léxico Identificador, comentario, EOF y error, se obtendría la siguiente tabla:
Tabla del Analizador de Léxico
Estado | A-Z | 0-9 | _ | / | * | eof | otro |
0 | 1 | 13 | 13 | 5 | 13 | 12 | 13 |
1 | 1 | 2 | 3 | 4 | 4 | 4 | 4 |
2 | 1 | 2 | 3 | 4 | 4 | 4 | 4 |
3 | 1 | 2 | 3 | 4 | 4 | 4 | 4 |
4 | |||||||
5 | 14 | 14 | 14 | 14 | 6 | 14 | 14 |
6 | 8 | 8 | 8 | 8 | 7 | 15 | 8 |
7 | 10 | 10 | 10 | 9 | 7 | 15 | 10 |
8 | 8 | 8 | 8 | 8 | 7 | 15 | 8 |
9 | 11 | 11 | 11 | 11 | 11 | 11 | 11 |
10 | 8 | 8 | 8 | 8 | 7 | 15 | 8 |
11 | |||||||
12 | |||||||
13 | |||||||
14 | |||||||
15 |
Los estados finales o de aceptación de las unidades de léxico quedan sin información en las columnas ya que no existe una transición al reconocer o aceptar el patrón. Note que la designación de otro corresponde a los símbolos diferentes a los expresamente indicados y que para cada patrón es contextual.
Para poder realizar el análisis de léxico a partir de la información que contiene la tabla se cuenta con un mecanismo que parte del estado 0 y empieza a recorrer el diagrama por cada transición posible hasta llegar a un estado final. El algoritmo del mecanismo se describe a continuación.
Analizador_de_Lexico INICIO Estado=0 C=Inspecciona() Cont=0 Nuevo_Estado=TABLA[Estado, C] MIENTRAS Nuevo_Estado no sea Estado_Final REPITE Avanza() C=Inspecciona() Estado=Nuevo_Estado Nuevo_Estado=TABLA[Estado, C] Cont=Cont+1 FREPITE SI Cont es 0 ENTONCES Avanza() FSI Regresa Token (Estado_Nuevo) FIN
La función Analizador_de_Léxico utiliza dos funicones que permiten consumir los símbolos del programa fuente: Inspecciona y Avanza.
Las funciones consideran la existencia de un apuntador AP que direcciona al caracter próximo a leer. Inspecciona regresa el caracter apuntado por AP pero no lo incrementa
La función Avanza no regresa nada pero incrementa el valor de AP para estar en el siguiente símbolo a leer.