采用 BNF 定义并相应地进行分析的 C 库

  • 本文关键字:定义 BNF 采用 c parsing bnf
  • 更新时间 :
  • 英文 :


我正在寻找一个库,它可以接受定义 BNF 的字符串和另一个具有要解析的文本的字符串,并根据前者解析后者。请注意,我不想要需要以源代码形式编写定义然后需要编译

的东西

libmarpa 实现 Marpa 算法,执行一般的 BNF 解析。但是,它不接受 BNF 作为字符串 — 您需要从字符串和词法分析器构建语法,例如,在这个 JSON 解析器中。

只有你要求的一半,但可以说是最难的一半。

与此同时,基于 libmarpa 的 Marpa::R2 完全可以满足您的需求 - 需要描述 BNF 和词法分析器规则并生成识别器的字符串 - 可以直接用于生成 AST 或通过语义操作对其进行评估的分析器。

有努力将 libmarpa 方便地包装起来,以完成您所说的 1、2。

还有一个 Kollos 项目旨在使用 Lua 扩展和包装 libmarpa。

希望对您有所帮助。

如果你的意图是只解析小文件以达到"这是有效的语法吗"的目的,你可以使用早期解析器来做到这一点。 以这种方式解析的大文件会很慢。

你的问题将是定义标记;如果你在字符级别进行 Earley 解析,你会得到一个解析,但它会比语言标记上的早期解析更糟糕。

如果需要更大规模的分析,则需要一个用于定义标记和语法的工具。 这正是你说你不想要的东西。

如果您想要一个生成的工具,则可以修改 Earley 解析器以生成树。 但回到效率:如果你想要一些规模,你可能需要一个库来管理树节点。

最新更新