在ANTLR v4中为双类型定义规则

时间:2015-10-23 10:21:28

标签: java metaprogramming antlr4

写了这个语法(* .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'没有可行的选择 然后是nullPointerException上的visit()

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

我做错了什么?

1 个答案:

答案 0 :(得分:1)

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

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

它成功了!!