我必须创建一个 Lexer,它仅在最多 8 位数字时才接受例如整数。这里有替代方法而不是像这样写吗?
INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
这可以使用像这样的门控语义谓词来完成:
INTEGER
@init{int n = 1;}
: ({n <= 8}?=> DIGIT {n++;})+
;
fragment DIGIT : '0'..'9';
有关这种谓词的详细信息,请参阅:什么是 ANTLR 中的“语义谓词”?