You are on page 1of 7

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA

FACULTAD DE INGENIERÍA
ESCUELA DE CIENCIAS Y SISTEMAS
LENGUAJES FORMALES Y DE PROGRAMACIÓN

Segundo Semestre 2018

Sección Catedrática Tutor académico


A- Inga. Damaris Campos de López Aylin Aroche Arbizú
B- Inga. Zulma Aguirre César Javier Solares Orozco

Enunciado de Práctica No. 1


Objetivos:
Esta práctica tiene como objetivo que el estudiante practique el análisis léxico de un lenguaje formal
y que se familiarice con el lenguaje de programación C#, así como aplicar los conocimientos
adquiridos en la clase y en el laboratorio.

Descripción:
La práctica consiste en realizar un organigrama para la empresa Digital IngameSolutions y los
departamentos que dicha empresa posee, para dicho organigrama se tiene un lenguaje definido, y a
través de éste se pueden generar gráficas que muestren las relaciones existentes entre los diferentes
trabajadores y sus superiores. La aplicación será desarrollada en lenguaje de programación C#.

El gráfico propio del organigrama se realizará a partir del contenido del editor de organigramas, este
editor se puede llenar directamente o a través de la carga de un archivo con extensión .ogm, y los
gráficos serán mostrados en una página HTML externa a la aplicación.

La aplicación debe proveer la opción de analizar el contenido del editor, y deberá generar como
salida una página HTML con los resultados, en caso de que el archivo contenga errores, mostrará
una página HTML con el detalle de estos.

Definición del lenguaje:


El lenguaje tiene dos bloques:

• Bloque Organigrama
Dentro del lenguaje propio de la aplicación es posible indicar que se desea realizar un
organigrama de la siguiente manera:

organigrama:<departamento>:{<Bloques trabajador>}

Para cada instrucción organigrama que se ingrese en el archivo de entrada, se generará una tabla
en la página HTML que mostrará el nombre del organigrama y el grafico correspondiente. El
segmento <departamento> en la instrucción organigrama es una cadena que contiene el nombre
del departamento, el segmento <Bloques trabajador> se detallará más adelante.
• Bloque Trabajador

Este bloque permite agregar un trabajador al departamento en la que se encuentre, la


sintaxis es la siguiente:

trabajador:{
codigo:<numero entero>;
nombre:<cadena>;
superiores:{<lista de códigos>};
}

A continuación, se detallan los elementos de la instrucción


trabajador:
• <numero entero>: es un número entero mayor que cero
• <cadena>: es una secuencia de caracteres delimitada por comillas dobles
• <lista de códigos>: es una lista de números enteros mayores que cero, separados
por coma. Para el caso en el que el trabajador no tiene superiores, esta lista no se
agrega. Se da a entender que este trabajador es el Jefe en General.
Dentro de un bloque organigrama pueden venir uno o más bloques trabajador.
Archivo de entrada ejemplo:

organigrama:"Dev Ops":{
trabajador:{
codigo:433;
nombre:" Mario Arnulfo Prera";
superiores:{};
}
trabajador:{
codigo:107;
nombre:" Jose Fernando Aguirre";
superiores:{433};
}
trabajador:{
codigo:017;
nombre:" Jorge Daniel Morales";
superiores:{433};
}
trabajador:{
codigo:103;
nombre:" Eduardo Javier Florian";
superiores:{433};
}
trabajador:{
codigo:147;
nombre:" Donoban Manuel Orellana";
superiores:{017};
}
trabajador:{
codigo:019;
nombre:" Juan Pablo Calderon";
superiores:{017};
}
trabajador:{
codigo:795;
nombre:" Jessica Felicia";
superiores:{103};
}
trabajador:{
codigo:960;
nombre:" Priscila Maria Molina";
superiores:{103};
}
trabajador:{
codigo:770;
nombre:" Jherson Jose Hevia";
superiores:{103};
}
trabajador:{
codigo:796;
nombre:" Zoe Fabiola Hernandez";
superiores:{795, 960, 770};
}
}

