Análisis Léxico - Pontificia Universidad Javeriana, Cali

Anuncio
Compiladores:
Análisis Léxico
Pontificia Universidad Javeriana Cali
Ingeniería de Sistemas y Computación
Prof. Gloria Inés Alvarez V.
Análisis Léxico
Programa
Lenguaje
Fuente
Análisis Léxico
(Token,
Lexema)
Mensajes de Error
Lee los caracteres del programa fuente de
izquierda a derecha, y los agrupa en tokens
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Funciones del Analizador Léxico

Convierte el programa fuente en una cadena de tokens






Para reconocer el token usa un patrón, una regla que describe
como se forman las cadenas que corresponden a un token.
Salta comentarios y espacios en blanco (tabuladores,
saltos de línea...)
Tener el registro de la línea del archivo fuente que está
siendo analizada
Genera mensajes de error léxico, 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
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Tokens y Lexemas

Token:





Elemento básico del lenguaje
Unidad léxica indivisible
Identifica una entidad lógica dentro del lenguaje
Incluyen: Palabras Reservadas, Constantes, Operadores,
Signos de Puntuación e Identificadores
Lexema:


La cadena original que se identifica como token
No hay correspondencia 1-1 entre token-lexema
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Tokens y Lexemas: Ejemplos
Token
If
Token #
Lexema
10
‘if’
parentesisIzq 12
‘(‘
Identificador
1
‘valor’
opSuma
puntoComa
Menor
menorIgual
30
48
56
57
‘+’
‘;’
‘<‘
‘<=‘
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Construcción de Generadores
Automáticos de Scanners




Construir un NFA para cada una de las expresiones regulares
a reconocer
Aplicar una unión 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
aceptación 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 aceptación
(crear una lista de los estados de aceptación por los que
pasó)
Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Atributos para tokens


El analizador recopila información sobre los
tokens a medida que los reconoce. Por
ejemplo: token num, pero... qué lexema?
Cuando la cadena de entrada permite
reconocer más de un token, esta información
puede ayudar a desambiguar.
Estrategias de Recuperación de
Errores Léxicos

Modo Pánico: obvia los siguientes caracteres de
la entrada hasta encontrar un token bien formado

Tratar de Arreglar la entrada:




Borrar el carácter extraño
Insertar el carácter perdido
Reemplazar un carácter incorrecto por uno correcto
Encontrar que cambio genera el menor numero de errores
sintácticos, y aplicarlo
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Palabras Reservadas


Identificador es una palabra que inicia con una
letra, y es seguida por letras o dígitos
Las palabras clave cumplen con este mismo
patron de construcción
Se hace necesario un mecanismo que
permita decidir cuando una cadena es
una palabra clave o un identificador
Solución sencilla: Palabras Reservadas
(que no pueden ser usadas como
identificadores)
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
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 tamaño 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 carácter que
está siendo analizado
.....
w h
Begin
i
l
e
a
>
b
\n
.....
Forward
Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Manejo de Buffers

Posibilidades:
Un buffer

Final de
Buffer
.....
w h
i
l
e
a
Begin Forward
Par de Buffers

i
..... w h
>
i
l
e
a
>
Begin
=
..... 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
Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Porque se divide el Análisis Léxico
del Sintáctico?

Simplifica y modulariza el diseño del compilador, se
hace mas claro, facilita la implementación

Mejora la eficiencia del compilador:




El parser trabaja con Tokens, no con caracteres
Uso de técnicas de buffers
La mayor parte del tiempo de compilación se usa en el
análisis léxico (excluyendo la optimización)
Mayor portabilidad:


Aísla las peculiaridades en el alfabeto de entrada
Ej. El conjunto de caracteres, representación de símbolos
Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón
Descargar