a ver si resuelves esta estrategia

caty
25 de Mayo del 2004
necesito pasar estos algoritmos que corresponden a la automatixacion de una tabla del lexico o tabla de estados en lenguaje c de su urgencia e importancia El analizador de léxico funciona bajo el siguiente mecanismo:

REPITE
Token = AnaLex();
SI Token == Identificador
ENTONCES
Token= REVISA_RESERVADAS(lexema)
FSI
HASTA QUE Token == EOF
FREPITE
Como las palabras reservadas es un conjunto de entidades conocido y finito, la tabla de símbolos se inicializa con ellas y cuando se reconoce un identificador, su lexema se busca en la tabla y si se encuentra en ella, se regresa el token correspondiente a través de invocar a la función REVISA_RESERVADAS. El algoritmo de la funcion REVISA_RESERVADAS es el siguiente:

REVISA_RESERVADAS(lexema)
INICIO
p=BUSQUEDA(lexema)
SI p == 0
ENTONCES
p=INSERTAR(lexema)
FSI
Regresa TABLA[p].Token
FIN
Este algoritmo supone al existencia de dos funciones que realizan la búsqueda y la inserción de un lexema en la tabla de símbolos, considerando de la existencia de la siguiente estructura de la tabla de símbolos:



donde última_entrada direcciona la última entidad registrada y último_lexema la primera localidad disponible donde se registran los lexemas. La función BUSQUEDA se guia bajo el siguiente algoritmo:

BUSQUEDA (lexema)
INICIO
Indice=última_entrada
MIENTRAS índice>0
REPITE
Si contenido(TABLA[Indice].Ap_lexema)==lexema
ENTONCES
regresa Indice
SINO
Indice:=Indice-1
FSI
FREPITE
Regresa Indice
FIN
donde es de notar que la búsqueda se inicia de la última entidad registrada hacia la primera bajo el supuesto que en un programa se encuentran con mayor frecuencia referencias a variables (que se registran al final) que a palabras reservadas (que estan registradas al inicio de la tabla). Si la búsqueda fracasa, la entidad tiene que darse de alta por la función INSERTAR, cuyo algoritmo es:

INSERTAR (lexema)
INICIO
LEXEMAS[último_lexema] = lexema
última_entrada = última_entrada + 1
TABLA[última_entrada].Ap_lexema = último_lexema.
TABLA[última_entrada].Token = última entrada.
último_lexema = último_lexema + LONGITUD(lexema).
Regresa última_entrada
FIN