UNIVERSIDAD NACIONAL UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO C CARRERA ARRERA P PROFESIONAL ROFESIO NAL DE INGENIERIA INFORMATICA Y DE SISTEMAS
ANALIZADOR NALIZADOR LEXICO
CURSO
: Cons rucci rucción ón de Com Compilad piladores. ores.
DOCENTE
: Ing.
ALUMNOS
: Carr ño P. Irwing Dario
Código: 070684
Gamarra Salas Jisbaj
Código: 080738
ino Flores.
Cusco – Perú 2011
INTRODUCCIÓN
Entre las fases del proceso de compilación, que son ejecutadas a través de distintas etapas, están la de análisis y síntesis; fases que son ejecutadas de forma secuencial. Para poder cumplir con la fase de análisis el compilador realiza una serie de acciones diferentes, agrupadas en etapas secuenciales dependientes principalmente del lenguaje fuente, están la de análisis léxico, sintáctico y semántico, ejecutadas en ese orden. La etapa de análisis léxico es realizado por un analizador léxico (también llamado scanner), quien agrupa los caracteres individuales en entidades lógicas, que posteriormente serán empleadas por las etapas siguientes de la fase de análisis. Este documento constituye un instrumento orientador, que puede calificarse como pautas para la realización de un analizador léxico a partir de la herramienta JFLEX, la cual genera automáticamente analizadores léxicos partiendo de una especificación basada en expresiones regulares. Pautas que resaltan lo siguiente: 1. Reconocer las subcadenas que corresponde a tokens. 2. Regresar el valor o lexema de un token, es decir el par “token-lexema”.
Construcción de Compiladores | Ing. Informática y de Sistemas
2
I.
GENERALIDADES A. OBJETIVOS 1. GENERAL a) Realización de un analizador léxico a partir de la herramienta JFLEX. 2. ESPECIFICOS a) Reconocer las subcadenas que corresponden a tokens. b) Regresar el valor o lexema de un token.
Construcción de Compiladores | Ing. Informática y de Sistemas
3
II. MARCO TEORICO A. HTML Siglas de HyperText Markup Language (Lenguaje de Marcado de Hipertexto ), es el lenguaje de marcado predominante para la elaboración de páginas web. Es usado para describir la estructura y el contenido en forma de texto, así como para complementar el texto con objetos tales como imágenes. HTML se escribe en forma de «etiquetas», rodeadas por corchetes angulares (<,>). HTML también puede describir, hasta un cierto punto, la apariencia de un documento, y puede incluir un script (por ejemplo Javascript), el cual puede afectar el comportamiento de navegadores web y otros procesadores de HTML. 1. ELEMENTOS Los elementos son la estructura básica de HTML. Los elementos tienen dos propiedades básicas: atributos y contenido. Cada atributo y contenido tiene ciertas restricciones para que se considere válido al documento HTML. Un elemento generalmente tiene una etiqueta de inicio y una etiqueta de cierre. Los atributos del elemento están contenidos en la etiqueta de inicio y el contenido está ubicado entre las dos etiquetas. Algunos elementos, tales como
, no tienen contenido ni llevan una etiqueta de cierre. 2. ATRIBUTOS La mayoría de los atributos de un elemento son pares nombre-valor, separados por un signo de igual «=» y escritos en la etiqueta de comienzo de un elemento, después del nombre de éste. El valor puede estar rodeado por comillas dobles o simples, aunque ciertos tipos de valores pueden estar sin comillas en HTML (pero no en XHTML). De todas maneras, dejar los valores sin comillas es considerado poco seguro. En contraste con los pares nombre-elemento, hay algunos atributos que afectan al elemento simplemente por su presencia (tal como el atributo ismap para el elemento img ).
B. ANALIZADOR LEXICO 1. CONCEPTO El análisis léxico constituye la primera fase del Proceso de Compilación, en esta fase se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos o tokens, que son secuencias de caracteres que tienen un significado. Además, todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente. También se comprueba que los
Construcción de Compiladores | Ing. Informática y de Sistemas
4
símbolos del lenguaje (palabras clave, operadores,...) se han escrito correctamente.
Para el caso de nuestro Trabajo, utilizamos el JFLEX que es un analizador léxico prediseñado para la utilización con el lenguaje Java. Su especificación se realizó a continuación. 2. JFLEX Es una herramienta que genera Analizadores Léxicos mediante el lenguaje de programación JAVA, es capaz de generar analizadores léxicos, es decir, construye, de forma rápida y sencilla programas que analicen las cadenas que aparecen en un fichero de texto y realicen diversas acciones en respuesta a ellas.
3. ESTRUCTURA JFLEX Un fichero JFlex se divide en 3 partes: Código de usuario %%
Directivas JFLex %%
Reglas para las expresiones regulares •
Código de Usuario En esta sección se incluyen sentencias propias de Java de importación, así como también la definición de clases y estructura de datos que sean necesarios para la construcción del analizador léxico a generar.
•
Directivas JFLEX Se utiliza para particularizar algunas características del explorador generado y, también, es donde se declaran las macros y estados que se usarán en la definición de las reglas léxicas. Ejemplo: DIGITO = [0-9] IDENT = [a-z][a-z0-9]*
•
Reglas Léxicas Contiene las reglas léxicas que se utilizarán para generar el explorador.
Construcción de Compiladores | Ing. Informática y de Sistemas
5
III. DESARROLLO DEL TRABAJO Para cumplir con el objetivo general del proyecto a partir de los objetivos específicos se desarrolló las siguientes etapas, mostradas a continuación.
A. RECONOCER LAS SUBCADENAS QUE CORRESPONDEN A TOKENS Esta etapa comprende la creación de un fichero con la extensión “flex”, que contiene las expresiones regulares codificadas (reglas léxicas), para la obtención de las subcadenas correspondientes a cada token especificado, del script en el lenguaje de programación HTML que se ingresa para su respectivo análisis lexico. Asi mismo en este fichero contiene directivas JFLEX, y algunas sentencias java necesarias para la generación de un archivo con la extensión java.
B. REGRESAR EL PAR “TOKEN-LEXEMA” En esta etapa el JFLEX produce la generación de un código con la extensión java, que por defecto es unca clase con nombre “yylex”. Una vez obtenida dicha clase, se procede a mostrar el par “token-lexema” producto del análisis al que es sometido el script ingresado, que para las pruebas a realizarse se requiere de un archivo de texto plano con sentencias HTML. El resultado se muestra en un formulario, donde se tiene los botones para cargar el archivo, y para realizar el análisis; además de una área de texto donde se visualiza los pares “token-lexema”. Asi mismo para el proceso de análisis se hacen uso de funciones propias de la clase generada por el JFLEX, como: 1. YYTEX: Devuelve el valor de la entidad lógica. 2. YYLINE: Devuelve el número de línea de la entidad lógica en el texto ingresado. 3. YYCOLUMN: Devuelve el número de columna de la entidad lógica en el texto ingresado.
Construcción de Compiladores | Ing. Informática y de Sistemas
6
El siguiente gráfico muestra todo el proceso de generación del analizador léxico y así como del análisis léxico.
Fichero de Especificacion
JFLEX
Analizador.jflex
Construcción de Compiladores | Ing. Informática y de Sistemas
7
IV. CONCLUSIONES
El JFLEX es una potente herramienta para la generación de analizadores léxicos a partir de expresiones regulares, debido a que es una herramienta multiplataforma. La aplicación de los temas estudiados; como autómatas, expresiones regulares; en cursos previos han sido de vital importancia para el cumplimiento de este proyecto. Se ha podido comprobar que la etapa de análisis léxico, constituye una parte importante del proceso de compilación ya que su salida es la entrada para las demás etapas de dicho proceso.
V. BIBLIOGRAFIA
http://es.wikipedia.org/wiki/HTML (Esta página fue modificada por última vez el 24 jun 2011, a las 03:20.) https://sites.google.com/site/tutoriasdeingenieria/lenguajes-deprogramacion/Manejo-de-archivos-en-java-swing---Netbeans http://download.oracle.com/javase/tutorial/uiswing/examples/components/FileC hooserDemoProject/src/components/FileChooserDemo.java http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html http://forums.netbeans.org/topic39938.html http://crysol.org/es/node/819 http://jflex.de/docu.html http://jflex.de/
Construcción de Compiladores | Ing. Informática y de Sistemas
8