Está en la página 1de 8

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS LENGUAJES FORMALES Y DE PROGRAMACION Segundo Semestre 2014 Ing. William Estuardo Escobar Argueta Aux. Carlos Abraham Yoque Rodríguez

1.

OBJETIVO

Proyecto #1

Aux. Carlos Abraham Yoque Rodríguez 1. OBJETIVO Proyecto #1 Hacer que el estudiante pueda desarrollar y

Hacer que el estudiante pueda desarrollar y practicar sus conocimientos en teoría de autómatas y pueda aplicar los métodos de implementación de analizadores lexicográficos, sintácticos y semánticos.

2.

DESCRIPCION

La práctica consiste en realizar un evaluador expresiones matemáticas y expresiones regulares, realizando para esto un scanner. Las expresiones como la evaluación de estas y sus resultados son leídos de un archivo de texto con extensión .graficlfp. El archivo debe tener el siguiente formato

(se hará diferencia entre mayúsculas y minúsculas) y sin importar el orden en el que vengan los bloques.

2.1. Estructura Básica

<INICIO DE PROGRAMA> nombre <<DECLARACIONES>>

{

Declaración de variables y expresiones regulares

}

<<DEFINICIONES>>

{

Definición de variables y expresiones regulares

}

<<RESULTADOS>>

{

Escritura de Resultados.

}

<FIN EVALUADOR>

2.2. Declaraciones:

En este bloque del evaluador se declararán las variables a las que se les asignará el resultado de evaluar una expresión matemática o expresión regular. Las variables son representadas por identificadores (un identificador comienza con una letra cualquiera y es seguido de letras o dígitos). Pueden ser de tipo ENTERO o CARÁCTER para las expresiones matemáticas de tipo ER para las expresiones regulares. Opcionalmente las variables pueden tener definido un rango de valores Validos que pueden tomar. Solamente esos valores pueden recibir, de lo contrario

dará un error. Si la variable es entera el rango se define con los números separados

por dos puntos (

ASCII del carácter colocado con la instrucción chr(código).

Si la variable es de tipo carácter el rango se define con el código

).

Ejemplo:

A: Entero [1 10]; Valor1 : Caracter [chr (65) chr(71)]; Alto: Entero;

S:Caracter;

B,A,C:ER;

2.3 Definiciones:

Las expresiones se definen por una variable seguido del operador de asignación (==) seguido por las expresiones que están formadas por variables, valores enteros, constantes, operadores y paréntesis de agrupación.

Los operadores para expresiones de tipo entero son suma o + y resta o (Nota: SI se tomará en cuenta la precedencia de operadores). Para el caso de las expresiones regulares se utilizarán los operadores de agrupación (), el operador O ( | ), la concatenación se hará implícita esto quiere decir que no es necesario el operador punto (.), el * para denotar los ciclos, para el caso de los épsilon se utilizará la letra E mayúscula.

Ejemplo:

* Expresiones matemáticas Alto== 4+4;

o

Alto== suma (4,4); Peso== (4+4)-8;

o

Peso== resta(suma(4,4),8);

Peso==Alto+4

o

Peso==suma(Alto,4)

* Expresiones regulares

A==0|1

B==(00|11)*

C==( (ab|cd|ef)* | (00|11|E) )

* Caracteres

Los operadores para expresiones de tipo carácter son:

* \\\ concatena dos strings.

'abc' \\\ 'def' 'abcdef';

* ||| Agrega el primer string al final del segundo y los pone en mayúsculas. 'abc' ||| 'def''DEFABC';

* /// Concatena los string y los pone en mayúsculas. 'abc' /// 'def' 'ABCDEF';

2.4 Resultados:

Los resultados de las expresiones asignados a las variables serán escritos mediante la instrucción:

Escribir(variable1, variable2,…

variable2,…

parte de resultados, para el caso de las expresiones matemáticas.

variablen)

o Escribir(“texto” + variable1,

variablen).

Esta puede aparecer cualquier número de veces en la

Graph(variable tipo ER) . Esta puede aparecer cualquier número de veces en la parte de resultados, para el caso de las expresiones regulares.

Ejemplo RESULTADOS Escribir (“El valor del alto es:” + Alto); Escribir (Alto, Peso); Escribir (Peso); Graph(A); Graph(B); Graph(C);

2.5. Comentarios: Dentro de cualquier parte del archivo de entrada se pueden colocar comentarios que pueden ser:

Multi- línea:

/# Este es un Comentario de varias líneas #/

2.6.

Ejemplo de Archivo de entrada:

<EVALUADOR> Primer Proyecto /# Comienza la declaración de variables #/

<<DECLARACIONES>>

{

A: Entero [1

10];

/#variable entera con rango de valores#/

Valor1 : Carácter [chr (65) chr(71)]; Alto: Entero;

B,C:ER;

}

<<DEFINICIONES>> /#Expresiones a ser evaluadas #/

{

A

== 3 + (9x87) 12;

Valor1= = abc||| xyz;

Alto == multiplicación(A , 23);

B==0|1|E;

C==(ab|01)F*;

}

<<RESULTADOS>>

{

Escribir (A); Escribir (Los valores de alto y de carácter son: Alto, Valor1);

Graph(B);

Graph(C);

}

<FIN EVALUADOR>

3. Funcionalidad Básica que debe poseer la aplicación La aplicación debe poseer como mínimo lo siguiente:

3.1. Área de edición: permite editar un archivo nuevo o ya existente.

3.2. Abrir: Muestra una ventana de selección de archivos donde solo se

mostraran los que tengan extensión. graficlfp para abrirlos.

3.3. Guardar: Permite guardar los cambios del archivo actual que se encuentra

