Practica 03 - Ejercicios con LEX 2 Compiladores - Profr. Edgardo Adrián Franco Martínez Práctica 03 “Ejercicios con Lex” • Programar utilizando Lex la solución a los siguientes 6 ejercicios. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 2 Practica 03 - Ejercicios con LEX 3 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 01 • 1.- Hacer un programa utilizando LEX que imprima el fichero de entrada pero con el número de cada línea. a) Todas las líneas e.g. Entrada: Pepe Juan Salida: 1: Pepe 2: 3: Juan b) Sólo las líneas que tengan algún texto e.g. Entrada: Pepe Juan Salida: 1: Pepe 2: Juan Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 3 Practica 03 - Ejercicios con LEX 4 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 02 • 2.- Hacer un programa utilizando LEX que obtenga el histograma de las longitudes de las palabras que aparezcan en un fichero texto de entrada. • Genere un programa en C que mediante tuberías pueda graficar utilizando GNUPlot. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 4 Practica 03 - Ejercicios con LEX 5 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 03 • 3.- Hacer un programa utilizando LEX que obtenga un resultado como el que brinda la orden "wc" en unix, contando los caracteres, las palabras y las líneas que contiene un archivo de entrada. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 5 Practica 03 - Ejercicios con LEX 6 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 04 • 4.- Hacer un programa utilizando LEX que copie la entrada en la salida, cambiando la ocurrencia de la palabra "variable" por "var primera" en las líneas que comiencen por la letra "a", por "var segunda" en las líneas que comiencen por la letra "b" y por "var tercera" en las líneas que comiencen por la letra "c". El resto de las palabras se mantiene igual, así como el resto de las líneas. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 6 Practica 03 - Ejercicios con LEX 7 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 05 • 5.- Hacer un programa utilizando LEX que formatee un texto de entrada a una cantidad de caracteres dada, introduciendo espacios de forma homogénea. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 7 Practica 03 - Ejercicios con LEX 8 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 06 • 6- Escribir un programa utilizando LEX que, dado un archivo de texto plano cuyo contenido se corresponde con código en el lenguaje de programación C, elimine como construcciones no estándar los comentarios de bloque anidados. El código C resultante contendrá los comentarios originales con los inicios y finales de comentarios anidados sustituidos por "--!" y "!--" respectivamente. Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 8 Practica 03 - Ejercicios con LEX 9 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 06 • Ejemplo: Entrada: /*********************************** ********** miEjemplo.c ************* ***********************************/ #include <stdio.h> #include <string.h> #include "miEjemplo.h" extern FILE *salida; // una funcion void unaFuncion(int var) { /* salida = fopen("pepe.dat", "w+"); var++; // hace algo /* /* cerrar */ fclose(salida); var = var - 1; */ var-*/ salida = fopen("pepe.datos", "w+"); printf("Aqui utilizamos /**** /**** Dentro de una cadena ****/ ****/ y no se debe modificar\n."); Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) } 9 Practica 03 - Ejercicios con LEX 10 Compiladores - Profr. Edgardo Adrián Franco Martínez Ejercicio 06 • Ejemplo: Salida: /*********************************** ********** miEjemplo.c ************* ***********************************/ #include <stdio.h> #include <string.h> #include "miEjemplo.h" extern FILE *salida; // una funcion void unaFuncion(int var) { /* salida = fopen("pepe.dat", "w+"); var++; // hace algo --! --! cerrar !-fclose(salida); var = var - 1; !-var-*/ salida = fopen("pepe.datos", "w+"); printf("Aqui utilizamos /**** /**** Dentro de una cadena ****/ ****/ y no se debe modificar\n."); } Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco) 10 Practica 03 - Ejercicios con LEX Compiladores - Profr. Edgardo Adrián Franco Martínez 11 11 Fecha y hora máxima de entrega • En laboratorio el: • 6CV1 lunes 04 de abril • 6CV6 jueves 07 de abril • Entrega del reporte a más tardar el viernes 08 de abril a las 23:59:59 hrs. a través del sitio web. • Obligatorio mostrar su funcionamiento en laboratorio • Reporte y código fuente documentado en un archivo comprimido RAR, TAR JAR o GZIP. • No olvidar: Reporte claro apoyado de diagramas y explicaciones concisas, evitar ambigüedad. • (Problema, solución, expresiones regulares y definiciones, implementación de la solución, funcionamiento, errores y posibles mejoras). • Código documentado: Titulo, descripción, fecha, versión, autor. • (Funciones y Algoritmos: ¿Qué hace?, ¿Cómo lo hace?, ¿Qué recibe?, ¿Qué devuelve?, ¿Causa de errores?). Compiladores (Práctica 03 “Ejercicios en Lex" - Edgardo A. Franco)