Está en la página 1de 39

Anlisis Lxico

III Parcial, Final 2010

Ing. Vikky Moscoso

Compilador

0 m

Error

1 m a 2

Cualquier smbolo diferente de a

Anlisis Lxico
Es la primera fase de un compilador.
Consta de dos funciones principales: La lectura del fichero fuente de disco (scanner) y La formacin de unas unidades con significado
(tokens) que sern del anlisis sintctico.

La tarea es Detectar si una cadena del programa fuente representa o no un nombre de variable, constante o palabra reservada aceptable.

Analizador Lxico
Un analizador lxico o analizador lexicogrfico es un programa que recibe como entrada el cdigo fuente de otro programa (secuencia de caracteres) y produce una salida compuesta de tokens (componentes lxicos) o smbolos.
Estos tokens sirven para una posterior etapa del proceso de traduccin, siendo la entrada para el analizador sintctico.

Componentes Lxicos, Patrones, Lexemas


Patrn: Regla que genera la secuencia de caracteres que puede representar a un determinado componente lxico. Lexema: Cadena de caracteres que concuerda con un patrn que describe un componente lxico. Componente Lxico: Tipo enumerado. Se codifican como enteros.

Componentes Lxicos
Palabras

reservadas: if, while, do, else, ...

Identificadores:

asociados a variables, nombres de funciones, main, array, go to, ... definidos por el usuario, etiquetas,... Por ejemplo: posicin, velocidad, tiempo, ...

Tipos

Continuacin:
Operadores:

Componentes Lxicos
= * + - / == > < & ! = . . .
Smbolos

especiales: ; ( ) [ ] f g ... numricas: Literales que representan valores enteros, en coma flotante, etc, 982, 0xF678, -83.2E+2,... de caracteres: Literales que representan cadenas concretas de caracteres, \hola mundo",...

Constantes

Constantes

Funciones Secundarias del A.L.


Manejo

fuente: Abrirlo, leer sus caracteres, gestionar posibles errores de lectura y cerrarlo.

del fichero de entrada del programa

Eliminar

comentarios, espacios en blanco, tabuladores y saltos de lnea (Caracteres no vlidos para formar un token). de ficheros: #include

Inclusin

Funciones Secundarias del A.L.


Contabilizar

el nmero de lneas y columnas para emitir mensajes de error.


y ejecucin de directivas de

Reconocimiento

compilacin (Por ejemplo: para depurar u optimizar el cdigo fuente).

Ventajas de

Separar el anlisis lxico y el anlisis sintctico


Facilita

la transportabilidad del traductor.

Simplifica

el diseo.

Es importante Conocer el lexema


Para construir la tabla de smbolos.

Los componentes lxicos se representan mediante una estructura registro con tipo de token y lexema:
Typedef struct { TokenType token; char *lexema; //se reserva memoria dinmicamente } TokenRecord; TokenRecord getToken (void);

Tabla de smbolos

Ejemplo:

Especificacin de los componentes lxicos:


Uso de expresiones regulares. Adems de las tres operaciones bsicas: concatenacin, Repeticin * y Alternativas | Vamos a usar los siguientes metasbolos:

Una o ms repeticiones +
Ejemplo:

r+
indica una o ms repeticiones de r
Ejemplo:

(0|1)+ = (0|1) (0|1)*

Cualquier carcter .
Ejemplo:

.*b.*
indica cualquier cadena que contiene una letra b

Un rango de caracteres []
Ejemplo:

[a-z]

Indica cualquier cadena que contiene una letra b abecedario minscula o mayscula Indica a|b|c

[a-zA-Z] Indica cualquier letra del [0-9] [abc]


Indica cualquier dgito de 0 a 9

Cualquier carcter excepto un conjunto dado ~


Ejemplo:

~(a|b)
indica cualquier carcter que no sea una ab

Opcionalidad ?
Ejemplo:

r?
indica que la expresin r puede aparecer o no. En el caso de que aparezca slo lo har una vez.

Ejemplos:
Nmeros nat = [0-9]+ signedNat = (+|-)? nat number = signedNat("."nat)? (E signedNat)?
Identificadores letter = [a-zA-Z] digit = [0-9] identifier = (letter|digit)*

Reconocimiento de los componentes lxicos:

Autmatas finitos

Los AFD se pueden utilizar para reconocer las expresiones regulares asociadas a los componentes lxicos.

Reconocimiento de los componentes lxicos:

Autmatas finitos

Implementacin
De un Analizador Lxico

Implementacin de un analizador lxico


Suponiendo que se quiere reconocer identificadores: Identificadores letter = [a-zA-Z] digit = [0-9] identifier = (letter|digit)*

Mediante bucles anidados

Anatomia de un Compilador
Programa (character stream) Analizador Lxico (Scanner) Token Stream Analizador Sintctico (Parser) Arbol de Parseo Generador de Cdigo Intermedio

Representacin Intermedia Optimizador


Representacin Intermedia Optimizada Generador de Cdigo Cdigo en Assembler

Resumen de Anlisis Lxico


El

analizador lxico crea tokens a partir de un character stream Los tokens se definen usando expresiones regulares

Expresiones Regulares, Gramticas y Lenguajes


Una

expresin regular puede ser escrita usando:

Caracteres en el alfabeto Operadores de expresiones regulares: * | + ? ( )

Ejemplo:

(-| ) (0|1|2|3|4|5|6|7|8|9)+ (. (0|1|2|3|4|5|6|7|8|9)*)?

Un

lenguaje regular es un lenguaje definido por una expresin regular

Expresiones Regulares, Gramticas y Lenguajes


Qu

hay acerca de las variables simblicas?

Ejemplo: num = 0|1|2|3|4|5|6|7|8|9 posint = num num* int = ( | -) posint real = int ( | (. posint))
Slo

son una abreviacin, llamada syntactic sugar Ejemplo: (-| ) (0|1|2|3|4|5|6|7|8|9)+ (. (0|1|2|3|4|5|6|7|8|9)*)?

Resumen de Anlisis Lxico


El analizador lxico crea tokens a partir de un character stream. Los tokens se definen usando expresiones regulares. Las expresiones regulares pueden mapearse a un Automata Finito No Determinsta Por construccin simple. AFN se transforma a un AFD
Por medio de un Algoritmo de transformacin

Humor

Intento fallido de acceso a informacin o a programas a los que no se tiene autorizacin para ver o modificar. Este mensaje puede ser causado por la configuracin de software, por los programadores o por falla de hardware, siendo los ms comunes los 2 primeros.

Estudiando y practicando
La construccin de un analizador lxico

Ejemplo

Ejemplos de cdigos
Analizador Lxico TUX Lenguaje C#, Visual Studio 2005 http://ixtchel.cs.buap.mx/~guerrero/valar /anlex.cpp http://www.hackhispano.com/foro/showt hread.php?t=30139

Fuentes
http://www.elkernel.com/blog/index.php?opti on=com_content&view=article&id=56:program acion-analexico&catid=36:programacioncsharp&Itemid=71

También podría gustarte