URL を読んでいて (そしてコピーしようとして)、失敗しました... (antlr の素晴らしい記事も)。
https://supportweb.cs.bham.ac.uk/docs/tutorials/docsystem/build/tutorials/antlr/antlr.html
括弧を追加する前の私の解決策:
whereClause: WHERE expression -> ^(WHERE_CLAUSE expression);
expression: orExpr;
orExpr: andExpr (OR^ andExpr)*;
andExpr: primaryExpr (AND^ primaryExpr)*;
primaryExpr: parameterExpr | inExpr | compExpr;
無限再帰のために失敗した私のソリューション (しかし、LPAREN^ と RPAREN! がそれを解決するはずだと思いましたか???)....
whereClause: WHERE^ (expression | orExpr);
expression: LPAREN^ orExpr RPAREN!;
orExpr: andExpr (OR^ andExpr)*;
andExpr: primaryExpr (AND^ primaryExpr)*;
primaryExpr: parameterExpr | inExpr | compExpr | expression;
一番下の primaryExpr には、LPAREN と RPAREN を持つ式が追加されていますが、WHERE は orExpr または式にすることができます (つまり、最初の式は括弧を使用することも使用しないこともできます)。
これはおそらく、タイプミスのような単純な問題であり、何時間も見つめ続けていると確信しています。