Você está na página 1de 19

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERA ORGANIZACIN DE LENGUAJES Y COMPILADORES 2 SEGUNDO SEMESTRE 2012

Proyecto 1
Objetivos:
Objetivo General
Aplicar conceptos generales de compiladores en una aplicacin prctica.

Objetivos especficos
Reafirmar los conceptos bsicos de Compiladores. Hacer uso de la biblioteca log4j para logging de errores. Construir una aplicacin que tenga como objetivo el aprendizaje de conceptos bsicos de programacin orientada a los nios.

Definicin del problema


La universidad de San Carlos de Guatemala ha decidido realizar un proyecto en el cual, se desea incentivar el aprendizaje de lenguajes de programacin en nios pequeos, por lo cual solicita el desarrollo de un software el cual se basa en Logo un lenguaje parte funcional y parte estructurado de fcil aprendizaje. El software contar con una interfaz, la cual debe ser amigable para el usuario, y de fcil uso, con el objetivo de que los nios no se aburran y se motiven por realizar cada vez funciones ms complejas y se diviertan realizndolas.

Diseo de la Interfaz

Editor: Un rea de editor en la cual se escribirn las instrucciones del lenguaje, o se podr cargar y modificar un archivo con instrucciones previamente realizadas. Lienzo: El rea de lienzo en la cual se realizarn las acciones definidas en el programa, dibujando lo que est indicado. Al momento de ejecutar nuestro cdigo se pueden dar 2 casos que el programa no contenga errores, en cuyo caso se ejecuta y se muestre la imagen en nuestro lienzo y la posicin final de la tortuga, o que se encuentre algn error y nos muestre una ventana que indique que ocurri un error. Para saber en que parte ocurri un error se deber de acceder al archivo de log y verificar las partes del programa donde ocurri el error y de qu tipo es o son los errores, la estructura y comportamiento del archivo de error se describe posteriormente.

Men la aplicacin contar adems con una barra de men en la cual se tendrn como mnimo, las siguientes opciones: o Guardar: permite guardar lo que se encuentra en el rea del editor en un archivo con extensin .logc Guardar como: permite guardar el programa que se encuentra en el rea del editor de texto con un nombre diferente con extensin .logc Abrir: permite abrir un archivo .logc y cargarlo en rea del editor. Ejecutar: esta opcin permitir ejecutar el programa que se encuentra en el rea del editor, realizando las instrucciones que estn codificadas. Abrir rbol: esta opcin nos permite ver el rbol sintctico, generado por la herramienta graphviz.

Barra de herramientas: Adems de esto se tendr una barra de herramientas en la cual se contar con botones para un acceso ms rpido y cmodo a las opciones del men.

Inspector: La interfaz deber desplegar una ventana donde indique las variables conforme se van ejecutando, as como su tipo y su valor. Piscina de opciones: Adems de esto la aplicacin debe contar con un rea donde se muestre un ejemplo de las funciones disponibles en la aplicacin, la finalidad de esta rea es que los nios puedan tomar este cdigo y copiarlo en su programa, remplazando nicamente por las variables y operadores que necesiten.

Ejemplo piscina de opciones Drag and Drop: La aplicacin deber contar con la opcin de disear el programa de forma completamente grfica, en esta opcin se cambiar el editor por un lienzo al cual se arrastrarn las figuras, y la piscina de opciones mostrar iconos que representen las funciones disponibles, como se muestra en la figura. NOTA: al cambiar de modo grfico a modo texto y viceversa el programa debe mantenerse, del mismo modo debe ser posible guardar y abrir archivos en ambos modos, los archivos guardados se almacenan en modo texto, as mismo debe tomarse en cuenta que en la opcin grfica se pueden generar proyectos con todas las funcionalidades de los tres lenguajes, por lo que se deber generar los respectivos archivos de texto y llamadas a funciones.

Figura que representa los comandos avanzar, repetir y si Seleccin de pincel: La aplicacin debe dar la opcin de elegir entre distintos pinceles, que deben ser atractivos para nios pequeos, debe poder seleccionar entre un mnimo de cuatro pinceles.

