たとえば、最大8桁の場合にのみ整数を受け入れるレクサーを作成する必要があります。このように書くのではなく、これを行うための代替手段はここにありますか?
INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
これは、次のようなゲート付きセマンティック述語を使用して実行できます。
INTEGER
@init{int n = 1;}
: ({n <= 8}?=> DIGIT {n++;})+
;
fragment DIGIT : '0'..'9';
この種の述語の詳細については、以下を参照してください:ANTLRの「セマンティック述語」とは何ですか?