abierto.

3.4. Guardar como: Muestra una ventana para seleccionar la ubicación en la

cual se guardara el nuevo archivo, utilizando filtros que muestren únicamente los archivos con extensión. graficlfp

3.5. Copiar, Pegar, Cortar: permitirán realizar las opciones de copiar, pegar y

cortar de forma parcial o total el contenido del área de edición.

3.6. Mostrar: Deberá dar las opciones para que se pueda mostrar los reportes

y resultados de los distintos análisis.

4. Funcionalidad Específica Al comienzo de la aplicación y antes de realizar cualquier acción de análisis se deberá preguntar al usuario la ubicación y nombre de la carpeta donde se almacenarán los resultados del análisis, luego de eso se deberá crear la carpeta si no existiera.

Archivo de Salida Consiste en la entrega de la aplicación realizando análisis lexicográfico, el cual deberá generar un archivo de salida con extensión html el cual contendrá la tabla de símbolos correspondiente al escaneo del archivo de entrada, la estructura de la tabla de símbolos deberá ser de la siguiente forma:

de la tabla de símbolos deberá ser de la siguiente forma: Ejemplo: Archivo de Errores En

Ejemplo:

de símbolos deberá ser de la siguiente forma: Ejemplo: Archivo de Errores En el caso que

Archivo de Errores En el caso que existieran errores léxicos se deberá generar una tabla de errores en una página en formato html cuyo nombre será ERR, la estructura de la tabla de errores deberá ser:

NOTA: La aplicación deberá contar con un espacio donde se podrá ver el número de

NOTA: La aplicación deberá contar con un espacio donde se podrá ver el número de fila y columna del puntero.

se podrá ver el número de fila y columna del puntero. NOTA: Si existen ERRORES NO

NOTA:

Si existen ERRORES NO se genera el html de errores y viceversa.

ENTREGABLES:

La segunda fase consiste en la entrega de la aplicación completamente funcional, realizando análisis lexicográfico, sintáctico y semántico, el cual deberá generar un archivo de salida con extensión .resultlfp el cual contendrá todos los resultados de las distintas operaciones. Asi como generar los archivos .JPG, GIF, .BMP, o cualquier otra extensión de archivos de imagen que contendrán las expresiones regulares mediante el método del árbol. Todos los archivos deberán de guardarse en la carpeta creada al iniciar la aplicación.

Ejemplo:

En el archivo con la extensión .resultlfp la salida sería la siguiente (de acuerdo al ejemplo de archivo de entrada):

774

Los valores de alto y de carácter son: 17802, XYZABC En los archivos de imagen la salida sería la siguiente (de acuerdo al ejemplo de archivo de entrada):

En el caso de la variable B (B==0|1|E)

la salida sería la siguiente (de acuerdo al ejemplo de archivo de entrada): En el caso

En el caso de C (C==(ab|01)F*)

En el caso de C (C==(ab|01)F*) Para la entrega de la segunda fase se deberá entregar

Para la entrega de la segunda fase se deberá entregar lo siguiente:

Manual Técnico.

Manual de Usuario.

Árbol de análisis sintáctico

Autómata Finito.

Gramática.

Tabla de símbolos.

Aplicación Funcional en su totalidad.

NOTAS:

Presentar sus respectivos informes de errores léxicos y sintácticos en formato HTML.

El diseño de las tablas queda a discreción del usuario media vez se presenten los datos solicitados.

Todos los archivos generados .graficlfp, .resultlfp .jpg,.png etc deberán de guardarse en la carpeta creada al iniciar la aplicación de lo contrario habrá sanción de nota.

CONSIDERACIONES GENERALES A TOMAR EN CUENTA:

El lenguaje en el que se desarrollara la aplicación es JAVA usando Netbeans (si se usa otro IDE o lenguaje la nota será de 0). El sistema Operativo es libre.

Se deberá utilizar graphviz para la realización de los árboles.

Se tomara en cuenta el uso de filtros para abrir y guardar archivos con extensión valida.

No se permite el uso de librerías, clase o método que hagan el trabajo.

El parser y scanner deberán ser realizados por el estudiante

Fecha de entrega:

Fase Jueves 11 de Septiembre 2014

La hora y lugar de entrega será definida por el auxiliar

FORMA DE CALIFICACIÓN:

Presencial y conforme entregaron la práctica, si el estudiante no se encuentra

cuando se le llame este pasara al último, y si por alguna razón se le vuelve a llamar por segunda ocasión y no estuviese ya no se le calificará.

FORMA DE ENTREGABLES:

Se deberá de entregar en un CD, En una carpeta llamada Código, todas las clases que se utilicen para el correcto funcionamiento de la práctica, en otra carpeta llamada Ejecutable se encontrara el ejecutable (jar) y cualquier archivo que sea necesario para su funcionamiento de no cumplirse esta condición se tendrá una sanción en la nota obtenida.

IMPORTANTE

El proyecto 1 se entrega en la fecha indicada, se tomara en cuenta que la puntualidad en la entrega afectara la nota, así también como queda a discreción del auxiliar el recibir algo fuera del tiempo estipulado.

Se deberá realizar de forma individual.

Cualquier Copia, será sancionada con la perdida automática del Laboratorio y la sanción correspondiente por parte de la escuela de Sistemas.

Si se usa alguna librería se le sancionara con el 50% de la nota obtenida.

Si alguna persona no puede llegar a calificación, debe informar con anticipación tanto al auxiliar como al ingeniero indicando el motivo de su falta, el ingeniero determinara si puede o no realizarse la calificación y bajo qué términos se hará si esto se realiza.

Si se llegara a incumplir cualquiera de las normativas se tendrá una sanción en la nota.