Definicin lenguaje
Se realizaran 3 lenguajes los cuales se relacionaran entre s para poder llevar el flujo del programa, estos lenguajes tienen limitaciones cada uno y necesitan de los otros para poderse complementar y realizar operaciones ms complejas.

Lenguaje P
Para agregar otro documento del mismo proyecto se utilizara la notacin. Esta debe ser al principio del archivo. #!archivo.plog

Funciones del lienzo Para la definicin del tamao del lienzo y su color se utilizarn las siguientes funciones: Tamao: &tamaoLienzo($ x,$ y); Donde x es el largo en pixeles y y el alto en pixeles del lienzo. Para el color se tiene: &coloLienzo($negro); Donde el color del lienzo podr ser negro, blanco, azul, gris, amarillo, rojo, anaranjado o verde. Funciones del pincel Cuando se mueve el pincel se tiene la opcin de que este deje pintado el trazo, este trazo puede cambiar de color, dependiendo de la definicin del usuario, para definir el color se utiliza la siguiente funcin: &colorPincel($negro); Donde el color del pincel podr ser negro, blanco, azul, gris, amarillo, rojo, anaranjado o verde. Tambin es posible cambiar el grosor del pincel con la siguiente funcin: &grosorPincel($grosor); Donde la variable grosor es el tamao en pixeles que tendr de grosor el trazo del pincel. Comentarios Para escribir un comentario es de la siguiente forma: ##esto es un comentario.

Donde se utiliza el smbolo # # y todo lo que siga despus de esa lnea es considerado un comentario. Variables Para escribir variables dentro del programa es de la siguiente forma: $var; $var=100; $var=esto es una cadena; $var=C; $var=10.02; $var=true; $var=false; Una variable debe llevar el smbolo $ seguido del identificador de la variable. Las variables son dbilmente tipificadas, lo que quiere decir que al momento de declarar las variables no se les antepone un tipo, sin embargo al momento de igualar la variable a algn valor esta se vuelve del tipo que se le est asignando y ya no puede cambiar en el resto del programa, es decir si tengo una variable $var=100 no se puede despus aadir el valor $var=Cadena. $var=100; $var=cadena El ejemplo anterior es invlido y debe considerarse un error. $var=100; $var=99; El ejemplo anterior es vlido.

Tipos de variables: Las variables pueden ser: - Int - String - Char - Double - Boolean Operaciones Aritmticas: En caso de los tipos int y double los operadores aceptados son los siguientes: $var= 2+2; $var=2-3; $var=2*2; $var=2/2; $var=2^2;

Donde el operador + es suma, el operador -es resta, el operador * es multiplicacin, el / es divisin y el ^ es potencia. NOTA: Se deben realizar sus respectivas validaciones es decir un int solo puede realizar operaciones con otro int, mientras que un double puede realizar operaciones con un int y un double. En el caso de los tipo String slo es permitido el operador + con el cual se concatena el valor de un String o un char al valor de otro String. Ejemplo: $var=hola +C; El nuevo valor de $var en este caso es holaC. NOTA: NO se puede dar que a un char se le concatene algo ms, eso debe ser marcado como error. Ejemplo: $var=C+D;

Operadores lgicos Para trabajar las variables de tipo boolean se puede utilizar los operadores lgicos, los cuales nos devolvern un valor verdadero o falso, los operadores lgicos aceptados son los siguientes: $var = verdadero and verdadero $var = verdadero or falso $var = not verdadero and Representa al operador AND, en el ejemplo el resultado es verdadero. or Representa al operador OR, en el ejemplo el resultado es verdadero. not Representa al operador NOT, en el ejemplo el resultado es falso.

Operadores de comparacin: Se cuenta adems con operadores de comparacin, los cuales permiten realizar un programa ms complejo y aprender a utilizar las instrucciones de bifurcacin y ciclos, los operadores de comparacin aceptados por el lenguaje son: $var= 10 > 3 $var= 10 <3 $var= 10 ==3 $var= 10 <= 3 $var= 10 >=3 $var= 10 != 3 > mayor que, devuelve verdadero si el operando izquierdo es mayor.

