kparser: un parser pedagógico en C para el lenguaje K

Fuentes: kparser: a small, readable parser for the K programming language

kparser es un pequeño parser escrito en un único fichero en C (unas 570 líneas con comentarios) para el lenguaje de programación K, pensado como referencia pedagógica. Su objetivo es hacer legible la gramática de K, uno de los lenguajes con la gramática estructural más compacta: apenas cinco producciones bastan para cubrir todo el lenguaje.

La herramienta no incluye un evaluador: lee código fuente de K desde una REPL y muestra el árbol de sintaxis abstracta (AST) en forma de listas anidadas estilo Lisp, donde la cabeza indica la operación que actúa sobre el resto. Así, 2+3 se imprime como (+;2;3) y {x+y} como ({;(+;x;`y)), haciendo explícitas decisiones que K resuelve implícitamente, como el orden de evaluación de derecha a izquierda o el carácter monádico o diádico de un verbo.

El parser reconoce cinco tipos básicos (entero, vector de enteros, símbolo, verbo diádico y verbo monádico), todos ellos representados mediante un struct K con sistema de conteo de referencias. Incluye un escáner de paso único que construye directamente los valores K en los tokens, evitando duplicaciones de memoria, y un conjunto de funciones de análisis (parse_E, parse_e, parse_term, parse_base) que se corresponden una a una con las producciones de la gramática. También incorpora un verificador de signos para distinguir entre el menos diádico y el signo unario sin necesidad de backtracking.

El proyecto demuestra además cómo características habituales de K, como las proyecciones y las composiciones, surgen del propio árbol de aplicación sin requerir tipos adicionales. Se distribuye con una suite de pruebas que ejercita cada ruta del escáner, el parser y el sistema de impresión.