以下のANTLR文法の「expr」ルールは、明らかに相互に左再帰的です。ANTLR初心者として、これを解決するのに頭を悩ませるのは難しい. ANTLR リファレンス ブックの「Resolving Non-LL(*) Conflicts」を読みましたが、まだ解決策がわかりません。ポインタはありますか?
LPAREN : ( '(' ) ; RPAREN : ( ')' ); AND : ( 'AND' | '&' | 'EN' ) ; OR : ( 'OR' | '|' | 'OF' ); NOT : ('-' | 'NOT' | 'NIET' ); WS : ( ' ' | '\t' | '\r' | '\n' ) {$channel=HIDDEN;} ; WORD : (~( ' ' | '\t' | '\r' | '\n' | '(' | ')' | '"' ))*; 入力: expr EOF; expr : (andexpr | orexpr | notexpr | アトム); andexpr : expr AND expr; orexpr : expr OR expr; notexpr : 式ではありません。 フレーズ: '"' WORD* '"'; アトム : (フレーズ | WORD);