4

我目前正在为某种语言编写解析器。我已经获得了这种语言的语法,但是这种语法有一些左递归和非 LL(*) 构造,所以 ANTLR 表现不佳,即使有回溯。

因为删除这些左递归和非 LL(*) 构造比乍一看更难,所以我现在想尝试一个 LR(k) 或 LALR(k) 解析器生成器。k越高越好。

谁能推荐我一个满足这些要求的解析器​​生成器?

  • 生成的解析器最好是具有一些高(甚至是任意)k 的 LR(k) 解析器,或者至少是具有一些高 k 的 LALR(k) 解析器。
  • 生成的解析器是用 C 或 C++ 编写的,如果它是用 C 编写的,它可以链接到 C++-Code。
  • 类似于 ANTLR 的功能集(尤其是 AST 重写)会很好。
  • 性能不是最紧迫的问题,生成的解析器旨在用于具有大量内存和 cpu 能力的台式机。

谢谢和问候,
约斯特

PS:我问不是因为我不能自己google,而是因为没有时间自己测试一些生成器。因此,请仅在您对推荐的解析器生成器有经验的情况下回答。

4

3 回答 3

4

您可以考虑LRSTAR

我对工具本身没有经验,但我见过作者,他似乎是一个很能干的人。(我确实以构建解析引擎和相关技术为生)。

于 2012-08-25T15:42:36.843 回答
4

LRSTAR 10.0现已上市。在比较页面上,有 LRSTAR、ANTLR 和 Bison 的比较。LRSTAR 现在使用相同的 EBNF 运算符(:、|、*、+、?)读取 ANTLR 的样式表示法。它是一个基于 C++ 的系统,在 C++ 中生成 LR(k) 解析器。解析器进行自动 AST 构造和遍历。如果语法中没有动作代码,新版本 10.0 会读取 Yacc/Bison 语法。

于 2013-05-15T22:08:59.350 回答
3

我现在决定使用DParser,它是一个能够识别任何上下文无关语言的 GLR-Parser 生成器。它似乎编程良好(查看源代码分发中的测试),但缺少 ANTLR 提供的许多功能,尤其是 AST-Construction 工具。

另外,它主要重用 ANTLRs 语法文件格式,这是我的语法格式。

于 2012-08-29T11:58:46.293 回答