我正在寻找一个库,它可以接受定义 BNF 的字符串和另一个具有要解析的文本的字符串,并根据前者解析后者。请注意,我不想要需要以源代码形式编写定义然后需要编译
libmarpa 实现 Marpa 算法,执行一般的 BNF 解析。但是,它不接受 BNF 作为字符串 — 您需要从字符串和词法分析器构建语法,例如,在这个 JSON 解析器中。
只有你要求的一半,但可以说是最难的一半。
与此同时,基于 libmarpa 的 Marpa::R2 完全可以满足您的需求 - 需要描述 BNF 和词法分析器规则并生成识别器的字符串 - 可以直接用于生成 AST 或通过语义操作对其进行评估的分析器。
有努力将 libmarpa 方便地包装起来,以完成您所说的 1、2。
还有一个 Kollos 项目旨在使用 Lua 扩展和包装 libmarpa。
希望对您有所帮助。
如果你的意图是只解析小文件以达到"这是有效的语法吗"的目的,你可以使用早期解析器来做到这一点。 以这种方式解析的大文件会很慢。
你的问题将是定义标记;如果你在字符级别进行 Earley 解析,你会得到一个解析,但它会比语言标记上的早期解析更糟糕。
如果需要更大规模的分析,则需要一个用于定义标记和语法的工具。 这正是你说你不想要的东西。
如果您想要一个生成树的工具,则可以修改 Earley 解析器以生成树。 但回到效率:如果你想要一些规模,你可能需要一个库来管理树节点。