Cuando concuerda con un lexema ms de un patrn, el analizador lxico debe proporcionar
informacin adicional cobre el lexema concreto que concord con las siguientes fases de compilador. Por ejemplo, el patrn num concuerda con las cadenas 0 y 1, pero es indispensable que el generador de cdigo conozca que cadena fue realmente la que se emparejo. El analizador lxico recoge informacin sobre los componentes lxicos en sus atributos asociados. Los componentes lxicos influyen en las decisiones del anlisis sintctico, y los atributos, en la traduccin de los componentes lxicos. En la prctica, los componentes lxicos suelen tener un solo atributo. Un apuntador a la entrada de la tabla de smbolos donde se guarda la informacin sobre el componente lxico; el apuntador se convierte en el atributo del componente lxico. A afecto de diagnstico, puede considerarse tanto el lexema para un identificador como el nmero de lnea en el que este se encontr por primera vez. Estos dos elementos de informacin se pueden almacenar en la entrada de la tabla de smbolos para el identificador. Ejemplo: los componentes lxicos y los valores de atributo asociados para la proposicin de FORTRAN. E = M * C ** 2 Se escriben a continuacin como una secuencia de parejas:
Obsrvese que en ciertas parejas no se necesitan un valor de atributo: el primer componente es suficiente para identificar el lexema. En este pequeo ejemplo. Se ha dado al componente lxico nm un atributo de valor entero. El compilador puede almacenar la cadena de caracteres que forma un numero en una tabla de smbolos y dejar que el atributo del componente lxico num sea un apuntador a la entrada de la tabla.
ERRORES LEXICOS Son pocos los errores que se pueden detectar simplemente en el nivel lxico poruqe un analizador lxico tiene una visin muy restringida de un programa fuente. Si aparece la cadena fi por vez en un programa de C en el contexto Fi ( a == f(x) ) Un analizador lxico no puede distinguir si fi es un error de escritura de la palabra clave if o si un identificador de funcin no declarado. Como fi es un identificador valido, el analizador lxico debe devolver el componente lxico de un identificador y dejar que alguna otra fase del compilador su ocupe de los errores. Pero. Supngase que surge una situacin en la que el analizador lxico no puede continuar porque ninguno de los patrones concuerda con un prefijo de la entrada restante. Tal vez la estrategia de recuperacin mas cencilla sea la recuperacion en modo de panico. Se borran caracteres sucesivos de la entrada restante hasta que el analizador lxico pueda encontrar un componente lxico bien formado. Esta tcnica de recuperacin puede confundir en ocaciones al analizador sintctico, pero en una ambiente de computacin interactivo puede resultar bastante adecuada. Otras posibles acciones de recuperacin de errores son: 1. Borrar un carcter extrao 2. Insertar un carcter que falta 3. Reemplazar un carcter incorrecto por otro correcto 4. Intercambiar dos caracteres adyacentes Se puede probar este tipo de transformaciones de error para intentar reparar la entrada. La ms sencilla de tales estrategias consiste en observar si un prefijo de la entrada restante se puede transformar en un lexema valido mediante una sola transformacin de error. Esta estrategia da por supuesto que la mayora de los errores lxicos se deben a una sola transformacin de error, suposicin que normalmente. Pero no siempre, se cumple en la prctica.
Una forma de encontrar los errores en un programa consiste en calcular el nmero mnimo de transformaciones necesarias para transformar el programa errneo en otro que este sintcticamente bien construido. Se dice que el programa errneo tiene K errores cuando la secuencia ms corta de transformaciones de error que lo transformara en algn programa valido tiene la longitud k. la correccin de errores de distancia mnima es un criterio terico apropiado, pero no se suele usar en la prctica porque su aplicacin es demasiado costosa. Sin embargo, algunos compiladores experimentales han empleado el criterio de la distancia mnima para hacer correcciones locales