|
Grado en Ingeniería Informática
Modelos avanzados de Computación
Curso 2019/2020
|
Trabajo práctico
|
|
Algoritmo de Cocke–Younger–Kasami
|
|
Objetivos
|
|
El objetivo del trabajo es programar una aplicación en Haskell que lea la descripción de una gramática en Forma Normal de Chomsky
y una cadena de entrada y analice dicha cadena por medio del algoritmo CYK. El resultado del análisis debe ser un mensaje en
consola indicando si la cadena es "Correcta" o "Incorrecta". Como opción de mejora se plantea que en caso de que la cadena sea
correcta la aplicación genere también los árboles de derivación que conducen a su reconocimiento.
|
|
Formato de descripción de la gramática
|
|
Las gramáticas se describirán en ficheros con la extensión ".cfg". El formato de descripción de las gramáticas
utilizará una línea para cada regla de la gramática. Se admiten como válidas las líneas vacías que no contienen ninguna
regla. La gramática debe estar descrita en Forma Normal de Chomsky, lo que significa que solo hay dos tipos de reglas:
Se trata de reglas que sustituyen un símbolo no terminal por dos símbolos no terminales. Los símbolos no terminales
serán palabras expresadas con caracteres alfanuméricos. Por ejemplo, start, Comienzo, Var7,
S, LISTA, etc.
Describe una regla que sustituye un símbolo no terminal por un símbolo terminal. Los símbolos terminales serán
palabras expresadas
entre los signos menor y mayor. Por ejemplo,
<Identificador>, <COMA>,
<Num16>, etc.
El símbolo inicial de la gramática es el que se define en la primera
regla del fichero. Las líneas pueden contener comentarios, que comienzan
con el símbolo # y terminan al final de línea.
Este es un ejemplo de definición de una gramática con este formato:
# Ejercicio 3.7
S ::= <number> # Este es el símbolo inicial
S ::= <id>
S ::= L N
N ::= B R
L ::= <lparen>
R ::= <rparen>
B ::= S B
B ::= <number>
B ::= <id>
B ::= L N
|
|
|
Formato de descripción de
la entrada
|
|
La cadena de entrada que se pretende verificar se introducirá en un
fichero de texto. El contenido será la secuencia de símbolos
terminales que se pretenda evaluar, utilizando un símbolo por cada
línea.
Este es un ejemplo de entrada:
<lparen>
<id>
<lparen>
<id>
<lparen>
<number>
<rparen>
<rparen>
<lparen>
<id>
<rparen>
<rparen>
|
|
|
Formato de
descripción del arbol de derivación
|
|
Como opción de mejora del trabajo se plantea que en caso de que la
cadena sea correcta la aplicación genere también los árboles de
derivación que conducen a su reconocimiento. Estas derivaciones se
incluirán en un fichero de salida en el que se indicará en cada
línea una derivación, esto es, una sustitución de un símbolo no
terminal por la parte derecha de una regla. La primera línea será el
símbolo inicial y las siguientes irán mostrando la derivación hasta
llegar al contenido de la cadena de entrada analizada.
Por ejemplo, la gramática y la cadena de entrada indicadas en los
apartados anteriores generarán la siguiente derivación:
S
L N
<lparen> N
<lparen> B R
<lparen> S B R
<lparen> <id> B R
<lparen> <id> S B R
<lparen> <id> L N B R
<lparen> <id> <lparen> N B R
<lparen> <id> <lparen> B R B R
<lparen> <id> <lparen> S B R B R
<lparen> <id> <lparen> <id> B R B R
<lparen> <id> <lparen> <id> L N R B R
<lparen> <id> <lparen> <id> <lparen> N R B R
<lparen> <id> <lparen> <id> <lparen> B R R B R
<lparen> <id> <lparen> <id> <lparen> <number> R R B R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> R B R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> B R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> L N R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> <lparen> N R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> <lparen> B R R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> <lparen> <id> R R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> <lparen> <id>
<rparen> R
<lparen> <id> <lparen> <id> <rparen> <number> <rparen> <rparen> <lparen> <id>
<rparen> <rparen>
|
|
|
Documentación a entregar
|
|
- Memoria explicativa del desarrollo del trabajo, describiendo
los tipos de datos y las diferentes funciones que se hayan
desarrollado.
- Código fuente y compilado del trabajo, en formato electrónico.
- Conjunto de pruebas realizados.
- Archivos de gramáticas y entradas utilizados en las puebas.
|
|
Plazo de entrega
|
|
La fecha límite de entrega del trabajo será el viernes, 1 de febrero de 2020.
El trabajo se podrá presentar a traves de la plataforma de enseñanza virtual o, directamente, enviándolo por correo electrónico al profesor.
|
|