Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala

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. Componente Léxico Programa fuente Analizador léxico Programa sintáctico Árbol de análisis sintáctico

Obtener el siguiente componente léxico 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. Sección A Página 1

Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala Componente Léxico Identificador Num_entero If Do Op_div Op_asig Lexema Índice, a, temp 1492, 1, 2 If Do / = Patrón Letra seguida de letras o dígitos dígit Dígitos seguido de más dígitos Letra i seguida de letra f Letra d seguida de o Carácter / Carácter =

• Denota un conjunto finito de simbolos ∑={ .... }

Cadena
• Sobre algun alfabeto es una secuencia finita de simbolos tomados de ese alfabeto.

• Se refiere a cualquier conjunto de cadenas de un alfabeto fijo.

Alfabeto

Lenguaje

Herramienta de Definición: 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: Rango de Caracteres Cualquier Carácter Excepto un conjunto dado Opcionalidad Ejemplos: "//" ([^\n])* Comentario ("/*")([^("*/")])*("*/") Comentario de varias lineas [a- Z] Indica cualquier letra del abecedario en mayúscula o -zA-Z] 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.

Sección A

Página 2

Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala 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. Letra Otro

1

Letra

2

3
Return id

Digito Sección A Página 3

Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala Método de Thompson

Convierte de un AFD a un AFND

a a+
Ɛ

a
Ɛ

a
Ɛ

Ɛ

a*
Ɛ

a
Ɛ

Ɛ

a|b
Ɛ

a Ɛ

Ɛ Ɛ

b

a| Ɛ a?

Ɛ

a
Ɛ

Ɛ

Sección A

Página 4

Compiladores 1, Segundo Semestre 2010 Universidad De San Carlos de Guatemala

a (a | y )* a Ɛ a Ɛ Ɛ

D F

a

E G

Ɛ

A

B

C
Ɛ y Ɛ Ɛ

H

Ɛ

I

a

J

NFA -> DFA So Cerradura(A) = {A, B} S1 Cerradura(B) = {B,C,D,F} *S2 Cerradura(E, J) = {E,J,H,C,D} S3 Cerradura(G) = {G,H,I,C,D} a S0 S1 S1 S2 *S2 S2 S3 S2 a S0 S1 S1 S2 *S2 S2
Sección A

a {B} {E,J} {E,J} {E,J}
y

y {} {G} {G} {G}

Y S3 S3 S3 Y

a

S1
a y

S0

S2
S1 S1
a
Página 5

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.