< menor que, devuelve verdadero si el operando derecho es mayor. == igual a, devuelve verdadero si ambos operandos son iguales. <= menor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es menor. >= mayor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es mayor. != devuelve verdadero si los operandos son distintos.

Los operadores de comparacin pueden ser usados tanto en variables como en nmeros, con la respectiva validacin de que la variable sea de tipo numrica. NOTA: Para las variables o valores de tipo String char solo se permiten los operadores de comparacin: != y ==. Ejemplo: $var= C==C; $var= hola!=hola mundo; Funciones y procedimientos Las funciones se declaran de la siguiente manera, donde despus de sub se encuentra el nombre de la funcin y dentro de los parntesis se encuentran los parmetros, tambin se puede dar el caso de que no tenga parmetros, la lista de parmetros puede ser de tamao N, segn se necesite dentro de la funcin: Sub fun1 ($var1,$var2){ $var = C; }

La diferencia entre un procedimiento y una funcin es que este retorna un valor, la sintaxis es similar solo debe agregar la palabra return y la variable o valor a retornar. Sub fun1 ($var1,$var2){ $var = C; return $var; }

Llamada a funciones o procedimientos. Esta se realiza agregando un & al inicio del nombre de la funcin o procedimiento. &fun1($var2,$var3); Sentencias de control Tambin se cuenta con las sentencias de control if dentro del lenguaje la cual nos permitir realizar operaciones ms complejas. La sintaxis de if es como a continuacin:

If ($x==7){ $x=6; } elsif($x>=7){ $x=5; } else{ $x=3; }

Lenguaje L
Funciones de Direccin Para definir la direccin en la que se mover la tortuga se tienen las siguientes funciones: (Direccin grados) (izquierda grados) (derecha grados) Direccin: esta funcin girar a la tortuga desde cero grados hasta llegar a la cantidad de grados indicados, es decir se da el ngulo absoluto. Izquierda y Derecha: estas funciones realizarn un giro relativo de la tortuga, empezando desde la posicin en que se encuentra la tortuga y girando x grados en la direccin que indique la funcin.

Comentarios Para escribir un comentario es de la siguiente forma: ;esto es un comentario. Donde se utiliza el smbolo ; y todo lo que siga despus de esa lnea es considerado un comentario. Variables Para escribir variables de tipo global dentro del programa es de la siguiente forma: defparameter var defparameter var 100 defparameter var esto es una cadena defparameter var C defparameter var 10.02 defparameter var true defparameter var false

Una variable debe llevar en su sintaxis defparameter seguido del identificador de la variable. Las variables son dbilmente tipificadas, lo que quiere decir que al momento de declarar las variables no se les antepone un tipo, sin embargo al momento de igualar la variable a algn valor esta se vuelve del tipo que se le est asignando y ya no puede cambiar en el resto del programa, es decir si se tiene una variable var 100 no se puede despus aadir el valor setf var Cadena. Para agregarle un nuevo valor a una variable se utiliza la sintaxis setf, esto solo aplica en variables globales. setf var 100; setf var cadena El ejemplo anterior es invlido y debe considerarse un error. setf var=100; setf var=99; El ejemplo anterior es vlido. Las variables locales se declaran:

var 100 var esto es una cadena var C var 10.02 var true var false

Las cuales solo se nombran y se les da un valor. Para asignarles un valor no es necesario utilizar el comando setf. Tipos de variables: Las variables pueden ser: - Int - String - Char - Double - Boolean

Operaciones Aritmticas: En caso de los tipos int y double los operadores aceptados son los siguientes: (+ 2 2) (- 3 2) (* 2 2)

(/ 2 2) (^2 2) Donde el operador + es suma, el operador -es resta, el operador * es multiplicacin, el / es divisin y el ^ es potencia. NOTA: Se deben realizar sus respectivas validaciones es decir un int solo puede realizar operaciones con otro int, mientras que un double puede realizar operaciones con un int y un double.

