1

我必须创建一个 Lexer,它仅在最多 8 位数字时才接受例如整数。这里有替代方法而不是像这样写吗?

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

1 回答 1

2

这可以使用像这样的门控语义谓词来完成:

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

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

有关这种谓词的详细信息,请参阅:什么是 ANTLR 中的“语义谓词”?

于 2012-04-29T17:03:03.947 回答