Una de la funciones del analizador lxico es leer la secuencia de
caracteres del programa fuente, carcter a carcter, y los agrupa para formar unidades con significado propio. Los tokens son componentes lxicos representan palabras reservadas, operadores, identificadores, smbolos especiales, constantes numricas y de caracteres. El analizador lxico opera bajo peticin del analizador sintctico devolviendo un componente lxico conforme el analizador sintctico lo va necesitando para avanzar en la gramtica. Algunas de las funciones secundarias del analizador lxico son: -
Manejo del fichero de entrada del programa fuente: abrirlo, leer
sus caracteres, cerrarlo y gestionar posibles errores de lectura. La expansin de macros y funciones inline: # define ... Reconocimiento y ejecucin de las directivas de compilacin (por ejemplo, para depurar u optimizar el cdigo fuente).
El patrn es una regla que genera la secuencia de caracteres que puede
representar a un determinado componente lxico. El lexema cadena de caracteres que concuerda con un patrn que describe un componente lxico. Un componente lxico puede tener uno o infinitos lexemas. Los componentes lxicos se suelen definir como un tipo enumerado. Se codifican como enteros. Tambin se suele almacenar la cadena de caracteres que se acaba de reconocer (el lexema), que se usara posteriormente para el anlisis semntico. ESPECIFICACIN DE LOS COMPONENTES LXICOS: EXPRESIONES REGULARES.
Los componentes lexicos se especifican haciendo uso de expresiones
regulares. Sus tres operaciones bsicas son concatenacin, repeticin y alternativas. Los AFD se pueden utilizar para reconocer las expresiones regulares asociadas a los componentes lexicos. ASPECTOS PRCTICOS EN LA IMPLEMENTACIN DE UN ANALIZADOR LXICO
Dentro de los aspectos prcticos se encuentran los siguientes:
Principio de mxima longitud: Aqu se da prioridad al componente
lxico de mxima longitud. Por ejemplo: <> se interpreta como el operador \distinto de", en vez de \menor que" y \mayor que". Palabras reservadas versus identificadores: Un lenguaje de programacin puede tener del orden de 50 palabras reservadas.
Entrada de los identificadores en la Tabla de Smbolos: En
lenguajes sencillos con solo variables globales y declaraciones, es normal implementar el scanner para que introduzca los identificadores en la Tabla de Smbolos conforme los va reconociendo, si es que no han sido ya introducidos.
Gestin del buffer de entrada: El proceso de lectura de los
caracteres de la entrada y formar los componentes lexicos es lo ms costoso en tiempo en el proceso de traduccin. Es importante implementarlo eficientemente. TRATAMIENTO DE ERRORES LEXICOS
Los errores lexicos se detectan cuando el analizador lxico intenta
reconocer componentes lexicos y la cadena de caracteres de la entrada no encaja con ningn patrn. Algunos de los errores lexicos tpicos son: -
Nombre ilegales de identificadores: un nombre contiene caracteres
invlidos. Nmeros incorrectos: un nmero contiene caracteres invlidos o no est formado correctamente. Fin de archivo: Se detecta un fin de archivo a la mitad de un componente lxico. Los errores lexicos se deben a descuidos del programador. GENERADORES AUTOMATICOS DE ANALIZADORES LEXICOS: LEX
Todos los analizadores lexicos realizan la misma funcin (se
implementan de igual forma) excepto en los tokens que reconocen, las expresiones regulares que los definen. Resulta entonces natural y una forma de ahorrar esfuerzo, utilizar generadores automticos de analizadores lexicos. Estos generadores solo necesitan conocerla especificacin de tokens a reconocer. Los analizadores lexicos (el AFD) se pueden implementar a mano para reconocer los componentes lexicos de un determinado lenguaje. Este opcin tiene sentido solo cuando el aprender a
utilizar una determinada herramienta nos llevara ms tiempo que
el hacerlo nosotros a mano. Un fichero Lex consiste de tres partes: definiciones, reglas y rutinas auxiliares, separadas por %%.