El desarrollador Tomek presenta un proyecto pedagógico que muestra, paso a paso, cómo transformar código fuente en un ejecutable nativo. En lugar de inventar un lenguaje nuevo, se apoya en el backend QBE, un compilador compacto que persigue el 70 % del rendimiento de los compiladores industriales con solo el 10 % de su código. El proyecto resuelve expresiones aritméticas —por ejemplo, «2 + 2 * 2» debe dar 6, no 8— para ilustrar todo el pipeline.Primero define una gramática EBNF que codifica la precedencia de operadores: suma y resta por encima de multiplicación y división, con un nivel unario para el signo negativo. En Zig implementa un tokenizador como una máquina de estados simple que reconoce números, los cuatro operadores y paréntesis. Después, un parser recursivo descendente convierte la lista de tokens en un árbol de sintaxis abstracta con nodos binarios, unarios y numéricos. Una vez construido el AST, lo evalúa directamente mediante un intérprete y, a continuación, genera código intermedio en formato SSA de QBE. Las operaciones aritméticas se mapean una a una a instrucciones «add», «sub», «mul», «div» y «neg», eliminando operaciones redundantes como «+4».El último paso es ensamblar todo en un ejecutable enlazado con libc, capaz de invocar «printf» para mostrar el resultado. Todo el código está disponible en GitHub bajo el repositorio «tomekw/oc». El enfoque resulta útil para quien quiera aprender las fases clásicas de un compilador —análisis léxico, sintáctico, interpretación y emisión de código— sin la complejidad añadida de diseñar un lenguaje propio.
Una calculadora didáctica para entender la generación de código nativo con Zig y QBE
Fuentes:
Overengineered calculator: Zig + QBE
