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.