Sie sind auf Seite 1von 15

Compiladores: Anlisis Lxico

Anlisis Lxico
Programa Lenguaje Fuente

Anlisis Lxico

(Token, Lexema)

Mensajes de Error

Lee los caracteres del programa fuente de izquierda a derecha, y los agrupa en tokens

Funciones del Analizador Lxico


Convierte el programa fuente en una cadena de tokens Para reconocer el token usa un patrn, una regla que describe como se forman las cadenas que corresponden a un token. Salta comentarios y espacios en blanco (tabuladores, saltos de lnea...)

Tener el registro de la lnea del archivo fuente que est siendo analizada

Genera mensajes de error lxico, y se recupera del error Convierte los valores literales al tipo que corresponda Si la entrada debe obedecer a un formato, verifica el formato Ej. Fortran, Cobol

Tokens y Lexemas
Token:
Elemento bsico del lenguaje Unidad lxica indivisible Identifica una entidad lgica dentro del lenguaje Incluyen: Palabras Reservadas, Constantes, Operadores, Signos de Puntuacin e Identificadores

Lexema:
La cadena original que se identifica como token No hay correspondencia 1-1 entre token-lexema

Tokens y Lexemas: Ejemplos


Token
If parentesisIzq Identificador opSuma puntoComa Menor menorIgual

Token #
10 12 1 30 48 56 57

Lexema
if ( valor + ; < <=

Construccin de Generadores Automticos de Scanners


Construir un NFA para cada una de las expresiones regulares a reconocer Aplicar una unin a todas las expresiones (unirlas con un mismo estado de inicio -usando transiciones -), pero sin unirlas en un solo estado final (se requiere un estado de aceptacin para cada token de tal forma que se pueda identificar el token reconocido) Generar el DFA Hacer el programa de recorrido de DFA teniendo en cuenta que un lexema puede pasar por varios estados de aceptacin (crear una lista de los estados de aceptacin por los que pas)

Atributos para tokens


El analizador recopila informacin sobre los tokens a medida que los reconoce. Por ejemplo: token nm., pero... qu lexema?

Cuando la cadena de entrada permite reconocer ms de un token, esta informacin puede ayudar a desambiguar.

Estrategias de Recuperacin de Errores Lxicos


Modo Pnico: obvia los siguientes caracteres de la entrada hasta
encontrar un token bien formado

Tratar de Arreglar la entrada:

Borrar el carcter extrao Insertar el carcter perdido Reemplazar un carcter incorrecto por uno correcto Encontrar que cambio genera el menor numero de errores sintcticos, y aplicarlo

Palabras Reservadas
Identificador es una palabra que inicia con una letra, y es seguida por letras o dgitos Las palabras clave cumplen con este mismo patrn de construccin

Se hace necesario un mecanismo que permita decidir cuando una cadena es una palabra clave o un identificador Solucin sencilla: Palabras Reservadas (que no pueden ser usadas como identificadores)

Manejo de Buffers
Cuando se implementa el scanner es necesario manejar un buffer de entrada para hacer mas eficiente la lectura de la cadena de entrada Generalmente se define un buffer del tamao de un bloque de disco Se maneja un apuntador que marca el inicio del lexema que se est analizando, y un apuntador que marca el carcter que est siendo analizado
w Begin h i l e a > b \n

Forward

Manejo de Buffers
Posibilidades:
Un buffer w h i l e a > Final de Buffer

Par de Buffers i w h i l e Begin a

BeginForward > = ..1 5 2 5

Forward

Sentinelas: marcar el final del buffer con EOF. Entonces EOF significa: Lleg al final del 1er. buffer : debe cargar el segundo Lleg al final del 2o. Buffer: debe cargar el primero Lleg al final del archivo

Porque se divide el Anlisis Lxico del Sintctico?


Simplifica y modulariza el diseo del compilador, se hace mas claro, facilita la implementacin Mejora la eficiencia del compilador:
El parser trabaja con Tokens, no con caracteres Uso de tcnicas de buffers La mayor parte del tiempo de compilacin se usa en el anlisis lxico (excluyendo la optimizacin)

Mayor portabilidad:
Asla las peculiaridades en el alfabeto de entrada Ej. El conjunto de caracteres, representacin de smbolos

Analizador Lexico C# hecho a mano Este ejemplo muestra como implementar un analizador lxico simple en C#, usando el DFA como base para construir el autmata en cdigo. lenguaje que reconoce el analizador lxico esta formado por los elementos bsicos de una calculadora de nmeros naturales, los operadores bsicos, +, -, /, * ademas detecta y reporta errores lxicos y tambin espacios en blanco (\t,\n,\r, )

Das könnte Ihnen auch gefallen