Operadores lgicos Para trabajar las variables de tipo boolean se puede utilizar los operadores lgicos, los cuales nos devolvern un valor verdadero o falso, los operadores lgicos aceptados son los siguientes: var (and verdadero verdadero) var (or verdadero falso) var (not verdadero) And Representa al operador AND, en el ejemplo el resultado es verdadero. Or Representa al operador OR, en el ejemplo el resultado es verdadero. Not Representa al operador NOT, en el ejemplo el resultado es falso.

Operadores de comparacin: Se cuenta adems con operadores de comparacin, los cuales permiten realizar un programa ms complejo y aprender a utilizar las instrucciones de bifurcacin y ciclos, los operadores de comparacin aceptados por el lenguaje son: var (>10 3) var (< 10 3) var (= 5 3) var (<= 3 4) var ( >=3 4) var ( != 3 4) > mayor que, devuelve verdadero si el operando izquierdo es mayor. < menor que, devuelve verdadero si el operando derecho es mayor. = igual a, devuelve verdadero si ambos operandos son iguales. <= menor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es menor. >= mayor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es mayor. != devuelve verdadero si los operandos son distintos.

Los operadores de comparacin pueden ser usados tanto en variables como en nmeros, con la respectiva validacin de que la variable sea de tipo numrica.

NOTA: Para las variables o valores de tipo String char solo se permiten los operadores de comparacin: != y =. Ejemplo: Var (=C C) Var (!= hola hola mundo) Comandos de movimiento Para que se desplace la tortuga por el lienzo se utilizarn los siguientes comandos: (avanzar x) Donde x es un nmero entero, esta funcin desplaza a la tortuga hacia adelante x pixeles. (retroceder x) Donde x es un nmero entero, esta funcin desplaza a la tortuga hacia atrs x pixeles. (Centrar) Mueve a la tortuga al centro del lienzo;

( ir x, y) Desplaza a la tortuga a cualquier posicin dentro del lienzo sin dejar rastro, x se refiere a la posicin desde la izquierda del lienzo y y a la posicin desde arriba del mismo. (irx x) Desplaza a la tortuga sin dejar rastro a la posicin x desde el margen izquierdo del lienzo. Sin modificar su posicin respecto al margen superior del lienzo. (iry y) Desplaza a la tortuga sin dejar rastro a la posicin y desde el margen superior del lienzo. Sin modificar su posicin respecto al margen izquierdo del lienzo. Para saber en qu posicin se encuentra nuestro pincel tenemos los comandos siguientes: (obtener x) (Obtener y) Obtenerx: nos indica el nmero de pixeles desde el margen izquierdo del lienzo hasta la posicin actual del pincel. obtenery nos indica el nmero de pixeles desde el margen superior del lienzo hasta la posicin actual del pincel.

Sentencias de control (if (> a 5) (setf var 5) ) (elseif (< a 5) (set f var 3) ) Definicin de procedimientos El lenguaje L solo tiene procedimientos todas sus operaciones siempre devuelven un valor. La sintaxis de los procedimientos es la siguiente: (defun procedure1 (x ) (setf x 10) ) Llamada de procedimientos Para llamar un procedimiento se hace de la siguiente forma, donde puede tener o no parmetros y su lista de parmetros puede ser N. (proceder1 x)

Lenguaje C
Comentarios Para escribir un comentario es de la siguiente forma: //esto es un comentario. Donde se utiliza el smbolo // todo lo que se encuentra despus del smbolo es un comentario. Variables Para escribir variables de tipo global dentro del programa es de la siguiente forma: int var; int var = 100; String var= esto es una cadena; Char var =C; double var= 10.02 ; boolean var =true;

boolean var =false;

Tipos de variables: Las variables pueden ser: - Int - String - Char - Double - Boolean

Operaciones Aritmticas: En caso de los tipos int y double los operadores aceptados son los siguientes: Var = 2+2; Var= 3-2; Var= 2*2 Var= 2/2; Var=3^2; Donde el operador + es suma, el operador -es resta, el operador * es multiplicacin, el / es divisin y el ^ es potencia. NOTA: Se deben realizar sus respectivas validaciones es decir un int solo puede realizar operaciones con otro int, mientras que un double puede realizar operaciones con un int y un double.

