Vous êtes sur la page 1sur 8

Universidad de San Carlos de Guatemala Facultad de Ingeniera Escuela de Ciencias y Sistemas Organizacin de Lenguajes y Compiladores 2 Segundo Semestre 2011

Compilador con opcin a Interprete


Objetivos
Generales Que el estudiante aplique los conceptos para la construccin de un compilador sencillo. Que el estudiante tenga claros los conceptos de la utilizacin e implementacin de un debugger para un lenguaje sencillo. Especficos Que el estudiante comprenda la utilidad de estructuras de datos, en este caso un rbol de sintaxis abstracta, as como una tabla de smbolos primitiva, para asistir al proceso de anlisis semntico. Que el estudiante se familiarice con otras herramientas de anlisis lxico y sintctico como lo son Jlex y Cup, y su utilizacin con el lenguaje Java.

Descripcin General
Consiste en la realizacin de un compilador, con la capacidad de funcionar solo como interprete, debe generar objetos ejecutables, y sobre estos, poder ejecutar sus acciones, adems de poder aplicar procesos de depuracin debug.

Especificaciones de la Prctica
Compilador: Este se encarga de leer el cdigo fuente (Archivo ASCII con extensin *.src), y desde este tendr opcin de ejecutar el cdigo ledo inmediatamente, depurarlo o generar un archivo objeto, legible nicamente por este mismo compilador. Para ejecutar el compilador se deber hacer de la siguiente manera: usuario@$ ./objeto <Parmetros> Dnde: Objeto: archivo ejecutable (*.obj) <Parmetros>: puede ser uno de los siguientes parmetros.

Parmetros del Compilador Todo lo delimitado por < > es obligatorio, y lo delimitado por [ ] es de carcter opcional. compilar </direccin del archivo/fuente.src> Compila el archivo fuente especificado por </direccin del archivo/fuente.src> ejecutar [-d] </direccin del archivo/objeto.obj> Ejecuta un archivo objeto. Opciones: -d: si se especifica esta opcin, la lectura se har en modo debug, e inmediatamente abrir la consola de debug. interpretar </direccin del archivo/fuente.src> Ejecuta directamente el archivo fuente, sin generar archivo objeto. El Debugger: El objetivo de este es proveer una manera de ejecucin paso a paso, que permita ver en tiempo de ejecucin las variables y sus cambios. Se acceder al debugger con la opcin: ejecutar [-d]</direccin del archivo/objeto.obj> Esta inmediatamente abrir un sub-interprete que podr reconocer los siguientes comandos. Comandos del debugger Todo lo delimitado por < > es obligatorio, y lo delimitado por [ ] es de carcter opcional. set breakpoint <no_linea>; Asigna un breakpoint (punto de ruptura) en la lnea especificada, de tal manera que la ejecucin se detendr cuando se ejecute la instruccin que exista en dicha lnea. del breakpoint <no_linea>; Elimina cualquier breakpoint (punto de ruptura) que se haya ingresado para el nmero de lnea dado. print <identificador>; Permitir la impresin de la variable especificada (identificador) que se encuentre en el mbito actual de ejecucin (no se podrn ver variables fuera del mbito actual, por ejemplo, las declaradas afuera).

run [entero]; Ejecutar hasta encontrar el prximo breakpoint, o hasta la lnea especificada, si se ingres alguna. step; Ejecutar instruccin por instruccin. stop; Detiene la ejecucin y se sale del programa. Al ejecutar los comandos se deber poder ver en la salida de la consola el resultado de la operacin para los comandos que tengan salida a pantalla. Por ejemplo: > print miVariable [debugger] miVariable, valor=0 > set breakpoint 58 [debugger] Se estableci marcador en la lnea 58 > run [debugger] Ejecutando hasta el breakpoint ms cercano > step [debugger] Cdigo en lnea actual: a=a+1;

Nota: Al ejecutar los comandos del debugger, se deber mostrar en consola solamente mensajes de estatus de los comandos en s, los errores de compilacin y otros mensajes referentes al parseo tendran que ir al archivo de errores. Cdigo Fuente Se propone un lenguaje con las siguientes caractersticas, el lenguaje no deber ser dbilmente tipificado, como una variante de JavaScript.

Construccin del Lenguaje


Notacin A continuacin se encontrara cierta notacin para definir la sintaxis del lenguaje, todo lo delimitado por < > es obligatorio, todo lo delimitado por [ ] es optativo.

Literales Tipos Enteros: Cualquier nmero entero. 12 155546 -15 0 Tipos Cadena: Cualquier cadena de caracteres que este delimitada por comillas dobles. a hola mundo Tipos Booleanos: Cualquiera que contenga alguno de siguientes valores: true/false. Comentarios Todo aquel texto que este delimitado entre /* */ para comentarios multilinea. Todo texto que inicie con // para comentarios de una sola lnea //comentario de una lnea /*Comentario multilinea*/ Operadores Suma o Concatenacin (+): Indica que si todos los operandos son enteros, se deber realizar la operacin de suma, si todos los operadores son booleanos implicara OR binario, y si todos o algunos son de tipo cadena, esto implicara concatenacin. Diferencia (-): Esta es vlida solamente entre Enteros. Multiplicacin (*): Si ambos operandos son enteros, el resultado se multiplica, si ambos son booleanos, se aplica AND binario. Esta operacin no es permitida entre cadenas. Operadores de comparacin: Puede ser <, >, <=, ==, >, >=. Operadores Booleanos: AND Lgico && y OR Lgico ||. (true && false) || false Expresiones Puede ser toda aquella combinacin de operaciones descritas anteriormente. Por ejemplo: ((a+b)>5 && (b+2)==3)

