ANTLR4 では、サブルールをスキップさせるために述語をサブルールの前にしか配置できないようです。私の文法では、一部の述語は、サブルールの終わり近くにあるトークンに依存し、その前に 1 つ以上のルール呼び出しがあります。例えば:
date :
{isYear(_input.LT(3).getText())}?
month day=INTEGER year=INTEGER { ... }
この特定の例では、それmonth
は常に 1 つのトークンであることがわかっているため、 によってチェックされる必要があるのは常にトークン 3 ですisYear()
。month
ただし、一般に、ルールを構成するトークンの数は実行時までわかりません。トークン数を取得する方法はありますか?