		Compilador de MicroAda v1.0

Finalizado: 	28-12-2000


Universidad:   	Universidad Tecnologica Centroamericana (UNITEC)
Catedratico: 	Edgares Futch
Asignatura:  	Compiladores II

Lugar:		Tegucigalpa M.D.C.
		Francisco Morazan 
		Honduras
		Centro America.

Autor: 		Jorge Garcia
Cuenta: 	962082
E-mail:		agarcia@unitec.edu


Compilador:  	jdk v1.2.2 (build JDK-1.2.2-001)
Utilerias: 
	     	-JLex v1.2.5
	     	-CUP  v0.10j


Introduccion:

	Este programa fue creado como proyecto final para la asignatura de Compiladores II
	del 5to Periodo del Ao 2000 en la universidad UNITEC de Honduras de la carrera de
	Ingenieria en Sistemas Computacionales.	El programa consiste en un compilador de 
	MicroAda el cual recibe como entrada un programa en MicroAda y tiene como salida 
	un programa en Assembler de MIPS.

Contenido:

Archivos fuente de java:

Main.java  	-> 	Archivo de ejecucion y generador 
			de codigo objecto en assembler de MIPS 
			utlizable en SPIM.

Quad.java  	-> 	Clase con unidad de Quad.

Quads.java 	->	Contenedor de Quads.

TablaHash.java	->	Tabla hash que se utliza de tabla de simbolos.

Atributos.java	->	Clase que contiene los atributos de los 
			identificadores que se ingresan a la tabla de 
			simbolos.

sym.java	->	Clase que contiene los Tokens que permiten la 
			comunicacion entre el lexer y el parser,
			se genera mediante CUP teniendo como entrada
			el archivo parser.txt.

parser.java	->	Parser de MicroAda generado por CUP teniendo 
			como entrada el archivo parser.txt.

lexer.txt.java	->	Lexer de MicroAda generado por JLex teniendo 
			como entrada el archivo lexer.txt.


Clases de java:

	sym.class
	parser.class
	Yylex.class
	Quad.class
	Quads.class
	Atributos.class
	TablaHash.class
	CUP$parser$actions.class
	Main.class

Archivos de texto especiales:

lexer.txt	->	Analizador lexico en formato de JLex.

parser.txt	->	Analizador Sintactico y semantico en formato de CUP.

README.txt	->	Este archivo.


Archivos fuente de MicroAda:
 
i)Errores de tipo
errortipo.txt	->	Ejemplo de errores de tipo.

ii)Error de parametros de una funcion
errorparam.txt	->	Ejemplo de errores de llamado de funciones con parametros.

iii)Errores de rango en el for
rangofor.txt	->	Ejemplo de errores de rango estatico del for.

iv)Errores de rango de un arreglo
rangoarray.txt	->	Ejemplo de errores en rango estatico de un array.

v)Uso de procedimentos con llamados a mas de 3 niveles
call.txt	->	Ejemplo de llamadas a procedimientos de mas de 3 niveles.
	El programa imprime la cadena 1234321 siendo cada numero impreso por su nivel
	correspondiente.

vi)Uso Runtime Libraries
ascii.txt	->	Ejemplo de utlizacion de librerias de runtime.
	El programa lee un caracter del teclado e imprime su valor en codigo ascii.
	Se sale del programa al presionar escape.	

vii)Uso Arreglos
arreglos.txt	->	Ejemplo de funcionamiento de arreglos.
	El programa lee un arreglo de enteros del teclado y le asigna el cuadrado
	de sus valores a otro arreglo.

viii) While/While Anidados
bsortw.txt	->	Ejemplo de utilizacion de while anidados.
	El programa lee un arreglo de enteros del teclado y lo ordena de modo
	ascendente.

ix) For/ For Anidados
bsort.txt	->	Ejemplo de utilizacion de for anidados.
	El programa lee un arreglo de enteros del teclado y lo ordena de modo
	descendente.

