我必须创建一个Lexer,它只接受一个整数,如果它最多有8位数。这是一个替代方法,而不是像这样写吗?
INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
答案 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?