下面的ANTLR语法中的'expr'规则显然是相互左递归的。作为一个 ANTLR 新手,我很难解决这个问题。我已经阅读了 ANTLR 参考书中的“解决非 LL(*) 冲突”,但我仍然没有看到解决方案。任何指针?
LPAREN : ( '(' ) ; RPAREN : ( ')' ); AND : ('AND' | '&' | 'EN' ) ; 或 : ( 'OR' | '|' | 'OF' ); 不是 : ('-' | 'NOT' | 'NIET' ); WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ; 字: (~( ' ' | '\t' | '\r' | '\n' | '(' | ')' | '"' ))*; 输入:expr EOF; expr : (andexpr | orexpr | notexpr | atom); andexpr : expr 和 expr; orexpr : expr 或 expr; notexpr : 不是 expr; 短语:'"' WORD* '"'; 原子:(短语|字);