libmarpa实现了Marpa算法,可以进行通用的BNF解析。然而,它不接受BNF作为字符串——您需要从字符串和词法分析器中构建语法,例如在这个JSON解析器中。 只是你所要求的一半,但可以说是最困难的一半。 同时,基于libmarpa的Marpa::R2正好可以做到您需要的--接受描述BNF和词法规则的字符串并构建识别器--您可以直接使用它来生成AST或通过语义动作进行评估。 有努力方便地包装libmarpa来做您所说的1, 2。 还有一个Kollos项目,旨在使用Lua扩展和包装libmarpa。 希望能帮到您。
如果您的意图是仅解析小文件以进行“是否有效语法”的目的,则可以使用早期解析器。以这种方式解析大文件将非常缓慢。 您的问题将是定义标记;如果您在字符级别上进行 Earley 解析,您将获得一个解析,但它会比在语言标记上进行 Early-parsing 更差。 如果您想要更大规模的解析,您需要一个工具来定义标记和语法。这正是您所说不想要的东西。 如果您想要一个生成树的工具,您可能能够修改 Earley 解析器以生成树。但回到效率:如果您想要一些规模,您可能需要一个用于管理树节点的库。