Operadores lgicos Para trabajar las variables de tipo boolean se puede utilizar los operadores lgicos, los cuales nos devolvern un valor verdadero o falso, los operadores lgicos aceptados son los siguientes: var = verdadero && verdadero; Var= verdadero || falso; var = ! verdadero; && Representa al operador AND, en el ejemplo el resultado es verdadero. || Representa al operador OR, en el ejemplo el resultado es verdadero. ! Representa al operador NOT, en el ejemplo el resultado es falso.

Operadores de comparacin: Se cuenta adems con operadores de comparacin, los cuales permiten realizar un programa ms complejo y aprender a utilizar las instrucciones de bifurcacin y ciclos, los operadores de comparacin aceptados por el lenguaje son: var = 10 < 3; var = 3< 10 ; var = 5<= 3; var = 4==4; var 4>=4; Var= 4!= 3 > mayor que, devuelve verdadero si el operando izquierdo es mayor. < menor que, devuelve verdadero si el operando derecho es mayor. = =igual a, devuelve verdadero si ambos operandos son iguales. <= menor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es menor. >= mayor o igual, devuelve verdadero si ambos operandos son iguales o el de la izquierda es mayor. != devuelve verdadero si los operandos son distintos.

Los operadores de comparacin pueden ser usados tanto en variables como en nmeros, con la respectiva validacin de que la variable sea de tipo numrica. NOTA: Para las variables o valores de tipo String char solo se permiten los operadores de comparacin: != y =. Ejemplo: Var =C== C Var =hola!= hola mundo;

Opciones de pincel Nuestro pincel puede estar arriba o abajo esto se indica con los siguientes comandos: levatarPincel(); bajarPincel(); Donde levantarPincel() levanta el pincel, cuando el pincel se encuentra levantado y se desplaza no deja ningn rastro. bajarPincel() es la operacin contraria, bajando el pincel para que al desplazarse el rastro quede pintado.

Opciones de limpiado Para limpiar todo el lienzo se tienen los siguientes comandos: limpiar(); reiniciar(); limpiar() borrar todo rastro pintado, pero dejar el pincel en la posicin y ngulo en la que se encuentra antes de llamar a la funcin. reiniciar() por su parte, borra todo trazo pintado, pero tambin retorna el pincel al centro del lienzo y lo coloca a 90 sobre la horizontal.

Icono Ya que la aplicacin est orientada a nios, se buscar que la misma tenga un atractivo para ellos, utilizando una imagen de una tortuga como en Kturtle, la cual puede ocultarse o mostrarse con los siguientes comandos: mostrarTortuga(); ocultarTortuga(); Mensajes La aplicacin debe ser capaz de mostrar mensajes en pantalla, es decir que al momento de ingresar el comando se desplegar un mensaje, el comando para desplegar mensajes es el siguiente: print (X); Donde x es el mensaje que se desea mostrar; Pedir parmetros Tambin se puede mandar a pedir parmetros al usuario, esto se realizar con el siguiente comando: read(X, var); Donde var es la variable que almacenar la entrada del usuario, y X es un mensaje que se desee mostrar al usuario. Espera Podemos hacer que la tortuga se detenga durante cierta cantidad de segundos, el comando es: esperar(x); Donde x es la cantidad de segundo a esperar.

