You are on page 1of 14

Heri Fernando Londoño Salgado

Se encarga de buscar los componentes léxicos o


palabras que componen el programa fuente,
según unas reglas o patrones.
La entrada del analizador léxico es una secuencia
de caracteres, el analizador léxico divide esta
secuencia en palabras con significado propio y
después las convierte a una secuencia de
terminales que se convierten en el punto de
partida para que el analizador sintáctico
construya el árbol sintáctico.
El analizador léxico es la primera fase de un
compilador. Su principal función consiste en leer los
caracteres de entrada y elaborar como salida una
secuencia de componentes léxicos que utiliza el
analizador sintáctico para hacer el análisis. Esta
interacción suele aplicarse convirtiendo al analizador
léxico en una subrutina o corrutina del analizador
sintáctico. El analizador sintáctico solicita un nuevo
componente, el léxico lee los caracteres de entrada
hasta que pueda identificar el siguiente componente
léxico, el cual devuelve al sintáctico según el formato
convenido.
Otras funciones del analizador léxico son.
 Eliminar los comentarios del programa.
 Eliminar espacios en blanco, tabuladores, retorno
de carro, y en general, todo aquello que carezca de
significado según la sintaxis del lenguaje.
 Reconocer los identificadores de usuario, números,
palabras reservadas del lenguaje y tratarlos
correctamente con respecto a la tabla de símbolos
 Llevar la cuenta del número de línea por la que va
leyendo, por si se produce algún error, dar
información acerca de dónde se ha producido.
 Avisar de errores léxicos. Por ejemplo, si el
carácter ‘@’ no pertenece al lenguaje, se debe emitir
un error.
 También puede hacer funciones de preprocesador.
La estructura del analizador léxico se puede
resumir así.
(Expresión regular)1 {acción a ejecutar}1
(Expresión regular)2 {acción a ejecutar}2
(Expresión regular)3 {acción a ejecutar}3
... ...
(Expresión regular)n {acción a ejecutar}n
Donde cada acción a ejecutar es un fragmento de
programa que describe cuál ha de ser la acción del
analizador léxico cuando la secuencia de entrada
coincida con la expresión regular. Normalmente
esta acción suele finalizar con la devolución de
una categoría léxica.
Patrón:
 Es una expresión regular.

 Representa la regla para que una


secuencia de caracteres sea
considerada dentro de cierto
componente léxico.
 Regla que describe cómo se forma
un token.
Token: es la categoría léxica asociada a
un patrón. Cada token se convierte en
un número o código identificador
único. En algunos casos, cada número
tiene asociada información adicional
necesaria para las fases posteriores de
la etapa de análisis. El concepto de
token coincide directamente con el
concepto de terminal desde el punto de
vista de la gramática utilizada por el
analizador sintáctico.
Entre los componentes léxicos o tokens más
importantes están:
 Palabras reservadas: if, while, do, . . .
 Identificadores: asociados a variables, nombres de
funciones, tipos definidos por el usuario,
etiquetas,... Por ejemplo: posicion, velocidad,
tiempo, . . .
 Operadores: = * + - / == > < & ! = . . .
 Símbolos especiales: ; ( ) [ ] { } ...
 Constantes numéricas: literales que representan
valores
 Constantes de caracteres: literales que representan
enteros, en coma flotante, etc, 982, 0xF678, -
83.2E+2,...
 Cadenas concretas de caracteres, \hola mundo",...
Es cada secuencia de caracteres concreta
que encaja con un patrón.
8, 23 y 50 son algunos lexemas que
encajan con el patrón (‘0'|’1'|’2'| ... |’9')+.
Este_es_1_ejemplo es el lexema que
satisface el patrón de un identificador.
Un componente léxico puede tener uno o
infinitos lexemas. Por ejemplo: palabras
reservadas tienen un único lexema. Los
números y los identificadores tienen
infinitos lexemas. En el patrón
„W‟„H‟„I‟„L‟„E‟ sólo
encaja el lexema “WHILE”.
posicion := inicial + velocidad * 60
Componentes léxicos:
1. El identificador posicion
2. El símbolo de asignación :=
3. El identificador inicial
4. El signo de suma: +
5. El identificador velocidad
6. El signo de multiplicación:*
7. El número 60
 T_While
 T_ParentesisIzquierdo
 T_Identificador y
 T_Menos
 T_Identificador z
 T_ParentesisDerecho
 T_LlaveApertura
 T_Int
 T_Identificador x
 T_Asignacion
 T_Identificador a
 T_Mas
 T_Identificador b
 T_PuntoyComa
 T_Identificador y
 T_MasAsignacion
 T_Identificador x
 T_PuntoyComa
 T_LlaveCierre
Implementación Manual: Este
mecanismo consiste en construir los
patrones necesarios para cada categoría
léxica (tokens), construir sus autómatas
finitos individuales, fusionarlos por
opcionalidad y, finalmente, implementar
los autómatas resultantes. Aunque la
construcción de analizadores mediante
este método es sistemática y no propensa
a errores, cualquier actualización de los
patrones reconocedores implica la
modificación del código que los
implementa, por lo que el mantenimiento
se hace muy costoso.
Mediante generador automático: En este caso, se
utiliza un programa especial que tiene como entrada
pares de la forma (expresión regular, acción). El
metacompilador genera todos los autómatas finitos,
los convierte a autómata finito determinista, y lo
implementa en un lenguaje de programación como C,
Java, Pascal. El programa así generado se compila y se
genera un ejecutable que es el analizador léxico del
lenguaje.
Existen muchas herramientas para la generación
automática de AL. Las más conocidas:
Lex
Flex
Jflex
PClex
Coco

You might also like