Declaraciones: Variables Se usara la palabra reservada var para declarar una variable, seguido del tipo de la variable. La sintaxis es la siguiente: var <tipo> <identificador>; Dnde: <tipo> es el tipo de la variable: int: entero string: cadena bool: booleana <identificador> es el nombre de la variable. Arreglos Se podrn declarar arreglos de longitudes fijas de la siguiente manera. var <tipo> <identificador>[<longitud>]; //indica un arreglo de 10 valores. Se accedera a los valores del arreglo desde el elemento 0 hasta el elemento n-1, ejemplo: a[0] = x; var int i = a[0]; var int j = a[9]; Asignacin de Variables (=) La sintaxis es la siguiente var <tipo> <identificador> = <expresin>; //para variables nuevas <identificador> = <expresin>; //para variables ya declaradas Ejemplo: var string variable1 = cadena; var int variable2 = 2; var string variable3 = variable1 + variable2; //en este caso como uno de los operadores es de tipo cadena, //el resultado almacenado en la cadena 3 debera ser cadena2

Bifurcaciones Se usara la sentencia if else para las condiciones. Sintaxis If (<condicin>){ [cuerpo_if] } [else{ [cuerpo_else] }] Seleccin Se usara la sentencia switch case 1, case 2 case n, default; Sintaxis: switch(<identificador>){ case <expresin 1>: [Cuerpo] break; case <expresin 2>: [Cuerpo] break; [default . . [cuerpo por defecto] ]} Ciclos For: El ciclo for tendr la siguiente sinxtaxis: for (<asignacin inicial/identificador>; <condicin de detencin>; [asignacin de cambio]){ [Cuerpo] } While: El ciclo while tendr la siguiente sintaxis: while (<condicin>){ [Cuerpo] } Nota: Todas las instrucciones anteriores (if, switch, for, while) podrn anidarse.

Funciones Predefinidas leer(); Permite leer desde la entrada estndar (teclado) Ejemplo: var int a = leer(); escribir(<expresin>); Escribe en pantalla un valor o una expresin. Ejemplo: escribir(a); //escribe el valor de la variable a en pantalla escribir(1+2*10); //escribe en pantalla 21 salir(); Detiene la ejecucin del programa cargado. Ejemplo: salir(); Nota: El lenguaje ser Case Sensitive.

Archivo Objeto:
Consiste en la serializacion de cualquier representacin intermedia que se desee utilizar, generada por el compilador anteriormente descrito, la cual permitir generar un cdigo portable que pueda ser ejecutado otra vez sin necesidad de compilar nuevamente el cdigo.

El Archivo de Errores:
Deber ser un archivo en formato XHTML estndar, en donde se muestre en una tabla, el da y la hora de la ejecucin, el tipo de error, la lnea, la columna y el mensaje de error de manera explicita.

Consideraciones: S.O. a utilizar libre. La prctica deber entregarse en CD, bien identificado, con dos carpetas, una con el cdigo fuente, y otra con el ejecutable. Si el CD no est en el formato anteriormente descrito, se penalizara con un 10% de la nota obtenida. Cuando se compila la aplicacin debe tener recuperacin de errores, para poder ver la mayor cantidad de errores en el archivo de entrada, en la opcin de Interpretar el programa no contara con recuperacin de errores. Datos importantes: La calificacin de la prctica es personal y deber realizarse el da acordado para su respectiva entrega y calificacin. La aplicacin de conocimientos correspondientes a cursos de semestres anteriores o el actual, es indispensable para realizar una parte o la totalidad de la prctica. Si existe alguna duda al respecto, se puede dirigir a los auxiliares a quienes les pueden preguntar acerca de sus dudas. Copias en cualquiera de las actividades tericas o practicas tendrn una nota de 0 puntos y sern reportados al catedrtico titular de su seccin y a la Escuela de Ciencias y Sistemas para su respectiva sancin.

Se debern utilizar los lenguajes y herramientas indicados, en caso contrario se tendr una nota de 0 puntos. Copias de gramticas y cdigo, totales o parciales tendrn 0 y sern reportados con el catedrtico de su seccin y a la Escuela de Ciencias y Sistemas. Cdigo bajado de internet tendrn 0. Gramtica bajada de internet tendrn 0. Herramientas a Utilizar: Generador de Analizadores: JLex y Cup. Lenguaje: Java. IDE: Netbeans, JCreator, Notepad. (este queda a discrecin del estudiante). Entregables: Aplicacin Ejecutable. Cdigo Fuente. Fecha de Entrega: viernes 12 de agosto, en el horario del laboratorio. No hay prorroga. La entrega ser presencial. Fecha, lugar y hora de calificacin sern acordados con sus auxiliares.

Vous aimerez peut-être aussi