Sentencias de control Sentencia s: Int x=6; If x > 6 { print(si es mayor); } Verifica que la condicin se cumpla, si se cumple se ejecuta el cdigo en su interior. Tambin se pueden realizar comparaciones ms complejas: Int x =6 if x > 6 { print(si es mayor); } If else (x < 4) && (x>1){ print(si esta entre 4 y 1); } else { print(ninguna de los anteriores); } Bucles Mientras El bucle mientras se ejecuta mientras la condicin sea verdadero. Int x = 1 while (x < 5) { esperar( 1=; x = x + 1; } Repetir El bucle repetir es igual que mientras, solo que este se va ejecutando el nmero de veces que se le indique en la expresin a evaluar: For ( int x=0; x <4; x++) { esperar (1); }

Interrupcin de un bucle Si se encuentra una condicin en que el bucle ya no se deba seguir ejecutando, se puede interrumpir el mismo, para interrumpir un bucle, el comando es el siguiente: Break; Estructuras Se podr crear estructuras personalizadas para apoyar la programacin. La sintaxis es la siguiente: Struct posicion{ Int x; Int y; } Al momento de declarar una variable estructura, se deben crear los campos en memoria. Se podr acceder a los miembros de las estructuras, a travs de la siguiente sintaxis: posicionenx = posicion->x Procedimiento y funciones: Las funciones su sintaxis es como la siguiente: Void funcin(int x){ print(x); } Los procedimientos pueden de ser de cualquier tipo de variables o de alguna estructura, por lo cual siempre devolvern un valor del tipo que estn asignados: Int procedure1(int x){ Return x+3; } Llamada a funciones o procedimientos: Las funciones y procedimientos pueden ser llamados de la siguiente manera: Funcin(); Al ejecutar un proyecto, se deber ejecutar el mtodo main (flujo principal), El cual solo pertenece al lenguaje C. Sin embargo las funciones que se llaman pueden estar escritas en cualquiera de los otros dos lenguajes.

Anlisis de cdigo
Al momento de analizar un proyecto, si este no contiene errores se deber crear un archivo el cual mostrar un anlisis del cdigo que se ha ejecutado, con la finalidad de medir el aprendizaje y en cuanto a optimizar el cdigo que generaron los nios, la informacin que debe colocarse en este archivo es: - Nmero de variables globales - Nombre de cada mtodo con el nmero de parmetros, variables declaradas e instrucciones - Nmero de sentencias en el flujo principal Tambin podrn analizarse dos en los cuales el reporte deber contener (adems los elementos anteriores): - Nmero de variables con el mismo nombre - Nmero de mtodos que tienen el mismo nmero de instrucciones - Estructuras definidas con el mismo nmero de campos

Panel de control
Una vez analizado un proyecto, se deber generar un panel con la informacin (variables globales y procedimientos) de cada archivo, al darse doble clic en alguno de los elementos se deber mostrar un cuadro de dilogo para editarlo, en caso de editar el nombre de algn elemento, deber ser reemplazado el antiguo nombre, por el nuevo nombre en TODOS los archivos donde se referencie el objeto. Como el siguiente:

Errores
Para el manejo de errores se har uso de la librera log4j de apache en la cual indicaremos como nivel INFO cada uno de los errores, indicando si estos son de tipo lxico, sintctico o semntico, en que parte del cdigo fue que se encontr el error, y en caso de ser sintctico o semntico cual era el valor que se esperaba. Se debe realizar todo esto en un archivo y se debe borrar el contenido de este archivo cada vez que se pulse la opcin ejecutar en la interfaz grfica, de modo que solamente se muestren los errores de la ltima ejecucin.

Entregables
Se deber entregar un disco compacto identificado el da acordado, en el mismo deben incluir: Aplicacin funcional Cdigo Fuente Manual de usuario Manual Tcnico

Restricciones y Notas Importantes


Se deber utilizar el lenguaje JAVA Para la construccin del anlisis lxico y sintctico se utilizarn las herramientas Flex y CUP. El proyecto es individual. Copias de proyectos o de gramticas tendrn una nota de 0 puntos y sern reportados al Ingeniero de su seccin, as como a la Escuela de Ciencias y Sistemas. Se tomar en cuenta la calidad de la informacin proporcionada por el compilador cuando se produzcan errores, as como la presentacin de la interfaz grfica y amigabilidad de la aplicacin. La calificacin del proyecto ser personal, en un horario que posteriormente ser establecido. Se debe tomar en cuenta que durante la calificacin no podrn estar terceras personas alrededor o de lo contrario no se tendr derecho a calificacin

Fecha de Entrega
Lunes 1 de Octubre del 2012 No hay prrroga, se entrega todo en un disco compacto y la entrega ser presencial. El lugar y hora ser acordado con su auxiliar.

Você também pode gostar