1

たとえば、最大8桁の場合にのみ整数を受け入れるレクサーを作成する必要があります。このように書くのではなく、これを行うための代替手段はここにありますか?

INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
4

1 に答える 1

2

これは、次のようなゲート付きセマンティック述語を使用して実行できます。

INTEGER
@init{int n = 1;}
  :  ({n <= 8}?=> DIGIT {n++;})+
  ;

fragment DIGIT : '0'..'9';

この種の述語の詳細については、以下を参照してください:ANTLRの「セマンティック述語」とは何ですか?

于 2012-04-29T17:03:03.947 に答える