Antlr4 ANTLR 4:如果使用谓词,则没有可行的替代方案
输入 (001) 规则消息不产生可行的替代方案:Antlr4 ANTLR 4:如果使用谓词,则没有可行的替代方案,antlr4,Antlr4,输入 (001) 规则消息不产生可行的替代方案: [@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' 它解决了这个问
[@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'
它解决了这个问题。
为什么在第一种情况下会出现错误?您的谓词说“仅当I
正好是3时才匹配以下内容”。由于i
最初为0,因此谓词表示不会匹配数字
ANTLR中的一个一般规则是仅在绝对必要时使用谓词,因为它们可能会带来显著的性能开销,并且在出现问题时很难调试
编辑:您的谓词在Java中等同于以下内容:
for (int i = 0; i == 3; i++) {
// do this 3 times
}
如果我使用下一个规则seqnum locals[int I=1;]:({$I Tnank you!您能提供与regexp的\d{2,3}
和\d{3}
等价的ANTLR吗?或者唯一的方法是(数字)
第一位和第二位的最佳等效于\d{2,3}
将是数字
。最佳等效于\d{3}
将是数字
。最佳等效于\d{2,3}会是数字吗?这是陈述还是问题?当我得到输入12
和规则seq:INT INT INT;
的行1:2缺少INT时,那么对于regexp\d{1,4}
我是否需要下一个规则(数字|数字|数字|数字)
?这是一个语句。与\d{1,4}
最等效的是数字(DIGIT(DIGIT-digital?)
(现在应该有足够的例子来构造任何下限/上限)。
message
: '(' DIGIT DIGIT DIGIT ')'
;
for (int i = 0; i == 3; i++) {
// do this 3 times
}