Analisis lexico

5
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

description

Analisis Lexico2.1 Componentes Léxicos, Patrones y lexemas2.2 Expresiones Regulares2.3 Tratamiento de Errores Léxicos2.4 Autómata Finito y conversión de AFN -> AFD

Transcript of Analisis lexico

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