DECIMAL_LITERAL : ('0' | '1'..'9' ('0'..'9')*) (INTEGER_TYPE_SUFFIX)? ;
FLOATING_POINT_LITERAL
: ('0'..'9')+
(
DOT ('0'..'9')* (EXPONENT)? (FLOAT_TYPE_SUFFIX)?
| EXPONENT (FLOAT_TYPE_SUFFIX)?
| FLOAT_TYPE_SUFFIX
)
| DOT ('0'..'9')+ (EXPONENT)? (FLOAT_TYPE_SUFFIX)?
;
DECIMAL_LITERAL匹配c语言中的int literal,FLOATING_POINT_LITERAL匹配c语言中的float literal。但是当词法分析器遇到一个浮点数,例如3.44时,3将匹配规则DECIMAL_LITERAL。
我该怎么做才能识别浮动文字?
答案 0 :(得分:0)
您将规则合并为一个词法分析器规则,然后根据您是否看到DOT
更改类型。这应该会给你一个想法,虽然它与你上面写的不完全相同。
DECIMAL_LITERAL
: ('0'..'9')+
(
DOT { _ttype = FLOATING_POINT_LITERAL; } ('0'..'9')* (EXPONENT)? (FLOAT_TYPE_SUFFIX)?
| EXPONENT (FLOAT_TYPE_SUFFIX)?
| FLOAT_TYPE_SUFFIX
)
| DOT { _ttype = FLOATING_POINT_LITERAL; } ('0'..'9')+ (EXPONENT)? (FLOAT_TYPE_SUFFIX)?
;
有关更完整的示例,请参阅http://www.antlr3.org/grammar/cgram/
中的C语法