Es un compilador hecho en java con jflex para análisis lexico y cup para análisis sintatactico. Este compilador genera el código ensamblador para MIPS en un archivo .asm
Este proyecto fue hecho con netbeans, asi que es recomendado usar netbeans. En este repositorio se encuentran .jar necesarios para ejecutar el proyecto (jflex y cup)
Antes de poder correr este proyecto se debe ejecutar el siguiente comando en la terminal sh build.sh
esto generará los archivos equivalentes en java. Convierte el archivo c.flex
en dos clases de java, un lexer
con el nombre definido en el archivo jflex y otra clase symbols
que se genera apartir de los símbolos que ocupa el lexer. Tambien convierte el archivo c.cup
en una clase de java, la cual está sería nuestra clase de análisis semántico. Tener en cuenta que siempre que se hacen cambios en cualquiera de estos dos archivos (flex y cup) se tiene que ejecutar el comando sh build.sh
Despues de ejecutar el comando sh build.sh
ya se puede ejecutar normalmente el proyecto, este utilizará archivos predefinidos en el codigo para realizar los analisis y generar el codigo
Este proyecto fue realizado en la clase de compiladores I y II de UNITEC de Tegucigalpa, Honduras en el segundo semestre del año 2017.
Este proyecto realiza todas las fases de un compilador a excepcion de la optimizacion, se hizo lo posible para que por lo menos pudiera compilar un programa de C de hola mundo, el scanf y printf se usan de diferente forma que en el C normal.
Tambien se pueden realizar operaciones aritmeticas.
El manejo de saltos IF WHILE FOR ELSE
solo se implementaron hasta su analisis sintáctico. El ambiente de las variables se maneja con arboles de tablas. Lo mas probable es que este proyecto se deje abandonado y no se termine.
scanf
solo recibe una variable, la cual es la que se va a leer de la consola. Y printf
solamente puede recibir texto y un entero. El siguiente codigo de nuestro C funciona perfectamente y genera el archivo ensamblador para MIPS correctamente.
int main(){
int x;
printf("Ingrese un numero: ");
scanf(x);
x = x * 2;
printf("El doble de su numero es: %d",x);
return 0;
}