我要创建一个词法分析器将例如只接受,如果它有一个最大的8位整数。 这里是一个替代去做,而不是仅仅写它这样吗?
INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
我要创建一个词法分析器将例如只接受,如果它有一个最大的8位整数。 这里是一个替代去做,而不是仅仅写它这样吗?
INTEGER : (DIG | DIG DIG | DIG DIG DIG | ...)
这可以通过使用门控语义断言这样做:
INTEGER
@init{int n = 1;}
: ({n <= 8}?=> DIGIT {n++;})+
;
fragment DIGIT : '0'..'9';
关于这种谓词的详细信息,请参阅: 什么是ANTLR一个“语义谓词”?