采用BNF定义并相应解析的C库?

时间:2014-12-07 06:36:23

标签: c parsing bnf

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

2 个答案:

答案 0 :(得分:1)

实现libmarpa

Marpa algorithm执行一般的BNF解析。但是,它不接受BNF作为字符串 - 您需要从字符串和词法分析器构建语法,例如,在JSON parser中。

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

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

努力将libmarpa方便地包装成你所说的12

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

希望它有所帮助。

答案 1 :(得分:0)

如果您打算仅为#34;解析小文件,这是有效的语法",您可以使用Early解析器执行此操作。以这种方式解析的大文件将非常慢。

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

如果您想要更大规模的解析,您需要一个可以定义令牌和语法的工具。这就是你说你不想要的东西。

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