Sie sind auf Seite 1von 20

Anlisis

Lexicogrfico

Que es?
Se encarga de buscar los componentes lxicos
o palabras que componen el programa fuente,
segn unas reglas o patrones.
La entrada del analizador lxico podemos
definirla como una secuencia de caracteres,
que pueda hallarse codificada segn cualquier
estndar
ASCII
EBCDIC
Unicode

Funciones
El analizador lxico es la primera fase de un
compilador. Su principal funcin consiste en
leer los caracteres de entrada y elaborar
como salida una secuencia de componentes
lxicos que utiliza el analizador sintctico
para hacer el anlisis.

Otras funciones
Eliminar los comentarios del programa.
Eliminar 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

Token, patrn y lexema


Patrn: es una expresin regular.
Token: es la categora lxica asociada a un patrn.
Cada token se convierte en un nmero o cdigo
identificador nico. coincide directamente con el
concepto de terminal desde el punto de vista de la
gramtica utilizada por el analizador sintctico.
Lexema: Es cada secuencia de caracteres concreta
que encaja con un patrn.

El generador de analizadores lexicogrficos:


PCLex

Un analizador lxico creado por PCLex est


diseado para comportarse en sincrona con
un analizador sintctico. Para ello, entre el
cdigo generado existe una funcin llamada
yylex() que, al ser invocada, comienza a leer
la entrada, carcter a carcter, hasta que
encuentra el mayor prefijo en la entrada que
concuerde con una de las expresiones
regulares

Creacin de un analizador
lxico
Construir un fichero de texto en lenguaje Lex que
contiene la estructura abstracta del analizador.
Meta compilar el fichero anterior con PCLex. As se
obtendr un fichero fuente en C estndar. Algunas
veces hay que efectuar modificaciones directas en
este cdigo, aunque las ltimas versiones de PCLex
han disminuido al mximo estas situaciones.
Compilar el fuente en C generado por PCLex con un
compilador C, con lo que obtendremos un ejecutable

El lenguaje Lex
Un programa Lex tiene la siguiente estructura:
rea de definiciones Lex
%% /* es lo nico obligatorio en todo el programa */
rea de reglas
%%
rea de funciones
siendo el mnimo programa que se puede construir
en Lex:
%%

En el rea de reglas se definen los patrones de


los lexemas que se quieren buscar a la entrada,
y al lado de tales expresiones regulares, se
detallan (en C) las acciones a ejecutar tras
encontrar una cadena que se adapte al patrn
indicado. Los separadores %% deben ir
obligatoriamente en la columna 0, al igual que
las reglas y dems informacin propia del
lenguaje Lex.

Premisas de Lex para


reconocer lexemas
1. Entrar siempre por el patrn que reconoce el
lexema ms largo posible.
2. En caso de conflicto usa el patrn que aparece en
primera posicin.
Como consecuencia de la segunda premisa: los
patrones que reconocen palabras reservadas se
colocan siempre antes que el patrn de
identificador de usuario.

Caracteres especiales de Lex


: sirve para encerrar cualquier cadena de literales.
\: hace literal al siguiente carcter. Ej.: \ reconoce
unas comillas. Tambin se utiliza para expresar
aquellos caracteres que no tienen representacin
directa por pantalla: \n para el retorno de carro, \t para
el tabulador, etc.
\noctal: representa el carcter cuyo valor ASCII es n
octal. P.ej: \012 reconoce el carcter decimal 10 que se
corresponde con LF (Line Feed).

[ ]: permiten especificar listas de caracteres, o sea


uno de los caracteres que encierra , ( [abc] =(a|b|
c) ).
?: aquello que le precede es opcional
. : representa a cualquier carcter (pero slo a uno)
excepto el retorno de carro (\n).
|: indica opcionalidad (OR).
* : indica repeticin 0 o ms veces de lo que le
precede.

+ : indica repeticin 1 o ms veces de lo que le


precede.
( ): permiten la agrupacin (igual que en las
expresiones aritmticas).
{ }: indican rango de repeticin.

Caracteres de sensibilidad al
contexto
$: el patrn que le precede slo se reconoce si est
al final de la lnea.
^ : fuera de los corchetes indica que el patrn que
le sucede slo se reconoce si est al comienzo de la
lnea.
/: Reconoce el patrn que le precede si y slo si es
prefijo de una secuencia simple como la que le
sucede.

rea de definiciones y rea


de funciones
tiene tres utilidadesfundamentales:
a) Definir los estados lxicos.
b) Asignar un nombre a los patrones ms frecuentes.
c) Poner cdigo C que ser global a todo el programa.
En el rea de definiciones podemos crear expresiones
regulares auxiliares de uso frecuente y asignarles un
nombre. Posteriormente, estos patrones pueden ser
referenciados en el rea de reglas sin ms que
especificar su nombre entre llaves: {}.

Funciones y variables
suministradas por PCLex

yylex(): implementa el analizador lexicogrfico.


yytext: contiene el lexema actual
yyleng: nmero de caracteres del lexema actual.
yylval: es una variable global que permite la
comunicacin con el sintctico.
yyin: es de tipo *FILE, y apunta al fichero de
entrada que se lee. Inicialmente apunta a stdin,
por lo que el fichero de entrada coincide con la
entradaestndar.
yyout: de tipo *FILE, apunta al fichero de salida
(inicialmente stdout).
yyerror() : es una funcin que se encarga de emitir
y controlar errores (sacamensajes de error por
pantalla).

yylineno: variable de tipo entero que,


curiosamente, debe ser creada, inicializaday
actualizada por el programador. Sirve para
mantener la cuenta del nmerode lnea que
se est procesando.
yywrap(): el algoritmo de yylex() llama
automticamente a esta macro cada vez que se
encuentra con un EOF.
yyless(int n): deja en yytext los n primeros
caracteres del lexema actual.
REJECT: rechaza el lexema actual, lo devuelve a la
entrada y busca otro patrn. REJECT le dice a
yylex() que el lexema encontrado no corresponde
realmente a la expresin regular en curso, y que
busque la siguiente expresin
regular a que
corresponda.

El generador de
analizadores lexicogrficos
JFlex
Los programas escritos para JFlex tienen un
formato parecido a los escritos en PCLex; de
hecho todos los patrones regulares admisibles en
Lex tambin son admitidos por Jflex.

Estructura de un programa en
JFlex
rea de cdigo, importaciones y
paquete
%%
rea de opciones y declaraciones
%%
rea de reglas

rea de cdigo, importaciones y paquete


se encuentra destinada a la importacin de los
paquetes que se vayan a utilizar en las acciones
regulares situadas al lado de cada patrn en la zona
de reglas. Aqu tambin puede indicarse una
clusula package para los ficheros .java generados
por el meta-analizador.
rea de opciones y declaraciones
Este rea permite indicar a JFlex una serie de
opciones para adaptar el fichero java resultante de
la meta-compilacin y que ser el que implemente
nuestro analizador lexicogrfico en Java

Das könnte Ihnen auch gefallen