Código para la materia Compiladores 2022 de LCC, FCEIA, UNR.
Este es el código a partir del cual los estudiantes empiezan a desarrollar un compilador.
Para fijar la versión de GHC y de los paquetes usaremos la herramienta stack.
Los pasos para instalar son:
stack setup
stack build
Luego se puede ejecutar con
stack run
o cargar el entorno interactivo GHCi
stack ghci
stack ghci src/TypeChecker.hs
También se pueden cargar archivos. Desde stack:
stack run -- miprograma.fd4
En general, los argumentos a nuestro programa se escriben luego de --
. Por ejemplo,
% stack run -- --help
Compilador de FD4 de la materia Compiladores 2022
Usage: compiladores-exe [(-t|--typecheck) | (-k|--CEK) | (-m|--bytecompile) |
(-r|--runVM) | (-i|--interactive) | (-e|--eval) |
(-c|--cc)] [-o|--optimize] [FILES...]
Compilador de FD4
Available options:
-t,--typecheck Chequear tipos e imprimir el término
-k,--CEK Ejecutar en la CEK
-m,--bytecompile Compilar a la BVM
-r,--runVM Ejecutar bytecode en la BVM
-i,--interactive Ejecutar en forma interactiva
-e,--eval Evaluar programa
-c,--cc Compilar a código C
-o,--optimize Optimizar código
-h,--help Show this help text
Para compilar a Bytecode debe hacerse del siguiente modo
stack run -- -m miprograma.fd4
Esto crea un archivo con el mismo nombre pero extension .bc
Para ejecutar hay dos opciones. Utilizar la maquina abstracta en Haskell
o en C
.
En Haskell
es simplemente
stack run -- -r miprograma.bc
En cambio en C
, primero debemos compilar la maquina. Se encuentra en el directorio vm
. Instructivo aquí
Finalmente ejecutamos
vm/macc miprograma.bc
Otra opción es compilar programas fd4
a lenguaje C
. Para esto
stack run -- -c miprograma.fd4
Esto crea el mismo programa pero con extension .c
. Luego compilamos con gcc
gcc runtime.c -lgc miprograma.c
gcc -o miejecutable runtime.c -lgc miprograma.c
Ejecutamos
./a.out
./miejecutable
Por último, se incluye una suit de tests para verificar que todos los backends coincidan en el resultado. Para correr los tests
make test