Anda di halaman 1dari 13

Analizador lxico

Un analizador lxico y/o analizador lexicogrfico (en ingls scanner) es la primera fase
de un compilador consistente en 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. Estostokens sirven para una posterior etapa
del proceso de traduccin, siendo la entrada para el analizador sintctico (en
ingls parser).
La especificacin de un lenguaje de programacin a menudo incluye un conjunto de reglas
que definen el lxico. Estas reglas consisten comnmente enexpresiones regulares que
indican el conjunto de posibles secuencias de caracteres que definen un token o lexema.
En algunos lenguajes de programacin es necesario establecer patrones para caracteres
especiales (como el espacio en blanco) que la gramtica pueda reconocer sin que
constituya un token en s.

Anlisis[editar]
Esta etapa est basada usualmente en una mquina de estados finitos. Esta mquina
contiene la informacin de las posibles secuencias de caracteres que puede conformar
cualquier token que sea parte del lenguaje (las instancias individuales de estas secuencias
de caracteres son denominados lexemas). Por ejemplo, un token de
naturaleza entero puede contener cualquier secuencia de caracteres numricos.

Unidad 5: Anlisis lxico.


5.1 Funciones del analizador lxico.
Un analizador lxico asla el analizador sintctico de
la representacin de lexemas de los componentes
lxicos.

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.
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.

Definiciones.
Tokens:

Smbolos terminales de una gramtica


o

Identificadores, palabras reservadas,


operadores,...

Varios signos pueden forman el mismo


token

Atributos:
Informacin adicional que tiene el token, de utilidad
para el anlisis sintctico y semntico.
Componentes lxicos (tokens):
unidad mnima de informacin que significa algo a la

hora de compilar; concepto de palabra; las fases de


un lenguaje constan de cadenas de componentes
lxicos.
Lexema:
Una secuencia de caracteres de entrada que
comprenden un solo componente lxico se llama
lexema; cadena de caracteres que extrae el
componente abstracto del componente lxico.
Patrn:
Descripcin de la forma que han de tomarlos
lexemas para ajustarse a un componente lxico.
Ejemplo:

Otras Funciones:

Manejo del fichero de entrada del programa


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

Eliminar comentarios, espacios en blanco,


tabuladores y saltos de lnea (caracteres no
validos para formar un token).
Inclusin de ficheros: # include...
La expansin de macros y funciones in line: #
define...
Contabilizar el nmero de lneas y columnas
para emitir mensajes de error.
Reconocimiento y ejecucin de las directivas de
compilacin (por ejemplo, para depurar u
optimizar el cdigo fuente).

Aspectos del Anlisis Lxico.


Diseo ms sencillo:

Los smbolos que trata el scanner se describe


con una gramtica ms simple que la del parser,
gramtica regular

Mejora la eficiencia:

Gran parte del tiempo de compilacin se


consume en la lectura y exploracin de
caracteres

Mejora la portabilidad:

Se pueden tener varias versiones del scanner


una para distintos cdigos (EBCDID, ASCII, ...),
con el mismo parser

Descarga el anlisis sintctico:


Ejemplo; no puedo distinguir en FORTRAN hasta
despus del 1
o

DO 5 I=1.25

DO 5 I=1,25

5.2 Componentes lxicos, patrones y lexemas.


Componente

lxico

(token).

Son las unidades lgicas que genera el analizador


lxico. Formar caracteres en tokens es muy
parecido a formar palabras en un lenguaje natural
Es el conjunto de cadenas de entrada que produce
como salida el mismo componente lxico.
Cada token es una secuencia de caracteres que
representa una unidad de informacin en el
programa fuente. Los componentes lxicos ms
comunes son los siguientes: palabras clave o
reservadas:

operadores aritmticos

operadores

relacionales

operadores lgicos

operador de asignacin

identificadores

constantes

cadenas

literales

signos de puntuacin

libreras

Lexema:
Representan cadenas de caracteres en el programa
fuente que se pueden tratar juntos como una unidad
lxica. Un lexema es una secuencia de caracteres
en el programa fuente con la que concuerda el
patrn
para
un
componente
lxico.
Patrn:
Regla que describe el conjunto de lexemas que
pueden representar a un determinado componente

lxico en los programas fuente. En otras palabras, es


la descripcin del componente lxico mediante una
regla.
Atributos

de

los

componentes

lxicos:

El analizador lxico recoge informacin sobre los


componentes lxicos en sus atributos asociados. Los
componentes lxicos influyen en las decisiones del
anlisis sintctico y los atributos en la traduccin de
los componentes lxicos:

Apuntador a la entrada de la Tabla de smbolos


donde se guarda la informacin sobre el
componente lxico.
El lexema para un identificador
El nmero de lnea en que se encontr por
primera vez.

5.3 Creacin de Tabla de tokens.


Tabla: conjunto de pares clave-valor, llamados
elementos de la tabla. La tabla de smbolos es una
componente necesaria de un compilador. Al declarar
un identificador (normalmente una sola vez), ste es
insertado en la tabla. Cada vez que se utilice el
identificador se realizar una bsqueda en la tabla
para obtener la informacin asociada (el valor).

