LR(k)或LALR(k)解析器生成器,其功能类似于ANTLR

时间:2012-08-25 13:26:17

标签: parsing parser-generator lalr lr

我目前正在为某种语言编写解析器。我得到了一个

这种语言的语法,但是这个语法有一些左递归和非LL(*)结构,所以ANTLR做得不好,即使是回溯。

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

有人可以推荐我一个满足这些要求的解析器​​生成器吗?

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

谢谢和问候,
斯特

PS:我没有问,因为我不能谷歌自己,但因为没有时间自己测试一些发电机。所以,如果您对推荐的解析器生成器有经验,请回答。

3 个答案:

答案 0 :(得分:4)

您可以考虑LRSTAR

我对这个工具本身没有经验,但我遇到了作者,他看起来像个非常称职的人。 (我确实以构建解析引擎和相关技术为生。)

答案 1 :(得分:4)

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

答案 2 :(得分:3)

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

作为一个加号,它主要重用ANTLRs语法文件格式,这是我的语法所在的格式。