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)