Centro Regional de Cuilapa Primer semestre 2014 Curso: Compiladores Quinto Ciclo Catedrtico: Ing. Julio Escobar Seccin A
P PR RO OY YE EC CT TO O D DE EL L C CU UR RS SO O ( (C Co om mp pi il la ad do or r y y T Tr ra ad du uc ct to or r a a J Ja av va a) )
1. OBJETIVOS DEL PROYECTO
1.1 Objetivo General Qu el estudiante lleve a la prctica el conocimiento de la teora de compiladores, a travs de un proyecto de aplicacin.
1.2 Objetivos Especficos Comprender las 3 fases bsicas del proceso de compilacin (anlisis lxico, sintctico y semntico). Elaboracin detallada y documentacin de las fases de compilacin de un lenguaje especfico. Creacin e implementacin de las gramticas para el reconocimiento del lenguaje del proyecto.
2. DESCRIPCIN DEL PROYECTO
El proyecto consiste en disear y programar un compilador con sus tres fases, que analice el cdigo fuente del lenguaje descrito en la seccin 3, el cual tiene como base XML, para poder ejecutar las instrucciones que all se solicitan, adems de traducir el cdigo a lenguaje Java.
El compilador deber programarse en lenguaje Java, con IDE a discrecin, previamente avalado por el catedrtico (no se aceptar ningn otro lenguaje). Incluir como presentacin un editor de texto que permitir cargar el archivo de entrada (con extensin XML). Luego proceder a analizar el cdigo fuente, validando la sintaxis del mismo y obteniendo como salida lo especificado en la siguiente seccin:
3. DESCRIPCIN DE SALIDAS DEL COMPILADOR
Descripcin de errores de cada fase (en una pantalla adicional a la del editor de texto). La descripcin de cada error debe ser lo ms especfica posible, indicando lnea del error, columna del error y tipo de error.
Salida a pantalla que el lenguaje arroje ( a travs de una ventana adicional a la del editor). Esto es, si el lenguaje requiere una impresin a pantalla, entonces sta ventana tendr dicha impresin.
Resumen de tabla de smbolos del compilador. (en una ventana adicional a la del editor). En este caso, se pedir que se resuma en pantalla no solamente cada variable que se detecte sino tambin agrupadas en sus clases y mtodos. Ejemplo:
CLASE: primera DEFINICION:
PARTE NOMBRE TIPO PARAMETRO 1 PARAMETRO 2 PARAMETRO 3 VARIABLE var1 entero VARIABLE var2 entero VARIABLE var3 cadena METODO iniciar void a: entero b: entero c: cadena METODO imprime void mensaje: cadena METODO sumar entero a: entero b: entero
CLASE: prueba (clase principal) DEFINICION:
PARTE NOMBRE TIPO PARAMETRO 1 PARAMETRO 2 PARAMETRO 3 METODO main void a: Cadenas
Tambin deber incluir los objetos que se creen, cada objeto es una instancia de una clase, y por lo tanto es una variable de una clase:
OBJETO: p1
PARTE NOMBRE TIPO VALOR VARIABLE var1 entero 0 VARIABLE var2 entero 0 VARIABLE var3 cadena 'Hola'
OBJETO: s1
PARTE NOMBRE TIPO VALOR VARIABLE var1 entero 0 VARIABLE var2 entero 0 VARIABLE var3 cadena 'Hola'
Traduccin a Java (si la compilacin es exitosa), y su respectiva corrida en Java. Para esto debe generar el cdigo Java, en un archivo con extensin .java, debe compilarlo con el JDK, para generar el archivo .class y correrlo desde la aplicacin, para generar la salida a pantalla respectiva.
En el Manual Tcnico se deben de describir los posibles errores que pueden ocurrir al analizar el archivo, pues en base a stos se tomar en cuenta la nota de la recuperacin de errores.
4. DESCRIPCIN DEL LENGUAJE
Bsicamente el lenguaje utiliza el XML para expresar instrucciones de Creacin de lenguaje Java, pero en espaol sencillo y entendible, adems de adicionar comentarios en Java que permitirn entender qu hace cada instruccin. El XML permitir segmentar las secciones de declaraciones, clases, mtodos, parmetros, etc. Las caractersticas que se implementarn sern las siguientes:
El lenguaje permitir diferenciar las minsculas y las maysculas (es case sensitive). Solamente las palabras reservadas no se les debe hacer distincin entre maysculas y minsculas. Es un lenguaje que permite, parcialmente, formato libre, por lo que se admiten espacios y tabuladores en cualquier parte del cdigo. No tiene comentarios. Las palabras clave que tiene el lenguaje son reservadas (Ejemplo: PROGRAMA, CLASE, NOMBRE, VARIABLES, TIPO, METODOS, DEFINICION, PARAMETROS, CUERPO, ASIGNACIN, RECIBE, IMPRIMIR, IMPRIMIRFL, RETORNAR, PRINCIPAL, LLAMAR, METODO). El lenguaje se entiende como un lenguaje que definir etiquetas, que encapsularn definiciones, contenidos, operaciones, etc., y permitir por ste medio, crear clases de programacin de un lenguaje orientado a objetos, y cada clase podr tener lo siguiente: Nombre de la Clase <NOMBRE>nombre</NOMBRE> Declaracin de Variables <VARIABLES></VARIABLES> Declaracin de Mtodos <METODOS></METODOS> Cada Variable tendr una etiqueta para su Tipo y para su Nombre. Cada Variable tendr una etiqueta para su definicin, que incluir Tipo, nombre y parmetros y otra para su cuerpo, que incluir variables, sentencias de asignacin, de impresin y de retorno.
Las sentencias anteriores slo pueden aparecer en las secciones que a continuacin se describen, todo encerrado entre las etiquetas <PROGRAMA></PROGRAMA>
4. SECCION DE CLASE
Tendr 3 etiquetas principales: NOMBRE: no contendr ninguna etiqueta interior. VARIABLES: Puede contener las etiquetas siguientes, para cada variable definida: NOMBRE: contendr el nombre de la variable. Los nombres cumplirn con los requerimientos de Java para especificar un identificador. TIPO: contendr el tipo, que para efectos prcticos, solamente podr ser entero y cadena. METODOS: Puede contener las etiquetas siguientes, para cada mtodo definido: DEFINICIN: Tendr las siguientes etiquetas: NOMBRE: contendr el nombre del mtodo. Los nombres cumplirn con los requerimientos de Java para especificar un identificador. TIPO: contendr el tipo, que para efectos prcticos, solamente podr ser entero y void (el void es un tipo sin retorno). PARAMETROS: Se definirn uno luego del otro, cada uno constar de: NOMBRE: como el nombre de una variable. TIPO: igual al tipo de una variable. VARIABLES: Se podr definir variables como en la clase, y exactamente con las mismas etiquetas de: NOMBRE: contendr el nombre de la variable. Los nombres cumplirn con los requerimientos de Java para especificar un identificador. TIPO: contendr el tipo, que para efectos prcticos, solamente podr ser entero y cadena. CUERPO: Esta es quiz la seccin ms importante, y contendr las sentencias propias de operaciones del lenguaje, que manipularn las variables o parmetros del mtodo, puede tenerlas todas o slo algunas, pero al menos una de las siguientes: ASIGNACIN: Permitir asignar un valor puntual, de variable o de operacin a una variable, la sintaxis se ver en el ejemplo de la seccin 9. IMPRESIN: Habr dos tipos, una impresin sin fin de linea <IMPRIMIR>, y una impresin con fin de lnea <IMPRIMIRFL> RETORNAR: Si el tipo del mtodo es entero, entonces deber existir una etiqueta de < RETORNAR > para devolver el valor del mtodo.
4.1 OPERACIONES DE LA ETIQUETA ASIGNACIN
Para efectos de simplicidad nicamente se podr tener, en primer lugar, la asignacin directa de variables y valores puntuales, ejemplo:
Cadena = Variable Cadena Cadena = Valor de Cadena Entero = Variable Entera Entero = Valor Entero
* El contenido de las variables tipo Cadena, deben ir siempre entre comilla simple ().
Tambin se podr tener operaciones de suma, resta, multiplicacin y divisin, ejemplo:
Estas instrucciones se trasladaran a Java de la siguiente forma:
C=a + b; //Asignacion de valor c=a b; //Asignacion de valor c=a * 3; //Asignacion de valor c=a / b; //Asignacion de valor c=a ^ b; //Asignacion de valor
4.2 OPERACIONES DE ESCRITURA A PANTALLA Las etiquetas de escritura a pantalla pueden tener ms de un valor que imprimir:
<IMPRIMIR>'La suma es', c</IMPRIMIR>
Esta instruccin se trasladara a Java de la siguiente forma:
System.out.print(La suma es , c); //Impresion a Pantalla
4.2 INDICACIN DE PARMETROS EN LLAMADA A UN MTODO DE OBJETO:
Esta instruccin se trasladara a Java de la siguiente forma:
c = s1.sumar(5,5); //LLAMADA METODO
5. APLICACIN El editor de texto debe contener las opciones siguientes:
Men ARCHIVO Este contiene las opciones de: Abrir para Editar Guardar Salir
Men ANLISIS Este contiene las opciones de: Analizar Archivo Deber desplegar las 3 ventanas siguientes: 1.) Salida del Programa. 2.) Tabla de Smbolos (Estado Final). 3.) Mostrar el archivo de Errores Generado. . 4.) Mostrar la traduccin a cdigo de Java. 5.) Mostrar la ejecucin del cdigo de Java traducido.
6. LENGUAJE A UTILIZAR
El lenguaje utilizado para el desarrollo de este proyecto es el lenguaje Java. NO se aceptar ningn otro que no sea el definido. No se permite utilizar libreras especiales para manejo de XML, debe analizarse smbolo a smbolo. Cualquier consideracin especial primero debe consultarse con el catedrtico.
7. DOCUMENTACIN DEL PROYECTO Toda la documentacin del proyecto debe ser proporcionada en archivos .PDF en el disco donde se encuentren los programas fuentes del compilador, e IMPRESA. Cartula Introduccin. Objetivos. Conclusiones del proyecto y del lenguaje utilizado
7.1. Manual del Usuario Requerimientos de Hardware y Software de la aplicacin. Funcionamiento bien detallado de la aplicacin con un ejemplo, paso a paso de cmo utilizar el programa y cada opcin del mismo. Descripcin de los errores que puede arrojar el programa. Descripcin de las salidas que el programa tendr.
7.2. Manual Tcnico Descripcin detallada de las funciones y procedimientos. Descripcin de la elaboracin de AFD para palabras del lenguaje y gramticas para sintaxis del lenguaje. Cronograma de actividades (En Project). Documentacin interna del cdigo fuente. Lista de los posibles errores considerados.
8. FECHA DE ENTREGA Analizador Lxico: Sbado 12 de abril de 2014 Analizador Sintctico y Semntico: Sbado 10 de mayo de 2014
La calificacin es personal, por lo tanto, deben traer mquinas y probar sus proyectos antes de la calificacin. En caso de encontrarse dos o ms proyectos iguales o muy similares se considerarn que son copias y se proceder a la anulacin de los mismos.
public class primera { public int var1; //Declaracin de Variable public int var2; //Declaracin de Variable public String var3; //Declaracin de Variable
public void iniciar (int a, int b, String c) {var1=a; //Asignacion de valor var2=b; //Asignacion de valor var3=c; //Asignacion de valor }//FIN METODO
void imprime(String mensaje) {System.out.println(mensaje); //Impresion a Pantalla } //FIN METODO
int sumar(int a, int b) {int c; //Declaracin de Variable c = a + b; //Asignacion de valor System.out.print(La suma es ); //Impresion a Pantalla System.out.println(c); //Impresion a Pantalla return c; //retorno de valor } //FIN METODO
} //FIN CLASE
public class prueba { public static void main (String a[]) //Metodo Principal {primera p1=new primera(); //CREACION OBJETO primera s1=new primera(); //CREACION OBJETO int c; //Declaracin de Variable p1.iniciar(0,0,Hola); //LLAMADA METODO s1.iniciar(5,5,Hola); //LLAMADA METODO c = s1.sumar(5,5); //LLAMADA METODO s1.imprime(Hola); // LLAMADA METODO