Yantra - Generador de parsers LALR(1) para C++ con lexer y AST integrados

Show HN: Yantra – an LALR(1) parser generator for C++

Yantra es un generador de parsers LALR(1) escrito en C++ que integra lexer, parser y construcción de AST en una sola herramienta. A diferencia de Bison o Yacc, construye primero el AST completo y luego lo recorre de arriba hacia abajo, permitiendo que las acciones semánticas de los padres se ejecuten antes que las de los hijos. Soporta UTF-8, modo amalgamado y parser basado en push para procesar datos en tiempo real. Ideal para compiladores e intérpretes, sin dependencias externas más allá de la librería estándar de C++.

Yantra siempre construye primero el AST completo y luego lo recorre de arriba hacia abajo en una pasada separada, de modo que la acción de una regla padre puede ejecutarse antes de que se visiten sus hijos.
  1. MichaelMoser123

    Buena suerte.

    Hubo un tiempo en que sabía cómo arreglar errores shift/reduce y reduce/reduce, pero eso fue hace mucho tiempo.

    Con un parser de descenso recursivo tienes que comprobar la recursión por la izquierda, que es algo menos complicado.

  2. mingodad

    Para la gente interesada en este tema recomiendo encarecidamente que también echen un vistazo a Ben Hanson https://github.com/BenHanson/parsertl17 y, basándome en él, he creado un playground LALR(1) online aquí https://mingodad.github.io/parsertl-playground/playground/ donde tienes alrededor de 350 gramáticas no triviales para experimentar (selecciona una del desplegable `Examples` y luego haz clic en `Parse` para ver un árbol de análisis sintáctico para la entrada en `Input`; también genera EBNF para generar bonitos diagramas de ferrocarril navegables en https://www.bottlecaps.de/rr/ui .

  3. userbinator

    Es un poco sorprendente ver que se escriben nuevos generadores de parsers, mucho después de que la gran mayoría de los compiladores ya se hayan decantado por el descenso recursivo / precedence climbing (incluido https://news.ycombinator.com/item?id=49913192 , que está cerca ahora mismo en la portada).

Más de este día

2026-10-01