x) Recursion
fact.txt	-> 	Ejemplo de llamadas recursivas.
	El programa lee un numero del teclado y calcula su factorial.

Archivos fuente de assembler de MIPS para SPIM:

	call.txt.s
	ascii.txt.s
	arreglos.txt.s
	bsortw.txt.s
	bsort.txt.s
	fact.txt.s

	Los demas fuentes de MicroAda no tienen fuente de assembler
	por contener errores.

Metodo de compilacion:
	Recordar que java es un lenguaje case-sensitive y los comandos deben ser ejectudos 
	exactamente como se escribe a continuacion.

i) Crear el lexer y parser para java(ya incluidos) a partir de JLex y CUP

	Antes de utilizar JLex y CUP asegurarse que fueron compilados y que se encuentran
	en el CLASSPATH de java o en el mismo directorio en el que se esta generando el
	lexer y el parser.
	

	java JLex.Main lexer.txt
		Genera lexer.txt.java.
	java java_cup.Main < parser.txt
		Genera parser.java y sym.java.

ii) Generar las clases de java(ya incluidas) con ayuda de javac
	Ignorar el warning que indica que la clase Yylex deberia ser
	definida en el archivo Yylex.java y no en el archivo lexer.txt.java

	javac *.java
		Genera todos los .class incluidos en el zip. 

Metodo de ejecucion:

i) Escribir su archivo fuente en el lenguaje MicroAda y salvarlo o utilizar uno de los
   ejemplos ya incluidos.

ii) Compilar su programa utilizando(codigo de ejemplos ya incluidos)
	java Main <archivo fuente>
		Genera un archivo <archivo fuente>.s si su programa no tiene errores
		lexicos, sintacticos o semanticos.

iii) Ejecutar su programa <archivo fuente>.s en SPIM

Nota de ejecucion: Antes de maldecir al compilador favor verificar la logica de su programa.

Bugs conocidos:

	-No se puede pasar arreglos como parametros, tiene efectos imprevistos.
	-No se puede leer directamente a una casilla de un arreglo, recibira un error.
	 de parsing. ej. read(c(i)); o readln(c(i));
	 OJO -> Si se puede en caso de un write. Ej. write(c(i));
	-Mensajes de error algo toscos, sin embargo todos funcionan.
	
	Si se encuentran bugs adicionales favor enviarmelos a mi correo, igual en caso
	de haber hecho modificaciones.

Herramientas:

	Todas las herramientas son freeware y pueden obtenerse en el internet referenciandose
	a las siguientes direcciones:

	-Compilador de java:
		http://java.sun.com
	-Generador de analizador lexico para java, JLex:
		http://www.cs.princeton.edu/~appel/modern/java/JLex
	-Generador de parser lalr para java, CUP:
		http://www.cs.princeton.edu/~appel/modern/java/CUP
	-Front-End para compilador de java, JCreator:
		http://www.jcreator.com
	-Simulador de MIPS, SPIM para DOS y Windows:
		http://www.mkp.com/cod2e.htm
		
Bibliografia:

	-Compiladores Principios, tecnicas y herramientas
	 Aho, Sethi, Ullman (ADDISON-WESLEY IBEROAMERICANA)
	-Modern compiler implementation in Java
	 Appel (CAMBRIDGE UNIVERSITY PRESS)
	-Thinking in Java 2nd Edition (Version gratis pdf)
	 Eckel (PRENTICE HALL) http://www.bruceeckel.com
	-java 1.1 Unleashed
	 * (MACMILLAN COMPUTER PUBLISHING USA)
	
Garantia:

	Este programa es otorgado "como es" y no existe garantia de ningun tipo.

Licencia:

	Este programa puede ser utilizado para fines educativos e ilustrativos
	de la creacion de un compilador sencillo, no debe ser utilizado para ser 
        presentado como proyecto de alguna asignatura a menos que sea el  
        presentado por el creador del programa Jorge Garcia. Cualquier intento de
	pirateria puede ser detectado y sera objeto de las mas severas sanciones
	por parte de su institucion educativa.
