1

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 | ...)
Spektor
  • 455
  • 1
  • 4
  • 12

1 Answers1

2

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?

Community
  • 1
  • 1
Bart Kiers
  • 161,100
  • 35
  • 287
  • 281