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 匹配 c 语言中的 int 字面量,FLOATING_POINT_LITERAL 匹配 c 语言中的 float 字面量。但是当词法分析器遇到 float 时,例如 3.44,3 将匹配规则 DECIMAL_LITERAL。

我该怎么做才能让它识别浮点文字?

4

1 回答 1

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 语法

于 2013-02-08T19:27:02.760 回答