Sie sind auf Seite 1von 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.

Das könnte Ihnen auch gefallen