我写了这个语法(*.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+
;
它做到了!!