据Hacker News报道,2026年10月1日,开发者在该站Show HN栏目发布面向C++的LALR(1)解析器生成器Yantra。该项目把词法分析器、语法分析器与AST遍历器交由同一工具生成,核心特点是先构建完整的抽象语法树(AST),再对其进行自上而下的遍历。
Yantra在帖子中说明,Yacc、Bison、Lemon等多数LALR解析器生成器会在解析过程中自底向上归约规则时运行语义动作。规则动作执行时,父节点形态尚未确定,因此不少语法需要手写AST类,并在需要查看兄弟节点或推迟决定时另做一次遍历。Yantra则先让整棵AST生成完毕,再在单独一趟中自上而下遍历,按顺序调用语义动作,因此父规则的动作可以先于子节点被访问。
同一份语法可以定义多个walker。项目给出的例子是,从同一次解析结果出发,一个walker可输出C++,另一个可输出Java;AST和walker类均由工具生成。帖子还展示了一个小例子,对表达式1 + 2 + 3运行后,输出依次为Adding、Number: 1、Adding、Number: 2、Number: 3。最外层Adding是树的根,它先于两个子节点打印,这一顺序只有在整棵树先于任何动作运行时才可能出现。
其他特性包括集成支持模式(mode)的词法分析器,可用于嵌套注释等场景;提供可选的合并单文件输出模式,并生成main();使用C++23,采用MIT许可证。项目版本为0.5.1,尚未到1.0,由单一维护者开发。作者在帖中称项目仍年轻,应被视为早期软件,比起看起来更完整,他更希望知道哪里会出错,已知缺口列在GitHub文档中,仓库地址为TantrixAuto/yantra。作者欢迎反馈和问题,并表示会在帖中回应。