Compilador para el lenguaje HULK, implementado en Rust con LALRPOP.
HULK-Compiler/
├── Cargo.toml # Workspace raíz
├── Makefile # Comandos de construcción y pruebas
├── HULK_GRAMMAR.md # Gramática de referencia
├── script.hulk # Script de entrada de ejemplo
├── runtime/
│ └── hulk_runtime.c # Runtime en C enlazado al binario final
├── tests/
│ ├── test_class.hulk
│ ├── test_errors.hulk
│ └── test_full.hulk
└── src/
├── main.rs # Pipeline: parseo, semántica y generación LLVM
├── codegen/ # Generación de IR LLVM y salida ejecutable
└── parser/ # Crate del parser + análisis semántico
├── build.rs # Script de build que invoca lalrpop
├── Cargo.toml
└── src/
├── grammar.lalrpop # Gramática LALRPOP (producciones)
├── lib.rs # API pública del parser
├── ast/ # Nodos del AST
│ ├── atoms/
│ ├── declarations/
│ ├── expressions/
│ ├── program.rs
│ └── visitor/ # Trait Visitor + AstPrinterVisitor
├── semantic/ # Tipado, chequeos y diagnósticos
└── tokens/ # Tokens: Literal, Identifier, Operator, etc.
Consulta HULK_GRAMMAR.md para la gramática completa con tabla de precedencia de operadores y clases de nodos AST.
- Rust (edición 2024) — instalar con rustup
- GNU Make (opcional, para usar los targets del Makefile)
Escribe un programa en script.hulk en la raíz del proyecto.
Ejemplo:
print("Hello World!");
# Compilar el proyecto (sin ejecutar)
make compile
make execute
make execute SCRIPT=otro_archivo.hulkLa salida muestra diagnósticos de compilación y el resultado final.
→ Generando código LLVM…
✓ Compilación exitosa → build/script
| Target | Descripción |
|---|---|
make compile |
Compila el codigo de script.hulk |
make execute |
Compila y ejecuta el codigo de script.hulk |
make execute SCRIPT=otro_archivo.hulk |
Compila y ejecuta el codigo en la ruta correspondiente |
make clean |
Limpia artefactos de build (cargo clean) |
- Consulta
HULK_GRAMMAR.mdpara la producción que quieres implementar. - Agrega los nodos AST necesarios en
src/parser/src/ast/(atoms o expressions). - Agrega los tokens necesarios en
src/parser/src/tokens/si hacen falta. - Agrega las reglas en
src/parser/src/grammar.lalrpop. - Actualiza semántica y/o codegen en
src/parser/src/semantic/ysrc/codegen/. - Compila con
make build— LALRPOP generará el parser automáticamente. - Prueba editando
script.hulky ejecutandomake compileomake execute.