Anda di halaman 1dari 7

Universidad de San Carlos de Guatemala

Facultad de Ingeniera
Escuela de Ciencias y Sistemas
1er. Semestre 2014
Organizacin de Lenguajes y Compiladores 1

PRCTICA 2
Jos Eduardo Lpez Villatoro
Carlos Josu Dvila
Diego Alejandro Castellanos Tnchez

Indice
DESCRIPCION GENERAL ............................................................................................................................................2
OBJETIVO GENERAL ..............................................................................................................................................2
OBJETIVOS ESPECFICOS .......................................................................................................................................2
DESCRIPCIN ............................................................................................................................................................2
CARACTERSTICAS DE LA SOLUCIN .....................................................................................................................2
DISEO DE LA INTERFAZ .......................................................................................................................................2
Archivo ..............................................................................................................................................................2
Ejecutar .............................................................................................................................................................2
Ayuda ................................................................................................................................................................3
DESCRIPCIN DEL LENGUAJE ...................................................................................................................................3
CDIGO DE 3 DIRECCIONES ..................................................................................................................................3
Temporales y variables .....................................................................................................................................3
Instrucciones y acceso a variables ....................................................................................................................3
Etiquetas y Saltos..............................................................................................................................................4
Declaracin y llamada a funciones ...................................................................................................................5
Instruccin printf ..............................................................................................................................................5
Stack y heap ......................................................................................................................................................5
EJEMPLO COMPLETO DE UN METODO EN CDIGO DE TRES DIRECCIONES ........................................................6
CONSIDERACIONES ...............................................................................................................................................6

DESCRIPCION GENERAL
OBJETIVO GENERAL
Que el estudiante aprenda a realizar un anlisis sintctico implementando un rbol de Sintaxis Abstracta para la
ejecucin de mtodos, ciclos y condiciones.

OBJETIVOS ESPECFICOS

Aprender a implementar un rbol de Sintaxis Abstracta


Utilizar la herramienta GoldParser
Ejecutar operaciones condicionales, ciclos, asignaciones, etc.

DESCRIPCIN
Se necesita una aplicacin que lea Cdigo de 3 Direcciones Estndar y lo ejecute para obtener la salida del mismo,
a fin de comprobar si dicho cdigo funciona correctamente.
Archivo de entrada: Este archivo contiene las instrucciones en cdigo de 3 direcciones que se desean ejecutar.

CARACTERSTICAS DE LA SOLUCIN
Para responder a las necesidades que se le plantean, se ha pensado en el desarrollo de una aplicacin con
una gramtica implementada en GoldParser con el fin de poder usar esta misma estructura para un futuro y en
lenguajes distintos.
Se debe realizar un editor de texto, el cual sea capaz de escribir, leer, editar y guardar texto con el fin de poder
realizar la ejecucin del cdigo de 3 direcciones.
Se deben de mostrar de manera funcional y agradable al usuario resumen de errores detectados, y el
resultado de la ejecucin del cdigo.

DISEO DE LA INTERFAZ
Disear una interfaz grafica amigable y cmoda que facilite la creacin o carga de archivos de entrada para la
ejecucin del cdigo.
La aplicacin deber contener como mnimo los siguientes mens:

Archivo

Nuevo: Despliega un nuevo documento en blanco para editar.


Abrir: Permite abrir un programa con las extensiones especificadas.
Guardar: Permite guardar el programa editado actualmente con la extensiones especificada.
Guardar Como: Permite guardar el programa actual con otro nombre con extensin especificada.
Salir: Con esta opcin se cerrar la aplicacin.

Ejecutar
-

Ejecutar: Ejecuta el cdigo que este en el editor.


Mostrar errores: Mostrara los errores lxicos, sintcticos y semnticos, con la siguiente informacin: la
columna, la fila y la descripcin de cada error que haya sido encontrado.

Ayuda

Manual de Usuario: Se deber mostrar el manual de usuario, para guiar a la persona en la


utilizacin de la aplicacin.
Manual Tcnico: Se deber mostrar el manual tcnico, para entender como se ha realizado la
aplicacin.
Acerca de: Permite mostrar informacin de la persona que ha creado la aplicacin.

DESCRIPCIN DEL LENGUAJE


CDIGO DE 3 DIRECCIONES
El cdigo de 3 direcciones es un cdigo intermedio que se utiliza para facilitar la transformacin de un Lenguaje
de Alto Nivel a un Lenguaje de Bajo Nivel como lo es Assembler.
La regla de este cdigo es que el mximo de operaciones en memoria que se pueden realizar en una instruccin
son 3.

Temporales y variables
Los temporales se debern crear de acuerdo a la siguiente sintaxis:
T<num>
Por ejemplo:
T1

