输入
(001)
grammar G;
message
: '(' seqnum ')'
;
seqnum
locals [int i = 0;]
: ( {$i == 3}? DIGIT {$i++;} )+
;
DIGIT
: [0-9]
;
规则消息没有产生可行的替代方案:
[@0,0:0='(',<2>,1:0]
[@1,1:1='0',<3>,1:1]
[@2,2:2='0',<3>,1:2]
[@3,3:3='1',<3>,1:3]
[@4,4:4=')',<1>,1:4]
[@5,5:4='<EOF>',<-1>,1:5]
line 1:1 no viable alternative at input '0'
如果将规则“消息”重写为
message
: '(' DIGIT DIGIT DIGIT ')'
;
它解决了这个问题。为什么我在第一种情况下得到错误?