【发布时间】:2013-11-22 00:07:35
【问题描述】:
我的词法分析器规则的一个大大简化的版本(在更大的语法中)如下所示:
fragment HEX_DIGIT : [0-9A-F] ;
fragment DIGIT : [0-9] ;
SCIENTIFIC : 'E' [+-] ;
INTEGER : DIGIT+ ;
HEX_INTEGER : HEX_DIGIT+ ;
FLOAT_ZERO : '0'* '.' '0'+ ;
FLOAT : DIGIT* '.' DIGIT+ ;
这里的问题在于00E+00 等输入。我想要的标记是'00'、'E+'、'00'。然而,Antlr 走的是贪婪路线,将“00E”解析为 HEX_INTEGER,并在完整的词法分析器中生成“+”和“00”标记。
对于在词法分析器中处理这种特殊情况有什么建议吗? _input.LA() 技巧似乎不起作用,因为我们在字符级别进行操作,所以我并不总是确定我必须向前看多远才能在十六进制数字末尾寻找特殊的“E+”序列。
【问题讨论】: