2012-06-13 79 views
0
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匹配INT在C語言和FLOATING_POINT_LITERAL匹配字面漂浮在C language.But字面時詞法分析器滿足浮子,如3.44,3將匹配規則DECIMAL_LITERAL。ANTLR 2規則歧義

我該怎麼做才能讓它識別浮點文字?

回答

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)? 
; 

更完整的例子中看到我的C語法在http://www.antlr3.org/grammar/cgram/