Práctica 2 - Introducción

Anuncio
Práctica 2
Manejo Avanzado de Flex
Tareas
Intro_Flex_Bison.pdf
(flex-es-2.5.pdf).
1. Estudia la sección sobre las condiciones de arranque en
(páginas 7 a 9) y luego el capítulo 9 del manual de Flex
2. Lee la introducción de esta práctica y realiza los ejercicios 1 y 2 propuestos.
3. Elabora la memoria de la práctica y entrégala junto con los cheros fuente según el
Procedimiento de Entrega de Prácticas explicado en la Introducción a las Prácticas
de la Asignatura (página 3 del guión de la Práctica 1). Hay UNA sesión para realizar
esta práctica. Así, la fecha tope de entrega será hasta el día anterior al comienzo
de la Práctica 3.
Nota: El incumplimiento de las normas de entrega se reejará en la
calicación de la práctica.
Se recuerda especialmente lo siguiente:
Debes crear un directorio que contenga exclusivamente el chero con la memoria
en formato PDF, los cheros fuente con tu código (.l de Flex y .y de Bison ) y los
de prueba (.txt de texto). No usar subdirectorios.
En caso de que el chero .zip resultante tenga un tamaño mayor de 512 KB deberás
repetir la creación del directorio dividiéndolo en varios cheros .zip de como máximo 512 KB cada uno, en ese caso llama a los cheros resultantes
nipPrX2.zip,
nipPrX1.zip,
etc.
Introducción
El objetivo principal de esta práctica es aprender a desarrollar analizadores léxicos en
Flex más sosticados, profundizando en el manejo de lo que se conoce como condiciones
de arranque. Las condiciones de arranque no son imprescindibles, ya que siempre se
pueden emular utilizando código C en las acciones de los patrones. No obstante, su
uso facilita mucho el desarrollo de los programas en Flex, ya que ayudan a estructurar
1
conjuntos de patrones/acciones en función de un contexto determinado o condiciones
previas.
Ejercicio 1
Implementa un programa en Flex que tome como entrada un chero fuente en Flex y
devuelva la siguiente información:
Número de líneas y caracteres del fuente.
∗ . . .∗ /) y longitud media expresada en forma de número
Número de comentarios (/
de caracteres.
Número de variables C declaradas en la primera sección del fuente.
Número de deniciones Flex (nombres y condiciones de arranque) en la primera
sección del fuente.
Número de comandos
#include
en la primera sección del fuente.
Número de instrucciones de composición condicional (if, else, switch ) y de composición iterativa (while, for, do, while ) en todo el código C incluido en las acciones
y en la tercera parte del fuente.
Ayuda: En este ejercicio, las condiciones de arranque pueden ser útiles para, por ejem-
plo, no contabilizar palabras reservadas que estén dentro de comentarios o de constantes
de tipo cadena que se utilicen en el programa. En este sentido, se podría denir una
condición de arranque especíca dentro de un comentario y otra distinta para las cadenas. Así, deberíamos poder contar las palabras clave sólo cuando estas condiciones de
arranque no estén activas.
Las condiciones de arranque pueden ser útiles para distinguir el patrón de la acción
en la segunda parte del fuente. El patrón naliza en el primer carácter tabulador, salto
de línea o bien espacio en blanco (pero en este último caso se trata de el primer espacio
en blanco que no forme parte del patrón); este es el caso complicado, porque el patrón
puede tener un blanco dentro de un conjunto de símbolos (por ejemplo
[a b])
o de un
literal (por ejemplo ab c ). En este sentido, se podría denir una condición de arranque
especíca dentro de un conjunto y dentro de un literal para no contar esos espacios en
blanco como nal del patrón.
También puede ser útil una condición de arranque para dentro de un patrón, otra para
dentro de una acción, etc
Nota: Podéis descargar un chero de prueba en la página web de la asignatura o copiarlo del directorio de hendrix
/export/home/practicas/Practicas/TC/Practica2/.
Por supuesto debéis usar otros posibles cheros de prueba (por ejemplo vuestros propios
fuentes ex).
2
Ejercicio 2
Es corriente encontrar páginas Web donde aparecen ejemplos de código fuente en Java. Implementa un programa Flex que elimine todos los TAGs propios de la sintaxis
de HTML (delimitados por `<' y `>' para un chero HTML con código fuente que se
suministra a la entrada al programa. Es necesario tener en cuenta que un TAG puede
contener una cadena de caracteres (texto entre comillas) de forma que alguno de sus
caracteres sea un `>'. En este caso, no se trataría como la nalización del TAG, sino
como un carácter perteneciente a la cadena.
Utilizando el analizador léxico construido, procesa alguna de las páginas Web que se
te proporcionan e intenta compilar el código fuente Java obtenido.
Ayuda: tened en cuenta que dentro del código Java puede haber símbolos `<' y `>' en
operaciones de comparación entre objetos o variables de tipos básicos. En los ejemplos
proporcionados estos casos están modicados, y se usa
<
para el símbolo `<' y
>
para el símbolo `>' como códigos HTML para caracteres especiales.
Para este ejercicio, considerad el uso de condiciones de arranque para diferenciar el
contexto donde está ubicado el código fuente del programa (entre las etiquetas <pre>
y </pre> ) y aquellos casos en los que hay cadena que aparece dentro de un TAG para
tratar los símbolos `>' que puedan aparecer en este contexto como cierres del TAG.
Nota: Podéis descargar en la página web de la asignatura o copiar del directorio de
hendrix
/export/home/practicas/Practicas/TC/Practica2/ un chero de prueba pa-
ra poder comprobar el correcto funcionamiento del analizador léxico construido. Por
supuesto debéis usar otros posibles cheros de prueba (por ejemplo código Java en otras
páginas Web ).
3
Descargar