Вы находитесь на странице: 1из 17

ANLISIS LXICO

Ing. Ronald Rentera Ayquipa

ANALIZADOR LXICO (AL)

El Analizador lxico (scanner), lee la secuencia de


caracteres del programa fuente, caracter a
caracter, y los agrupa para formar unidades con
significado propio, los componentes lxicos
(tokens en ingls).
El analizador lxico representa una interfaz entre
el programa fuente y el analizador sintctico o
parser.
Secuencia de
caracteres

Programa fuente

ANALIZADOR
LXICO

Componentes
lxicos

Tokens

Funciones del Analizador Lxico


Funcin principal:

El analizador lxico opera bajo peticin del analizador sintctico


devolviendo un componente lxico conforme el analizador
sintctico lo va necesitando para avanzar en la gramtica. Los
componentes lxicos son los smbolos terminales de la
gramtica.

El AL Suele implementarse como una subrutina del analizador


sintctico. Cuando recibe la orden obtn el siguiente
componente lxico, el analizador lxico lee los caracteres de
entrada hasta identificar el siguiente componente lxico, el cual
devuelve al sintctico segn el formato convenido.
Programa fuente

ANALIZADOR
LXICO

Componente
lxico

Obtn el siguiente
componente lxico

ANALIZADOR
SINTCTICO

rbol de
anlisis
sintctico

Funciones del Analizador Lxico


Otras funciones secundarias:

Eliminar: comentarios, espacios en blanco, tabuladores,


retorno de carro, etc, y en general, todo aquello que
carezca de significado segn la sintaxis del lenguaje.

Reconocer los identificadores de usuario, nmeros,


palabras reservadas del lenguaje, etc., y tratarlos
correctamente con respecto a la tabla de smbolos (solo
en los casos en que este analizador deba tratar con dicha
estructura).

Llevar la cuenta del nmero de lnea por la que va


leyendo, por si se produce algn error, dar informacin
acerca de dnde se ha producido.

Avisar de errores lxicos. Por ejemplo, si el carcter @


no pertenece al lenguaje, se debe emitir un error.

Tambin puede hacer funciones de preprocesador.

Patrn

Representa la regla para que una secuencia de


caracteres sea considerada dentro de cierto
componente lxico.
Regla que describe cmo se forma un token.
Cmo se especifican los tokens (patrones)?

Mediante expresiones regulares

Ejemplo: El patrn para un identificador de Pascal


es:

Una letra seguida por letras, dgitos o subguiones (_)

Token

Es la categora lxica asociada a un patrn. Cada


token se convierte en un nmero o cdigo
identificador nico. En algunos casos, cada
nmero tiene asociada informacin adicional
necesaria para las fases posteriores de la etapa
de anlisis.

Token

Los componentes lxicos o tokens ms importantes


son:

Palabras reservadas: if, while, do, . . .


Identificadores: asociados a variables, nombres de
funciones, tipos definidos por el usuario, etiquetas,... Por
ejemplo: posicion, velocidad, tiempo, . . .
Operadores: = * + - / == > < & ! = . . .
Smbolos especiales: ; ( ) [ ] { } ...
Constantes numricas: literales que representan valores
enteros, en coma flotante, etc, 982, 0xF678, -83.2E+2,...
Constantes de caracteres: literales que representan
cadenas concretas de caracteres, \hola mundo",...

Lexema

Instancia particular de un token: Secuencia de


caracteres en el programa fuente que se
corresponden con un patrn. Ejemplos:

Este_es_1_ejemplo es el lexema que satisface el patrn de


un identificador
8", 23" y 50" son algunos lexemas que encajan con el
patrn (0'|1'|2'| ... |9')+, de nmeros enteros.

Un componente lxico puede tener uno o infinitos


lexemas. Por ejemplo: palabras reservadas tienen un
nico lexema. Los nmeros y los identificadores
tienen infinitos lexemas. En el patrn WHILE slo
encaja el lexema WHILE.

Ejemplos token, lexema y patrn


Componente
lxico (Token)

Lexema

Patrn

identificador

indice, a, temp, pi, cuenta, d2

Letra seguida de letras o dgitos

num_entero

1456, 4, 1, 2

Dgito seguido de ms dgitos

If

if

Letra i seguida de letra f

do

do

Letra d seguida de letra o

op_div

Caracter /

op_asig

Caracter =

num_real

4.78, 3.141592, 0.65

Uno o ms dgitos seguido de un punto


seguido de uno o ms dgitos
(0 ... 9)+. (0 ... 9)+

Ejemplos de Anlisis Lxico


posicion := inicial + velocidad * 60
Componentes lxicos:
1.
2.
3.
4.
5.
6.
7.

El identificador posicion
El smbolo de asignacin :=
El identificador inicial
El signo de suma: +
El identificador velocidad
El signo de multiplicacin:*
El nmero 60

while (y < z) {
int x = a + b;
y += x;
}
Componentes lxicos o tokens

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

Implementacin de un AL

Para crear un AL hay que:


Especificar todos los tokens del lenguaje
Puede haber varios tokens que correspondan a
una misma expresin regular
En este caso el algoritmo asociado a la expresin
regular deber diferenciar a partir del lexema el
token.

Implementacin de un AL

Mtodos para la construccin de un Analizador


Lxico:

Implementacin manual del AL


Generador automtico de AL

Implementacin manual de AL

Este mecanismo consiste en construir los patrones


necesarios para cada categora lxica (tokens),
construir sus autmatas finitos individuales,
fusionarlos por opcionalidad y, finalmente,
implementar los autmatas resultantes. Aunque la
construccin de analizadores mediante este mtodo
es sistemtica y no propensa a errores, cualquier
actualizacin de los patrones reconocedores implica
la modificacin del cdigo que los implementa, por lo
que el mantenimiento se hace muy costoso.

Implementacin manual de AL

Las ER se convierten a AFD


Un AL se implementa con un AFD + acciones
semnticas.
Un AFD se representa:

Diagrama transiciones
Matriz de estados

Las acciones semnticas ejecutan una serie de


acciones.

Generador automtico de AL

En este caso, se utiliza un programa especial que


tiene como entrada pares de la forma (expresin
regular, accin). El metacompilador genera todos
los autmatas finitos, los convierte a autmata
finito determinista, y lo implementa en C. El
programa C as generado se compila y se genera
un ejecutable que es el anlizador lxico de
nuestro lenguaje. Por supuesto, existen
metacompiladores que generan cdigo Java,
Pascal, etc. en lugar de C.

Generador automtico de AL

Flex (Fast Lexical Analyzer Generator) es un


generador automtico de analizadores lxicos en
lenguaje C. Es software de GNU.

Entrada: un fichero texto con la especificacin de los


componentes lxicos, las expresiones regulares que los
definen.
Salida: un programa en C que implementa dicho analizador,
preparado para ser compilado y utilizado.

Existen muchas herramientas para la generacin


automtica de AL. Las ms conocidas:

Lex
Flex
Jflex
PClex
Coco