Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1de 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).