Piola nació de una pregunta simple: ¿cómo funciona realmente un lenguaje de programación? No la superficie,no el “escribe esto y pasa esto otro”, sino las tripas. El lexer que convierte texto en tokens, el parser que construye un árbol, el intérprete que recorre ese árbol y ejecuta código.
La respuesta obvia era construir uno desde cero. Y si de todas formas iba a sufrir, al menos que el lenguaje resultante se sintiera bacán.
Documentación completa, instalación y referencia del lenguaje en cuervolu.github.io/piola.
La idea
Piola es un lenguaje dinámico con sintaxis en español chileno. Las palabras clave no son traducciones literales del inglés, son las palabras que usaría cualquier chileno para describir lo que hace el código.
wea nombre = "Zalo"
duro PI = 3.1415
pega saludar(persona) {
altiro("Wena, " + persona + "!")
}
cachai (nombre == "Zalo") {
saludar(nombre)
} si no {
altiro("¿Y este quién es?")
}
wea para variables. duro para constantes. pega para funciones, una función es un trabajo
a realizar. cachai para condicionales. altiro para imprimir. Todo fluye.
Los errores, lo mejor del proyecto
Los errores de runtime no son mensajes genéricos en inglés. Son mensajes que cualquier chileno entendería de inmediato:
Error: No podi sumar un 'numero' con un 'texto' pedazo de saco wea.
Error: La wea 'x' no existe papito.
Error: Te fuiste al chancho, el índice 10 no existe en la lista (largo: 2).
Qué hay implementado
El pipeline completo de Piola v0.1 está funcionando:
- Lexer: tokenización completa con spans para reportes de error precisos
- Parser: recursive descent + Pratt parsing para precedencia de operadores
- AST: nodos tipados con
Box<T>para toda la gramática del lenguaje - Intérprete tree-walking: evaluación directa del AST con scoping léxico
- Entorno con closures: funciones de primera clase que capturan su contexto
- Tipos completos:
numero,texto,booleano,nada,lista,mapa - Control de flujo:
cachai/si no,mientras,para...en,ojo/cago devolver,cortala,sigue:return, break y continue- Stdlib nativa:
altiro,largo,cachar,pregunta - REPL: con estado persistente entre líneas, basado en
rustyline - Self-update:
piola updatedescarga la última versión desde GitHub Releases - Documentación :site completo en Starlight con sintaxis highlighting para
.cl
El stack técnico
- Rust: implementación completa del compilador e intérprete
- miette: reportes de error con flechas que apuntan exactamente dónde falló el código
- clap: CLI con subcomandos (
run,check,update, REPL) - rustyline: línea de edición y historial en el REPL
- Astro + Starlight: documentación con syntax highlighting propio para Piola
El pipeline
Código fuente (.cl)
↓ Lexer → tokens con spans
↓ Parser → AST (Pratt parsing)
↓ Intérprete → ejecución tree-walking
↓ REPL → estado persistente
La siguiente fase, bytecode compiler + VM stack-based, viene después de escribir programas reales en Piola para afinar el diseño del lenguaje.