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 &lt; para el símbolo `<' y &gt; 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