Post on 20-Jun-2015
description
Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala
Sección A Página 1
Análisis Léxico (Scanner): Lee los caracteres de entrada y elabora como salida una secuencia de componentes léxicos
(token) que son utilizadas en el análisis sintáctico.
Componente léxico: Secuencia de caracteres que tienen un significado colectivo.
Palabras reservadas: if, while, repeat.
Identificadores: Posición, velocidad, tiempo.
Operadores: = * + - / == > < & ¡=
Símbolos especiales: ; ( ) [ ] { } …
Constantes Numéricas: 982, 0xF678, -83.2E+2
Constantes de caracteres: “Hola mundo”
El analizador léxico opera bajo petición del analizador sintáctico devolviendo un analizador léxico
conforme lo va necesitando la gramática.
Otras Funciones:
• Manejo del fichero de entrada del programa fuente: abrirlo, leer sus caracteres y cerrarlo.
• Eliminar Comentarios, espacios en blanco, tabulaciones y saltos de línea.
• Contabilizar el numero de líneas y columnas para emitir mensaje de error.
Componentes Léxicos, Patrones, lexemas:
Patrón: Es una regla que genera la secuencia de caracteres que puede representar a un
determinado componente léxico (Expresión regular).
Lexema: Cadena de caracteres que concuerda con un patrón que describe un componente léxico.
Componente léxico: Puede tener infinitos lexemas.
Programa
fuente
Analizador
léxico
Programa
sintáctico
Árbol de análisis
sintáctico
Componente
Léxico
Obtener el siguiente
componente léxico
Compiladores 1, Segundo Semestre 2010Universidad De San Carlos de Guatemala
Sección A
Componente Léxico Lexema
Identificador Num_entero If Do Op_div Op_asig
Índice, a, temp1492, 1, 2If Do / =
Herramienta de Definición: Expresiones Regulares
Permite definir de manera precisa un conjunto de cadenas.
Además de los símbolos básicos de
Rango de Caracteres [a-minúscula
Cualquier Carácter .*b.* Indica cualquier cadena que contiene una letra b
Excepto un conjunto dado ^ (a|b)
Opcionalidad r? indica que la expresión r puede aparecer o no. En el caso de aparecer solo lo hara una vez.
Ejemplos:
"//" ([^\n])* Comentario
("/*")([^("*/")])*("*/") Comentario de varias lineas
• Denota un conjunto finito de simbolos ∑={ .... }
Alfabeto
Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala
Lexema Patrón
Índice, a, temp 1492, 1, 2
Letra seguida de letras o dígitDígitos seguido de más dígitosLetra i seguida de letra f Letra d seguida de o Carácter / Carácter =
Expresiones Regulares
Permite definir de manera precisa un conjunto de cadenas.
Además de los símbolos básicos de Concatenación, repetición (*,+) y alternativas tenemos:
-zA-Z] Indica cualquier letra del abecedario en mayúscula o minúscula
.*b.* Indica cualquier cadena que contiene una letra b
(a|b) Indica cualquier carácter que no sea a ó b.
r? indica que la expresión r puede aparecer o no. En el caso de aparecer solo lo hara una vez.
Comentario de varias lineas
• Sobre algun alfabeto es una secuencia finita de simbolos tomados de ese alfabeto.
Cadena• Se refiere a
cualquier conjunto de cadenas de un alfabeto fijo.
Lenguaje
Página 2
Letra seguida de letras o dígitos Dígitos seguido de más dígitos
Concatenación, repetición (*,+) y alternativas tenemos:
Z] Indica cualquier letra del abecedario en mayúscula o
.*b.* Indica cualquier cadena que contiene una letra b
r? indica que la expresión r puede aparecer o no. En el caso
Se refiere a cualquier conjunto de cadenas de un alfabeto fijo.
Lenguaje
Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala
Sección A Página 3
Tratamiento de Errores Léxicos:
Los errores léxicos se detectan cuando el analizador léxico intenta reconocer componentes léxicos
y la cadena de caracteres de la entrada no encaja con ningún patrón.
Errores Léxicos típicos son:
Nombre ilegales de identificadores: Un nombre que contiene un carácter invalido.
Números incorrectos: un numero que contiene caracteres inválidos o no está formado
correctamente [3.14 en vez de 3,14 o 0.3.14].
Errores de ortografía en palabras reservadas: Caracteres omitidos, adicionales o cambiados de
sitio, por ejemplo la palabra hwile en vez while.
Fin de archivo: Se detecta el fin de un archivo a mitad de un componente léxico.
Autómata Finito: Es una herramienta que permite a partir de expresiones regulares genera un modelo matematico
para analizar cadenas de entrada.
Autómata Finito No Deterministico(AFN):
• Un conjunto de estados S
• Un conjunto de simbolos de entrada ∑
• Un estado So, estado inicial.
• Un cojunto de estados F, como estados de aceptación.
• Un Conjunto de transiciones que transforman de estado/símbolo.
Autómata Finito Deterministico (AFD):
• Ningun estado tiene una transición con Ɛ.
• Para cada estado S y cada símbolo de entrada hay a lo sumo una arista etiquetada que sale
de este estado.
Ejemplo: Supongamos que queremos reconocer identificadores.
2 3 1
Letra
Letra
Digito
Otro
Return id
Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala
Sección A Página 4
Método de Thompson
Convierte de un AFD a un AFND
a
a+
a*
a|b
a| Ɛ a?
a
a
Ɛ
Ɛ Ɛ
a
Ɛ
Ɛ Ɛ
Ɛ
a Ɛ Ɛ
Ɛ
Ɛ
Ɛ Ɛ
Ɛ a
b
Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala
Sección A Página 5
a (a | y )* a
NFA -> DFA a y So Cerradura(A) = {A, B} {B} {} S1 Cerradura(B) = {B,C,D,F} {E,J} {G} *S2 Cerradura(E, J) = {E,J,H,C,D} {E,J} {G} S3 Cerradura(G) = {G,H,I,C,D} {E,J} {G}
a Y S0 S1 S1 S2 S3 *S2 S2 S3 S3 S2 S3
a Y S0 S1 S1 S2 S1 *S2 S2 S1
D E
F G
C H B I J A a Ɛ
Ɛ
Ɛ
Ɛ
Ɛ
y Ɛ
Ɛ
Ɛ a
a
S0
S1
S2
a
y
a
y a