Al ejecutar las instrucciones anteriores en el editor, se generaría una página HTML que mostraría
algo como lo siguiente:
En la imagen anterior podemos observar que en la parte superior de la tabla resultante se muestra
el nombre que se le dio al bloque organigrama como título.
Cada una de las etiquetas de trabajador muestra únicamente el código y el nombre del trabajador,
las flechas del grafo son generadas en función de los superiores de cada trabajador, por ejemplo,
Jorge Fernando Aguirre tiene como superior a Mario Arnulfo Prera, lo que significa que existirá una
flecha que va de Mario Arnulfo Prera hacia Jorge Fernando Aguirre.

Aplicación:
La aplicación debe analizar el texto del editor, de encontrar errores léxicos, la aplicación debe
informar al usuario y mostrar un reporte de errores en formato HTML, en este caso no debe generar
la página de salida. En la tabla con el reporte de errores se deben mostrar los siguientes campos:

No. Error Descripción Fila Columna


1 % Elemento léxico desconocido 3 4

De no encontrar error alguno, se debe generar la página HTML de salida correspondiente. La


aplicación debe pintar dentro del editor cada uno de los lexemas, según su tipo, los colores se definen
a continuación:

Tipo Color
Palabras reservadas Azul
Números Amarillo
Cadenas Verde
Dos puntos Morado
Punto y coma Rojo
Llaves Rosado
Coma Celeste
Otros Negro

Además de colorear los elementos léxicos y generar la página de salida HTML, se debe generar otra
página HTML que contenga una Tabla de tokens con los siguientes campos:

No. Lexema Tipo Fila Columna


1 trabajador Reservada 2 1
2 “Valor” Cadena 2 12
3 : Dos puntos 2 11
Interfaz gráfica:

Componentes mínimos de la interfaz:

1. Editor de texto: Debe ser un área de texto en el cual se puedan escribir nuevas instrucciones
de entrada o bien cargar texto desde archivos con extensión .ogm
2. Abrir: La interfaz debe proveer la capacidad de abrir archivos con extensión .ogm.
3. Guardar: La aplicación debe proveer la capacidad de guardar el texto contenido en el editor.
Si no ha sido guardada nunca, debe proveer una opción para ingresar el nombre del nuevo
archivo y la ubicación en la que se desea guardar.
4. Guardar como: Está opción permite guardar el archivo de entrada con otro nombre, se debe
preguntar el nombre del nuevo archivo.
5. Analizar: Debe realizar el análisis léxico del lenguaje que se encuentra actualmente en el
editor y generar la salida correspondiente.
6. Acerca de: Debe desplegar una ventana con los datos del estudiante y del curso.
7. Salir: Debe terminar la ejecución de la aplicación.

Entregables:
• Manual de Usuario
• Manual Técnico: Dentro de este manual debe incluirse el autómata finito determinista que
se utilizó para la implementación del analizador léxico.
• Código fuente.
• Ejecutable de la práctica

Documentación a entregar de forma física el día de la calificación:


• Hoja de calificación (Original y una copia)
Notas importantes:
• La práctica se debe desarrollar de forma individual.
• Esta práctica se deberá desarrollar utilizando C# con Visual Studio.
• Graphviz es la única herramienta válida para generar los gráficos.
El proceso de obtener tokens, se debe hacer a través de la implementación del autómata
finito determinista desarrollado por el propio estudiante.
• La calificación se realizará ÚNICAMENTE con los archivos que el auxiliar provea en el
momento de la calificación. Estos archivos no podrán ser modificados de ninguna manera.
• La calificación de la práctica será personal y durará como máximo 30 minutos, en un horario
que posteriormente será establecido. Se debe tomar en cuenta que durante la calificación no
podrán estar terceras personas alrededor, de lo contrario no se calificará la práctica.
• No se dará prórroga para la entrega de la práctica.
• Copia parcial o total de la práctica tendrá una nota de 0 puntos, y se notificará a la
escuela de sistemas para que se apliquen las sanciones correspondientes.
• En el caso de no cumplir con alguna de las indicaciones antes mencionadas, NO se
calificará el proyecto; por lo cual, se tendrá una nota de cero puntos.

Fecha de entrega: 22 de Agosto de 2018


Anexos
o Sitio oficial de Graphviz: http://www.graphviz.org/

o Al presente enunciado se adjunta el código de graphviz con el que se generó el gráfico


que se muestra en los ejemplos.