Bsqueda: dada la clave de un elemento,


encontrar su valor.
Insercin: Dado un par clave-valor, aadir un
elemento nuevo a la tabla.
Cambio de valor: Buscar el elemento y cambiar
su valor.

Borrado: Eliminar un elemento de la tabla.

Longitud de bsqueda (o tiempo de acceso)

De una clave: Li = nmero de comparaciones con


elementos de la tabla para encontrar esa clave.
Mxima: LM = nmero mximo de comparaciones
para encontrar cualquier clave. Media (esperada):
Lm = nmero medio de comparaciones para
encontrar un valor. Si la frecuencia de todas las
claves es la misma:
Lm = (S Li)/N
Si la frecuencia de todas las claves no es la misma:
Lm = S pi.Li
Grado de ocupacin:
s = n/N donde n=nmero de elementos en la tabla y
N=capacidad
mxima
de
la
tabla.
Funcin de bsqueda: B : KE asocia a cada clave
k
un
elemento
B(k).

Valor asociado a una clave k: v(B(k)). Puede ser


mltiple, en cuyo caso normalmente se convierte en
un puntero. Si est en la tabla puede almacenarse
consecutivamente o en subtablas paralelas. Tablas
de smbolos (identificadores) La clave es el
identificador. El valor est formado por:
Atributos del identificador. Puntero a la posicin de
memoria asignada. La clave puede sustituirse por un
puntero.
Los
identificadores
pueden
estar
empaquetados. La longitud del identificador puede
especificarse en la tabla o delante del nombre, o ser
implcita.
Tablas consecutivas: Todos los elementos ocupan
posiciones de memoria adyacentes. Tablas ligadas:
cada elemento apunta al siguiente. Tablas
doblemente ligadas: cada elemento apunta al
siguiente y al anterior. Tablas no ordenadas
Insercin:
en
el
primer
lugar
vaco.
5.4

Errores

lxicos

El anlisis lxico constituye la primera fase, aqu se


lee el programa fuente de izquierda a derecha y se
agrupa en componentes lxicos (tokens), que son
secuencias de caracteres que tienen un significado.
Adems, todos los espacios en blanco, lneas en

blanco,
comentarios
y
dems
informacin
innecesaria se elimina del programa fuente. Tambin
se comprueba que los smbolos del lenguaje
(palabras clave, operadores,...) se han escrito
correctamente.
Como la tarea que realiza el analizador lxico es un
caso especial de coincidencia de patrones, se
necesitan los mtodos de especificacin y
reconocimiento de patrones, y estos mtodos son
principalmente las expresiones regulares y los
autmatas finitos. Sin embargo, un analizador lxico
tambin es la parte del traductor que maneja la
entrada del cdigo fuente, y puesto que esta entrada
a menudo involucra un importante gasto de tiempo,
el analizador lxico debe funcionar de manera tan
eficiente
como
sea
posible.
Son pocos los errores simplemente en el nivel lxico
ya que tiene una visin muy restringida de un
programa fuente. El analizador lxico debe devolver
el componente lxico de un identificador y dejar a
otra
fase
se
ocupe
de
los
errores.
Suponga que una situacin en la cual el analizador
lxico no puede continuar porque ninguno de los
patrones concuerda con un prefijo de la entrada. Tal
vez la estrategia de recuperacin ms sencilla sea
recuperacin EN MODO PANICO (este mtodo de

recuperacin es donde se borra caracteres


sucesivos de la entrada hasta que el analizador
lxico pueda encontrar un componente lxico bien
formado). Los programas no siempre son
correctos!!
El compilador tiene que:
1.

2.

Reportar clara y exactamente la presencia de


errores
Recuperarse de cada error lo suficientemente
rpido
para
poder
detectar
errores
subsiguientes:
Tratar de evitar mensajes falsos de error
Un error que produce un token errneo
Errores
lxicos
posibles

Un token o componente lxico es una cadena de


caracteres que tiene un significado coherente en
cierto lenguaje de programacin. Ejemplos de
tokens, podran ser palabras clave (if, while, int),
identificadores, nmeros, signos, o un operador de
varios caracteres. Son los elementos ms bsicos
sobre los cuales se desarrolla toda traduccin de un
programa, surgen en la primera fase, llamada
anlisis
lxico.
5.5

Generadores

de

analizadores

Lxicos

Se pueden usar varias tcnicas para acelerar el


algoritmo
y
ahorrar
espacio
Las etiquetas pueden guardarse mediante dispersin
para producir un sistema de firmas que acelere sus
bsquedas
Como las tablas de transiciones son muy escasas,
se pueden guardar en una lista corta que se consulte
cada vez que se necesite hacer una transicin a
partir
de
un
estado
Estas listas no suelen tener ms de tres o cuatro
elementos,
as
que
su
bsqueda
ser
razonablemente
rpida
5.6 Aplicaciones (Caso de estudio)

Anda mungkin juga menyukai