ANTR3 set the number of accepted characters for a

2019-07-25 10:09发布

I have to create a Lexer which will accept for example an integer only if it has a maximum of 8 digits. Is here an alternative to do it rather than just writing it like this?

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

1条回答
2楼-- · 2019-07-25 10:32

This can be done using a Gated Semantic Predicates like this:

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

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

Details about this kind of predicate, see: What is a 'semantic predicate' in ANTLR?

查看更多
登录 后发表回答