在 ANTLR v4 中定义双精度类型的规则



写了这个语法(*.g4(:

ID  : [a-zA-Z]+;
INT : [0-9];
DBL : INT+ (PT INT+)?;    
PT  : '.';
...
prog: stat+;
stat: expr NEWLINE              # printExpr
    | ID EQL expr NEWLINE       # assign
    | 'clear'                   # clear
    | NEWLINE                   # blank
    ;
expr: expr op=(MUL|DIV) expr    # MulDiv
    | expr op=(ADD|SUB) expr    # AddSub
    | DBL                       # double
    | ID                        # id
    | LBR expr RBR              # parens
    ;

我的 ANTLR 和 Java 文件编译没有问题,但如果我运行此输入:

193.2
a =5.2
b= 6
c= a+b*2.2
c

b= 6行 3:3 有问题,输入"6"没有可行的替代方案然后是visit()上的nullPointerException.

我认为我的expr规则中可能存在一些歧义。

我做错了什么?

发现问题!将我以前的DBL定义为:

dbl : INT+ PT INT+
    | PT INT+
    | INT+
    ;

它做到了!!