A partir de un texto leído, se pretende realizar un tratamiento

Anuncio
Teoría de Lenguajes de Programación
Evaluación continua
Convocatoria de Junio - 2014
Actividad Léxica
Objetivo
A partir de un texto leído, se pretende realizar un tratamiento mediante un programa obtenido automáticamente con el uso del generador JavaCC, para ello se especifica la forma que tienen los diversos componentes del texto que han de detectarse para producir una determinada salida.
Descripción del contenido de un texto
El texto considerado tiene cualquier cantidad de caracteres del alfabeto (en este enunciado cuando se habla
de espacio en blanco se refiere exclusivamente al carácter blanco y no al tabulador ni al salto de línea). A
continuación se definen unas secuencias de caracteres que pueden estar presentes en un texto:
• fecha
el carácter /, seguido de un número de día, seguido del carácter -, seguido de un nombre de mes, seguido del carácter -, seguido de un número de año, seguido del carácter /; con las siguientes condiciones:
- la inicial de un nombre de mes se pone en minúscula o mayúscula, el resto de las letras en minúscula
- tanto el número de día como el número de año no tienen ceros por la izquierda
- el número de día está comprendido entre 1 y 31; el número de día tiene que ser adecuado para el mes,
así por ejemplo, si el texto contiene una referencia al día 31 de abril, la secuencia no se considera como
una fecha; para el mes de febrero se acepta el día 29
- el número de año está comprendido entre el límite inferior 1949 y el límite superior 2013 (ambos inclusive)
indicación: el texto puede contener, por ejemplo, la secuencia /819-Agosto-2007/ que no es
un error sino una secuencia que no ha de considerarse como una fecha
• dirección de correo
uno, dos o tres prefijos, seguidos del símbolo @, seguido por uno o dos sufijos; tanto los prefijos como
los sufijos se separan entre sí mediante el símbolo punto; un prefijo está formado por uno o más caracteres que pueden ser letras (minúsculas o mayúsculas) o dígitos decimales (del 0 al 9); un sufijo está formado por tres o más letras (minúsculas o mayúsculas)
• palabra cortada
una o más letras minúsculas o mayúsculas seguidas por el carácter -, de manera que dicho carácter sea el
último de una línea
indicación: una palabra cortada no puede estar en la última línea del texto ya que no continuaría en la
línea siguiente
• secuencia entre interrogantes
un interrogante de abrir, seguido de uno o más caracteres, seguidos de un interrogante de cerrar; toda la
secuencia (incluidos los interrogantes) tiene que estar en la misma línea; los caracteres entre interrogantes pueden ser letras (minúsculas o mayúsculas), dígitos, símbolos de puntuación (coma, punto y coma,
punto) o espacios en blanco y al menos ha de haber una letra
• secuencia entre llaves
una llave de abrir, seguida de cero o más caracteres cualesquiera que puede extenderse por una o más líneas, seguidos de una llave de cerrar; ha de considerarse la primera llave de cerrar que se encuentre después de la llave de abrir inicial; entre la llave de abrir inicial y la llave de cerrar puede haber otras llaves
de abrir (esto es, las llaves no pueden estar anidadas)
Dentro de la secuencia entre llaves puede darse la presencia de cualquiera de los otros formatos de secuencia descritos; pero en este caso, no hay que considerarlos como tales formatos sino que prevalece la consideración de secuencia entre llaves y esos caracteres se toman como caracteres cualesquiera.
El tratamiento que ha de realizarse como consecuencia de la lectura del texto consiste en la grabación en el
fichero de salida de las indicaciones sobre las secuencias detectadas que se describen en lo que sigue; cada
indicación se graba en una línea distinta. Si en el texto leído se encuentra:
- fecha
se graba la secuencia de cuatro caracteres mes:, seguida de un espacio en blanco, seguido del nombre del mes en minúsculas
- dirección
de correo
se graba la secuencia de dos caracteres @k, donde k es el número de sufijos (1 ó 2)
- palabra cortada
se graban las letras encontradas antes del guión, seguidas del guión
- secuencia
entre interrogantes
se graba la propia secuencia, incluidos los interrogantes
- secuencia entre llaves
se graba la secuencia de cinco caracteres {<->}
En el caso de que en el texto leído se encuentre en cualquier lugar la siguiente secuencia especial
un corchete de abrir, seguido del carácter #, seguido de un corchete de cerrar
con independencia de cuál sea el contenido del texto, no se graba ninguna de las indicaciones descritas sino
que se graba exclusivamente el aviso
[Texto marcado]
A continuación se muestran cinco ejemplos de textos de entrada con las correspondientes salidas.
Entrada 1
/309-marzo-2001/
/0008-febrero-2002/
/3-enero-1955/
Salida 1
mes: enero
Entrada 2
Texto preparado entre el /31-Marzo-2011/ y
el /33-agosto-2013/:
====================
Se dirige a Un.Destino.Casi@Desconocido un cierto asunto bien-sabido.
¿Es preciso; ? {justificar { el destino elegido;} aunque {resulte complicado >>> } }
[email protected]
{ { <Fin del texto>
Salida 2
mes: marzo
@1
cier¿Es preciso; ?
{<->}
{<->}
@2
Entrada 3
La fecha /3-febrero-1879/
¿una.jornada.particular? { sin
do {
[email protected]}
{
el destino {
elegi-
Salida 3
¿una.jornada.particular?
{<->}
Entrada 4
/3-Mayo-2000/
== [#] == ¿ nunca ?
un.destino@incierto
Salida 4
[Texto marcado]
Entrada 5
¿20-Marzo-1989?
{ [#] >>> [#] }
Salida 5
[Texto marcado]
Consideración sobre el texto de entrada
Las secuencias de caracteres contenidas en el texto de entrada se ajustan o no a los formatos descritos, pero
nunca hay que considerar la condición de que sean secuencias erróneas: en ningún caso hay que detectar la
presencia de hipotéticos errores.
Exigencia imprescindible para la solución
Para resolver esta práctica conviene fijarse en la salida pretendida y deducir la manera de hacer una especificación de patrones que sirva para detectar en el texto leído los formatos que han de tratarse.
Dado que el objetivo de la práctica es emplear el generador JavaCC para especificar los patrones, no es
adecuada, y no se admitirá como válida, la resolución realizada mediante código programado en Java de la
identificación y detección de cada uno de los formatos descritos.
Desarrollo del programa para el tratamiento de un texto
1.- Escríbase en JavaCC una especificación de patrones que sirva para reconocer las diferentes secuencias
que se pretende detectar en el texto de entrada y que permita realizar la transformación pedida.
2.- Escríbase en Java un programa principal que lea el texto y, haciendo uso del resultado generado por JavaCC, produzca como salida el fichero transformado.
Documentación
Es obligatorio presentar la práctica acompañada de una documentación por escrito que incorporará un índice con la relación de los apartados que la componen. No se admiten documentaciones escritas a mano.
Entre los puntos incluidos deben estar:
- una portada indicando el nombre del alumno, número de matrícula, grupo de clase y profesor correspondiente al grupo
- una justificación razonada de la solución adoptada para la especificación del tratamiento
- un apartado dedicado a las pruebas del programa obtenido en el que se comente cómo se han organizado las pruebas y qué características se ha pretendido verificar en cada una de ellas
- la especificación escrita en JavaCC y el programa principal escrito en Java; este punto deberá consistir
en una transcripción literal del código (en texto plano y sin editar); será imprescindible para aprobar la
práctica que haya una correspondencia exacta entre los ficheros de código y su versión incorporada en
la documentación.
Evaluación
Esta actividad práctica representa el 15% de la nota final del proceso de evaluación continua y se debe realizar obligatoriamente y aprobar (5,0) para que la calificación global de la asignatura resulte superada.
Para la evaluación será imprescindible presentar todos los documentos que se solicitan en el apartado de
documentación.
En el proceso de evaluación el programa obtenido debe funcionar correctamente y se tendrá en cuenta la
calidad y la estructuración de la documentación. Dentro del proceso de evaluación de esta actividad se podrá llamar al alumno para que defienda presencialmente su solución. Si se detecta una copia la práctica estará suspensa.
Presentación y plazo
El ejercicio resuelto se entregará al profesor del grupo al que se pertenece, de la siguiente manera:
- la especificación JavaCC y el programa principal Java, por correo electrónico antes de entregar la documentación por escrito,
- la documentación por escrito, personalmente en el Despacho, en horas de tutorías.
El plazo de presentación para la convocatoria de Junio termina el día 24 de marzo de 2014.
Descargar