我试图在Antlr中定义一个纯lexer语法,该语法以十六进制表示法识别32位。
现在我有:
lexer grammar Grammar;
WS : [ rtn]+ -> skip;
fragment HexDigit : ([0-9]|[A-f]|[a-f]);
fragment HexDigitNoZero : ([1-9]|[A-f]|[a-f]);
fragment HexNumber : (HexDigitNoZero)(HexDigit)*;
fragment Eight : HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit HexDigit;
Hex :'0x'Eight;
我想知道是否有任何方法可以在纯lexer语法中定义范围8。就像Flex处理"a"{8}一样。
您可以使用谓词(与操作相同,但末尾有?
)
(HexDigitNoZero)(HexDigit)* {getText().lenght!= 8}? {do_something;};
从技术上讲,这是纯lexer,但使用gramar操作