我写了这个语法(* .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
规则中可能存在一些歧义。
我做错了什么?
答案 0 :(得分:1)
DBL
定义为:
dbl : INT+ PT INT+
| PT INT+
| INT+
;
它成功了!!