Este documento describe el desarrollo de un analizador léxico para un lenguaje HTML restringido utilizando la herramienta Flex en C++. Explica la instalación de Flex, la creación de tres archivos (Tipos.h, AnalizadorHTML.l y Program.c) que comprenden la cabecera, las expresiones regulares y el programa principal, y las pruebas del analizador léxico una vez compilado.
0 calificaciones0% encontró este documento útil (0 votos)
543 vistas11 páginas
Este documento describe el desarrollo de un analizador léxico para un lenguaje HTML restringido utilizando la herramienta Flex en C++. Explica la instalación de Flex, la creación de tres archivos (Tipos.h, AnalizadorHTML.l y Program.c) que comprenden la cabecera, las expresiones regulares y el programa principal, y las pruebas del analizador léxico una vez compilado.
Este documento describe el desarrollo de un analizador léxico para un lenguaje HTML restringido utilizando la herramienta Flex en C++. Explica la instalación de Flex, la creación de tres archivos (Tipos.h, AnalizadorHTML.l y Program.c) que comprenden la cabecera, las expresiones regulares y el programa principal, y las pruebas del analizador léxico una vez compilado.
Este documento describe el desarrollo de un analizador léxico para un lenguaje HTML restringido utilizando la herramienta Flex en C++. Explica la instalación de Flex, la creación de tres archivos (Tipos.h, AnalizadorHTML.l y Program.c) que comprenden la cabecera, las expresiones regulares y el programa principal, y las pruebas del analizador léxico una vez compilado.
Descargue como DOCX, PDF, TXT o lea en línea desde Scribd
Descargar como docx, pdf o txt
Está en la página 1/ 11
ANALIZADOR LXICO
UTILIZANDO LEX Y C++
INTEGRANTES: CASTRO DEL CARPIO CRISTIAN - 101655 HUALLPARIMACHI GARCIA JHONY LUCIA - 093166 CUSCO MAYO 2014 UNIVERSIDAD NACIONAL SAN ANTONIO ABAD DE CUSCO
FACULTAD DE CIENCIAS QUMICAS, FSICAS Y MATEMTICAS
INTRODUCCIN Un compilador es una herramienta que permite interpretar lenguajes de alto nivel. Los componentes de un compilador son los analizadores le xico, sinta ctico y sema ntico. La primera fase del ana lisis de un co digo fuente es el ana lisis le xico, el cual tiene como principal objetivo leer el flujo de caracteres de entrada y convertirlo en una serie de tokens o componentes le xicos, que son las unidades mnimas de cada lenguaje de programacio n y son estos los que usa el analizador sinta ctico. Tambie n, el analizador le xico es capaz de eliminar aquellos elementos que no son necesarios, como los espacios en blanco, las tabulaciones, los saltos de lnea y los comentarios. Para construir un analizador le xico se pueden utilizar diferentes herramientas, como son los mismos lenguajes de alto nivel, sin embargo, estos no proporcionan sentencias de fa cil construccio n y complican el co digo, es por ello que se utilizan algunas herramientas de construccio n como son flex, lex, yacc, Jflex, etc. El presente informe presenta el desarrollo de un analizador le xico dirigido al lenguaje HTML con caractersticas restringidas, utilizando la herramienta flex integrada en un entorno de C++. Se desarrollo en la plataforma Ubuntu de 32 bits, y con el compilador nativo de C para UNIX: gcc.
OBJETIVO 1. General Construir un aplicativo que pueda realizar las funciones de un analizador le xico para el lenguaje HTML restringido. 2. Especficos a. Desarrollar expresiones regulares que incorporen el HTML, y que puedan ser programadas en Lex. b. Desarrollar una aplicacio n que integre a las reglas desarrolladas anteriormente, para poder utilizarlas en el ana lisis le xico.
MARCO TERICO Para poder desarrollar el analizador le xico, definiremos brevemente el lenguaje HTML restringido que utilizara la aplicacio n. Las sentencias que reconocera el analizador son las siguientes: - <html> y </html>: etiquetas de co digo html. - <head> y </head>: etiquetas de cabecera. - <title> y </title>: etiquetas de ttulo de pa gina. - <body> y </body>: etiquetas de cuerpo de pa gina. - <hr> y </hr>: etiqueta. - <h1> y </h1>: etiqueta de cabecera mayor de pa gina. - <p> y </p>: etiqueta de pa rrafo. - <ul> y </ul>: etiqueta de lista no ordenada. - <il> y </il>: etiqueta de elemento de lista - <!-- -->: comentario As mismo, reconocera el texto introducido fuera de las etiquetas. Para la construccio n del analizador le xico, se utilizara la herramienta Lex, cuya principal funcio n es la de generar un archivo lex.yy.c, el cual sirve de apoyo al aplicativo principal. FLEX.- Flex es ampliamente conocido como el ra pido generador de ana lisis le xico, es de co digo abierto, 100% gratis y una aplicacio n de lnea de comandos multiplataforma escrito en los lenguajes C/C++. Flex ha sido disen ado de tal
manera que puede generar un archivo en co digo C llamado "lex.yy.c" que puede definir la funcio n yylex(). Funciona bien tanto en los sistemas operativos Linux y BSD. Cabe mencionar que el flex no es la mejor herramienta para la construccio n de este analizador, siendo el yacc la mejor opcio n por tener en cuenta las reglas ma s complicadas del ana lisis le xico. HTML.- El HTML, Hyper Text Markup Language (Lenguaje de marcacio n de Hipertexto) es el lenguaje de marcas de texto utilizado normalmente en la www (World Wide Web). HTML no es propiamente un lenguaje de programacio n como C++, Visual Basic, etc., sino un sistema de etiquetas. HTML no presenta ningu n compilador, por lo tanto algu n error de sintaxis que se presente e ste no lo detectara y se visualizara en la forma como e ste lo entienda.
DESARROLLO DEL PROYECTO I PARTE: Instalacin del Flex Para iniciar, se debe instalar el flex, en este proyecto se utilizo la versio n de flex para el Sistema Operativo Ubuntu 13.04 de 32 bits. Se puede instalar el flex de dos maneras, la primera abriendo una terminal y escribiendo los siguientes comandos: ~$ sudo apt-get update ~$ sudo apt-get install flex De otra forma, se puede instalar el flex haciendo una bu squeda en el Centro de Software de Ubuntu, te rmino clave: flex.
Ilustracin 1. Flex en el Centro de Software de Ubuntu. Una vez instalado el flex, ya es sencilla la creacio n del aplicativo, solamente debemos considerar las tres secciones que debe tener siempre un archivo lex: la cabecera, donde va el co digo en C++ que se utiliza en las reglas, las reglas son las expresiones regulares que definen al analizador le xico y finalmente tenemos la tercera seccio n donde tambie n se agrega co digo en C++ que sera de soporte para el aplicativo. Para este proyecto so lo utilizamos las dos primeras secciones, las cuales pasaremos a detallar.
NOTA: Se utiliza la tercera seccio n para definir al me todo yywrap() el cual es de uso esencial en la generacio n del archivo lex.yy.c. II PARTE: Construccin de la librera de cabecera Esta es la seccio n ma s sencilla del aplicativo. Primeramente, se creo un archivo denominado Tipos.h, el cual contiene algunos valores predefinidos y esta ticos que sera n los que devuelva el analizador le xico. Ejemplo: #define INICIO 1. III PARTE: Construccin del archivo flex, desarrollo de las expresiones regulares Seguidamente se pasa a construir el archivo en co digo lex; definamos la estructura de un archivo lex: --------------------------------- PRIMERA PARTE (en co digo C++) %% expresio n_regular ACCIO N %% TERCERA PARTE (igual en co digo C++) --------------------------------- Para la primera parte se debe hacer referencia al archivo creado anteriomente: Tipos.h. %{ #include Tipos.h %} %option nounput yylineno La cuarta lnea nos crea una variable global que almacenara el nu mero de lnea. En la segunda parte definimos las expresiones regulares que conforman el analizador del HTML restringido, el cual llamaremos AnalizadorHTML.l. Para el proyecto se dividio en dos secciones a las expresiones regulares, en la primera seccio n incluimos reglas que definan valores, como la regla: inicio <, en la cual indicamos que cada vez que se encuentre el smbolo < se tomara como la regla inicio.
La segunda seccio n contiene las reglas que devolvera n acciones en co digo C++ cada vez que se las encuentre en el texto, como la regla: {inicio} return INICIO; que indica que cada vez que se encuentre inicio (<) se devolvera el valor de INICIO definido en la cabecera, es decir 1. Finalmente, como ya se indico en la tercera parte del archivo lex se define al me todo yywrap(void) el cual lo utiliza el mismo lex en la creacio n del archivo lex.yy.c. Una vez creado el archivo lex se puede pasar a crear la aplicacio n principal. IV PARTE: Construccin del programa principal en C++ El aplicativo esta construido en C++, y mediante la terminal de Ubuntu le alimentaremos de un archivo html, por lo cual, solo debemos implementar las acciones que realizara internamente. A este archivo le llamaremos Program.c. En la primera parte, se hacen las referencias respectivas, incluyendo: #include Tipos.h que se utiliza de igual manera en el aplicativo y en el archivo lex. Seguidamente y como una de las partes principales del proyecto se deben hacer referencia a los valores tomados del lex.yy.c, los cuales sera n los que trabajen con el archivo fuente que se proporcione. Estas referencias son las declaraciones: extern int yylex(); extern int yylineno; extern char* yytext; El me todo yylex() es el que devuelve uno a uno los tokens que se obtienen del ana lisis le xico del archivo fuente. El atributo yylineno nos devuelve el nu mero de lnea en el cual estamos ubicados en cada momento del ana lisis. Y el atributo yytext nos devuelve el texto actual del valor que tomamos de yylex(). Ya en programa principal, hacemos un bucle que analice todos los tokens, que sera n tomados en la variable ntoken. En el cuerpo del bucle se definen los casos que se imprimira n en pantalla, tomando en cuenta los valores de yylex() y haciendo algunas validaciones
sinta cticas primitivas, como son el balanceo de las etiquetas de apertura (<) y cerradura (>), y del cara cter de escape \.
V PARTE: Implementacin y Pruebas Una vez tenemos estos tres archivos: Tipos.h, AnalizadorHTML.l y Program.c pasamos a compilarlos utilizando la terminal de Ubuntu. La secuencia de instrucciones es: $ lex -i AnalizadorHTML.l NOTA: Este comando genera el archivo lex.yy.c, la instruccio n -i indica que el analizador le xico no sera sensible a las mayu sculas y minu sculas. Seguidamente utilizamos el compilador de C, el gcc, para compilar ambos archivos a la vez lex.yy.c y Program.c. $ gcc lex.yy.c Program.c -o AnalizadorLexicoHTML En esta instruccio n compilamos ambos programas a la vez, de otra manera el compilador manda un error. Generamos el archivo objeto con la instruccio n -o y lo llamamos AnalizadorLexicoHTML. Finalmente, hacemos funcionar el programa, y le alimentamos de un archivo fuente, para el ejemplo tenemos el archivo Compiladores.html. $ ./AnalizadorLexicoHTML <Compiladores.html Por cuestiones de ejemplo, mostramos el archivo fuente y los resultados devueltos por el analizador.
Ilustracin 2. Cdigo fuente en HTML
Ilustracin 3. Comandos en la terminal y resultados.
CONCLUSIONES Al programar las expresiones regulares de HTML de nuestro caso de estudio en Lex, se logro definir las restricciones que presenta este lenguaje. Una vez introducido un co digo en HTML, con el analizador le xico desarrollado se puede ver las etiquetas que presenta este co digo. No obstante, la versio n 1.0 de este analizador le xico, no sirve para analizar cualquier co digo HTML. Es ma s, en caso de los textos que van entre etiquetas, estos deben de tener siempre un cara cter de espacio delante. Tampoco puede reconocer texto que se encuentre en una lnea independiente. BIBLIOGRAFA 1. http://askubuntu.com/questions/164293/how-to-install-flex Consultado en: 26 de abril de 2014. Se utilizo esta pa gina web para investigar el modo de instalacio n de flex en Ubuntu.
2. https://www.youtube.com/watch?v=54bo1qaHAfk Consultado en: 02 de mayo de 2014. Se utilizo esta pa gina web para investigar los pormenores del uso de flex en Ubuntu. Se investigo sobre su compilacio n mediante terminal y el enlazamiento con los diferentes archivos de soporte, como son: el archivo de encabezado y el programa principal.
3. https://github.com/jengelsma/lex-tutorial Consultado en: 02 de mayo de 2014. Se utilizo esta pa gina web para descargar un analizador le xico escrito en flex el cual se utilizo de soporte en la construccio n del analizador, sobre todo en lo referente a sus secciones y en el enlace entre los diferentes archivos que conforman el proyecto.
4. http://luv.asn.au/overheads/lex_yacc/lex.html Consultado en: 03 de mayo de 2014.
Se utilizo esta pa gina web para investigar sobre el funcionamiento del flex, sus principales caractersticas y tomar algunos ejemplos. 5. https://code.google.com/p/analizador-lexico-html/downloads/list Consultado en: 04 de mayo de 2014. Se utilizo esta pa gina web para descargar un analizador le xico de HTML ya construido, pero en lenguaje Java, el cual se utilizo de soporte para la construccio n del analizador en C++.
6. http://dai.unsaac.edu.pe/virtual/file.php/45/laboratorio/Ejemplos_Anal izador_Lexico_-LEX.txt Consultado en: 04 de mayo de 2014. Se utilizo esta pa gina web para descargar un archivo que sirvio de gua en el desarrollo del analizador construido.
7. Flex, versin 2.5. Un generador de analizadores lxicos rpidos. Autor: Paxson. Vern. Fecha: Abril 1995. Se utilizo este documento para investigar sobre las caractersticas del flex y como gua para algunos ejemplos.
8. lex & yacc Autores: Levine, John R. - Mason, Tony Brown, Doug. Editorial: O'Reilly. Fecha: 1992. Se utilizo este libro para investigar las caractersticas de las expresiones regulares que se pueden construir en flex.