ANTR3设置令牌的可接受字符数

时间:2012-04-29 16:04:01

标签: parsing antlr antlr3

我必须创建一个Lexer,它只接受一个整数,如果它最多有8位数。这是一个替代方法,而不是像这样写吗?

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

1 个答案:

答案 0 :(得分:2)

这可以使用 Gated Semantic Predicates 完成,如下所示:

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

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

有关此类谓词的详细信息,请参阅:What is a 'semantic predicate' in ANTLR?