✨ Un viaje educativo al corazón de los compiladores ✨
Motivación • Características • Sintaxis • Ejemplos • Estructura • Roadmap • Contribuir
"Lo que no se crea, no se entiende"
Halo nace como un proyecto de aprendizaje práctico para desmitificar el proceso de construcción de compiladores e intérpretes. Lejos de la complejidad de lenguajes industriales, Halo ofrece un playground minimalista donde:
- 🔍 Exploras las fases clásicas: lexing, parsing, AST, chequeo de tipos y backend
- 🧪 Experimentas con nuevas características de lenguaje sin miedo
- 📚 Aprendes haciendo, con código simple y extensible
- 🎮 Juegas con diferentes estrategias de implementación (intérprete, bytecode, transpilación)
| ✅ Tipos básicos | ✅ Variables | ✅ Expresiones aritméticas |
✅ Condicionales if/else |
✅ Bucles while |
✅ Funciones con fn |
| 🚧 Sistema de tipos | 🚧 Parámetros | 🚧 Retorno de funciones |
| 📅 I/O básico | 📅 Backend alternativo | 📅 CLI tool |
La especificación inicial (ver init.txt) define una sintaxis limpia y fácil de parsear:
int // Números enteros
float // Números decimales
bool // Booleanos (true/false)
int x // Declaración
int contador = 10 // Inicialización
float precio = 99.99
bool activo = true
if edad >= 18 {
// Código para adultos
} else {
// Código para menores
}while intentos < 3 {
intentos = intentos + 1
}fn saludar() {
// Cuerpo de la función
}| Aritméticos | Comparación |
|---|---|
+ - * / |
< > = == |
fn main() {
int n = 5
int resultado = 1
while n > 1 {
resultado = resultado * n
n = n - 1
}
// Aquí iría print cuando lo implementemos
// print(resultado) -> 120
}fn main() {
int numero = 1
while numero <= 10 {
bool esPar = (numero % 2) == 0
if esPar == true {
// print(numero) -> 2, 4, 6, 8, 10
}
numero = numero + 1
}
}halo/
├── 📦 src/ # Código fuente
│ ├── 🎯 lexer/ # Análisis léxico
│ ├── 🌳 parser/ # Análisis sintáctico y AST
│ ├── 🏗️ ast/ # Definiciones de nodos
│ ├── ✅ semantics/ # Chequeo de tipos
│ └── ⚙️ backend/ # Intérprete / generación de código
│
├── 📚 examples/ # Programas de ejemplo
│ ├── factorial.halo
│ ├── fibonacci.halo
│ └── ...
│
├── 🧪 tests/ # Pruebas
│ ├── unit/
│ └── integration/
│
├── 📖 docs/ # Documentación
├── 📄 init.txt # Semilla de la sintaxis
└── 🖼️ halo.png # Banner del proyecto
- Definición inicial de sintaxis
- Lexer completo con tokens
- Parser recursivo descendente
- AST funcional
- Intérprete básico
- Sistema de tipos robusto
- Mensajes de error legibles
- Parámetros en funciones
- Valores de retorno
- Operadores lógicos (&&, ||, !)
- Backend a C/LLVM
- CLI (
halo run,halo build) - Standard library mínima
- CI/CD automatizado
¡Toda ayuda es bienvenida! Halo es el proyecto perfecto para:
- 🎓 Estudiantes aprendiendo compiladores
- 👨💻 Desarrolladores curiosos
- 🧙♂️ Expertos que quieran compartir conocimiento
| Área | Ideas |
|---|---|
| 📝 Documentación | Mejorar ejemplos, escribir tutoriales |
| 🎯 Lexer/Parser | Implementar desde cero o con herramientas |
| ✅ Semántica | Añadir chequeo de tipos, optimizaciones |
| ⚡ Backend | Crear intérprete, bytecode VM, transpilador |
| 🧪 Testing | Añadir casos de prueba, encontrar bugs |
| 💡 Ideas | Proponer nuevas características |
✅ Una característica por PR
✅ Incluir pruebas
✅ Documentar cambios
✅ Mantener el estilo de código
MLP 2.0 © Angel A. Portuondo H.
⭐ Star • 🐛 Reportar bug • 📬 Contacto
Hecho con 💙 para la educación y el aprendizaje