我正在研究ANTLR中的语法解析器。我目前正在研究表达式,其中()具有最高阶优先级,然后是一元减号等等。
当我添加行ANTLR给出错误:以下几组规则是相互左递归的[add,mul,unary,not,and,expr,paren,accessMem,relation,或者,assign,equal]怎么能我去解决这个问题?提前致谢。
答案 0 :(得分:3)
最简单的答案是使用antlr4而不是3,这对于立即左递归没有问题。它会自动重写封面下的语法,以做正确的事情。有很多例子。例如,可以检查Java grammar上的left recursive rules或我的小博客条目。如果您坚持使用v3,那么Java语法的早期版本以及有关如何在文档和书中构建算术表达式规则的大量材料。