T2

T3

Instrucciones y acceso a variables


Las instrucciones sencillas sern de la forma:
Identificador = identificador operador identificador;
Para instrucciones que contengan un arreglo solamente se podrn tener los siguientes casos:
Identificador = identificador[temporal];
//o bien
Identificador[temporal] = identificador;
Para el acceso a variables locales, temporales importantes y algunas referencias a memoria se tendrn los
siguientes casos:
Identificador = Pila[temporal];
Pila[temporal] = identificador;
Para el acceso a la pila de memoria donde se almacena los atributos de objetos se tienen los siguientes casos:
Identificador = mem[temporal];
mem[temporal] =identificador;

Ejemplo:
t1 = 5 * 5;
t2 = 6 - 3
t3 = t1 * t2;
Pila[t3] = 10;
t4 = mem[t3];
Operadores Aritmticos Vlidos:
Operacin:
Suma
Resta
Multiplicacin
Divisin
Mdulo

Smbolo:
+
*
/
%

Operadores Lgicos Vlidos:


Operacin:
Smbolo:
Comparacin
Var == Var
Diferencia
Var!=Var
Mayor
Var>Var
Mayor o Igual
Var>=Var
Menor
Var<Var
Menor o Igual
Var<=Var
Verdadero
1==1
Falso
1==0
Los operadores Lgicos ||, && y ^ se deben hacer por medio de corto circuito.

Etiquetas y Saltos
Las etiquetas debern ser generadas de acuerdo a la siguiente sintaxis:
Lnum:
Donde num es un nmero generado por medio de un contador.
Para realizar saltos a una etiqueta se utilizar la sintaxis:
goto Lnum;
Por ejemplo:
L1:
//Instruccin en 3 direcciones
goto L1;
Existen tambin saltos condicionales que tendrn la siguiente estructura:
If ( condicin ) goto Lnum;
Donde la condicin solo puede ser un operador lgico como los anteriormente explicados. Por ejemplo:
L3:
if (3 < P ) goto L1;
goto L3;
L1:

Declaracin y llamada a funciones


Una funcin ser declarada de la siguiente manera:
void funcion(){
//Instruccin en 3 direcciones
}
NOTA: las funciones en tres direcciones no pueden tener parmetros definidos.
Para hacer una llamada a una funcin se utiliza la siguiente sintaxis:
Identificador();
Por ejemplo:
void fun1(){
//Instruccin en 3 direcciones
fun2();
//Instruccin en 3 direcciones
}
El mtodo que se debe de ejecutar de primero es el mtodo main, si no se encuentra este mtodo no se debe
de ejecutar ninguna instruccin.

Instruccin printf
La instruccin printf ser la encargada de realizar la impresin a la consola de salida. La sintaxis de esta
instruccin ser:
Printf(valor,tipo);
Donde:

Valor ser el valor que queremos imprimir


Tipo ser la forma en que debe ser interpretado este valor para la impresin. Los tipos sern:
o 0 Entero
o 1 Decimal
o 2 Carcter
o 3 Booleano, debe imprimir (verdadero o falso)

Stack y heap
La stack, el heap y sus respectivos punteros (P y m) debern ser nombrados y definidos de la siguiente forma:

Stack: Float Pila[1000]


Heap: Float mem[10000]
P: Float p
m: Float m

El acceso a estas estructuras se explic con anterioridad.

EJEMPLO COMPLETO DE UN METODO EN CDIGO DE TRES DIRECCIONES


void calculadora__Mult(){
t1=p+0;
t2=Pila[t1];
t3=t2+0;
t4=mem[t3];
t5=p+2;
Pila[t5]=t4;
t6=p+0;
t7=Pila[t6];
t8=t7+1;
t9=Pila[t8];
t10=p+2;
t11=Pila[t10];
t12=t11*t9;
t13=p+1;
Pila[t13]=t12;
}

CONSIDERACIONES

La prctica debe ser realizada con GoldParser y lenguaje VisualBasic.


La realizacin de la prctica es individual, copias de prctica tendrn un valor de cero y sern
reportadas al Ingeniero y a la Escuela de Sistemas.
No se calificara a travs de ningn IDE de desarrollo.
Entregables:
Cdigo Fuente y archivos de GoldParser
Ejecutable VisualBasic, el nombre de la aplicacin debe contener el siguiente formato:
Practica2_<numero_carnet>, por ejemplo: Practica2_200513896.
Archivos de Entrada, que sean reconocibles por su aplicacin.
La entrega ser 26/04/2014, el horario de entrega y de calificacin se estar informando por la
Universidad Virtual.

Anda mungkin juga menyukai