Parsing 如何在ANTLR中从语法中删除间接左递归

Parsing 如何在ANTLR中从语法中删除间接左递归,parsing,recursion,grammar,antlr3,Parsing,Recursion,Grammar,Antlr3,我用ANTLR写了以下语法。我面临左递归错误,因为下面的语法中有间接左递归: logicalExpression : subSearchCondition delim (logicalOp delim subSearchCondition delim)* ; subSearchCondition : (NOT)? delim LPAREN delim searchCondition delim RPAREN delim | (NOT)? delim predicate del

我用ANTLR写了以下语法。我面临左递归错误,因为下面的语法中有间接左递归:

logicalExpression
  : subSearchCondition delim (logicalOp delim subSearchCondition delim)* ;

  subSearchCondition
  : (NOT)? delim LPAREN delim searchCondition delim RPAREN delim

  | (NOT)? delim predicate delim;

 searchCondition
  : logicalExpression;
在上述语法中,logicalExpression调用subSearchCondition,而subSearchCondition又调用searchCondition,但searchCondition调用logicalExpression,因此logicalExpression和searchCondition之间存在间接递归


请帮助解决此语法的左递归。请一步一步地解释

如果你能为我的特定用例举例说明,那就好了为什么?由于在递归调用之间定义了标记,所以ANTLR语法没有错。如果你正面临问题,可以考虑发布一篇文章。