Parsing LR(k)或LALR(k)解析器生成器,具有类似于ANTLR的特性

Parsing LR(k)或LALR(k)解析器生成器,具有类似于ANTLR的特性,parsing,parser-generator,lalr,lr,Parsing,Parser Generator,Lalr,Lr,我目前正在为某种语言编写解析器。我已经得到了这种语言的语法,但是这种语法有一些左递归和非LL(*)结构,所以ANTLR做得不太好,即使有回溯 因为删除这些左递归和非LL(*)构造比乍一看要困难,所以我现在想尝试使用LR(k)或LALR(k)解析器生成器。k值越高越好 有人能推荐我一个满足这些要求的解析器生成器吗 所生成的解析器优选地是具有一些高(或甚至任意)k的LR(k)解析器,或者至少是具有一些高k的LALR(k)解析器 生成的解析器是用C或C++编写的,如果用C编写,则可以与C++代码连接

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

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

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

  • 所生成的解析器优选地是具有一些高(或甚至任意)k的LR(k)解析器,或者至少是具有一些高k的LALR(k)解析器
  • 生成的解析器是用C或C++编写的,如果用C编写,则可以与C++代码连接。
  • 一个类似于ANTLR的特性集(特别是AST重写)会很好
  • 性能不是最紧迫的问题,生成的解析器旨在 可用于具有大量内存和cpu能力的台式机
感谢和问候,
约斯特

PS:我问这个问题不是因为我不能用谷歌搜索自己,而是因为已经没有时间自己测试一些发电机了。因此,请只在有推荐的分析器生成器的情况下进行回答。

,您可以考虑。

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

我现在决定使用它,它是一种能够识别任何上下文无关语言的GLR解析器生成器。它似乎编程良好(查看源代码分发中的测试),但缺少ANTLR提供的许多特性,最明显的是AST构造工具


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

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

sourceforge上的LRStar描述看起来很有希望,但svn repo中没有任何文件,网站上也没有任何内容……实际上,这更像是由于法律问题或其他原因而被删除,因为很难找到LRStar的任何可下载发行版。。。它甚至在大多数下载站点上都被删除了,我只能找到一些windows二进制文件,但我的工作环境是linux。@Jost:LRStar的作者刚刚通知我,整个站点的分发文件都重新联机了。做一些备份:)LRSTAR v 10.0现在可用。已经作出了许多改进。如果语法中没有代码,它可以读取Yacc/Bison语法。org链接已断开,但仍可在sourceforge、thx中获取相关信息。此处仍有较旧的发行版:。它包括一些示例语法