我目前正在为某种语言编写解析器。我得到了一个
这种语言的语法,但是这个语法有一些左递归和非LL(*)结构,所以ANTLR做得不好,即使是回溯。
因为删除这些左递归和非LL(*)构造比第一眼看上去更难,我现在想尝试LR(k)或LALR(k)解析器生成器。 k越高越好。
有人可以推荐我一个满足这些要求的解析器生成器吗?
谢谢和问候,
斯特
答案 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语法文件格式,这是我的语法所在的格式。