Professional Documents
Culture Documents
Compilador
0 m
Error
1 m a 2
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
Palabras
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
fuente: Abrirlo, leer sus caracteres, gestionar posibles errores de lectura y cerrarlo.
Eliminar
comentarios, espacios en blanco, tabuladores y saltos de lnea (Caracteres no vlidos para formar un token). de ficheros: #include
Inclusin
Reconocimiento
Ventajas de
Simplifica
el diseo.
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:
Una o ms repeticiones +
Ejemplo:
r+
indica una o ms repeticiones de r
Ejemplo:
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|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)*
Autmatas finitos
Los AFD se pueden utilizar para reconocer las expresiones regulares asociadas a los componentes lxicos.
Autmatas finitos
Implementacin
De un Analizador Lxico
Anatomia de un Compilador
Programa (character stream) Analizador Lxico (Scanner) Token Stream Analizador Sintctico (Parser) Arbol de Parseo Generador de Cdigo Intermedio
analizador lxico crea tokens a partir de un character stream Los tokens se definen usando expresiones regulares
Ejemplo:
Un
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)*)?
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