Anda di halaman 1dari 12

JLEX

Jlex no es ms que un generador de un analizador lxico parecido a LEX, el cual toma una cadena
como entrada una cadena de caracteres, y lo convierte en una secuencia de tokens.

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. Estos tokens 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 comumente en expresiones regularesque 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.
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,...
o 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
o 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. Reportar clara y exactamente la presencia de
errores
2. 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

Anda mungkin juga menyukai