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

Generadores de analizadores lxicos.

Existen varias herramientas para el tratamiento masivo de la informacin


contenida en ficheros de texto, que nos permiten traducir el lenguaje contenido en
el cdigo fuente a un lenguaje fcil de comprender para el prximo analizador: el
sintctico, todo estos anlisis se van elaborando paso a paso dentro de la lnea.
Todas ellas se apoyan en las expresiones regulares para llevar a cabo su
cometido, y permiten encadenar su salida a modo de tubera con otras
herramientas, para que de esta forma se aumentase su potencia de
procesamiento.
Pero a menudo todo esto no es suficiente. En ocasiones se requiere poder realizar
acciones de ms alto nivel o bien mucho ms complejas en cada ocurrencia de
una expresin regular.
El corazn del generador del analizador lxico es su algoritmo para producir una
mquina de estados finitos
El algoritmo que se presenta est basado en un mtodo para generar un autmata
finito determinstico (AFD) de estados mnimos.
Los generadores de analizadores lxicos son:
Lex
Cdigo generado: C.

Flex
Cdigo generado: C++.

Zlex
Cdigo generado: C.

Jax
Cdigo generado: Java.
No soporta entornos, est basado en expresiones regulares.
No soporta Unicode.

Jlex
Cdigo generado: Java.
Similar a lex.



Hablaremos de los analizadores ms comnmente empleados: Lex y Flex
LEX.
Lex es una herramienta de los sistemas UNIX/Linux que nos va a permitir generar
cdigo C que luego podremos compilar y enlazar con nuestro programa.
La principal caracterstica de Lex es que nos va a permitir asociar acciones
descritas en C, a la localizacin de las Expresiones Regulares que le hayamos
definido. Para ello Lex se apoya en una plantilla que recibe como parmetro, y que
deberemos disear con cuidado.
Internamente Lex va a actuar como un autmata que localizar las expresiones
regulares que le describamos, y una vez reconocida la cadena representada por
dicha expresin regular, ejecutar el cdigo asociado a esa regla.
Lex va a permitirnos definir nuestras propias acciones en un lenguaje mucho ms
comn: C.
La plantilla en la que Lex se va a apoyar para generar el cdigo C, y donde
nosotros deberemos describir toda la funcionalidad requerida, va a ser un fichero
de texto plano con una estructura bien definida, donde iremos describiendo las
expresiones regulares y las acciones asociadas a ella.
Se compone de tres secciones con estructuras distintas y claramente delimitadas
por una lnea en la que lo nico que aparece es el carcter doble %. Las
secciones de Declaraciones y la de Procedimientos de Usuario son opcionales,
mientras que la de Reglas es obligatoria (aunque se encuentre vaca).




FLEX.
Flex es una herramienta que traduce la especificacin de un analizador lxico a un
programa escrito en C que lo implementa.
Para especificarlo usaremos expresiones regulares a las que se puede asociar
acciones escritas en C.

Cada vez que el analizador encuentra en la cadena de entrada una secuencia que
encaja en una de las expresiones regulares especificadas, ejecutar la accin que
le hallamos asociado.
fichero.l ---> FLEX ---> lex.yy.c
lex.yy.c + (ficheros .c) ---> GCC ---> ejecutable
Compilacin:
$flex fichero.l
Compila la especificacin del analizador y crea el fichero yy.lex.c con el cdigo del
autmata.
$ gcc lex.yy.c -ll
Enlaza con librera de Flex (proporciona yywrap() y main() por defecto)
$ gcc lex.yy.c (ficheros .c)
El usuario deber de proporcinar sus propias main() e yywrap().
Dentro del cdigo se deber llamar a la funcin yylex() que tratar un TOKEN por
cada llamada.
Funcionamiento del analizador.
El fichero lex.yy.c contine las tablas de autmata generado y la funcin int
yylex(void) que simula el analizador especificado y sirve de interfaz con el cdigo
de usuario (yylex() deber de ser llamada en algn punto del cdigo del usuario)
En cada llamada, yylex() ir tomando caracteres de la entrada hasta que machee
una de las expresiones regulares de la especificacin. Entonces, se almacenar el
texto que ha macheado la expr. reg. en la variable yytext y se ejecutarn las
acciones asociadas al patrn.

Las acciones podrn ser simplemente el procesamiento del texto macheado y
enviarlo de nuevo a la salida.
En otras ocasiones podrn suponer la alteracin de varables del cdigo de
ususario y la devolucin a la rutina que llama a yylex() de algn tipo de dato por
medio de RETURN (generalmente ser un valor numrico que identifique la
TOKEN encontrado).

Вам также может понравиться