antlr4.7.2,右递归和二义性

antlr4.7.2, right recursion and ambiguity

Antlr 4.7.2 解析器使用以下不明确的右递归上下文无关文法无法解析 fed:

grammar ambrd7;
s : c s | b s | 'd' | 'e' 'd'; // fails on 'fed'
c : 'f' 'e' ;
b : 'f' ;
WS: [ \t\r\n]+ -> skip ;

用于测试 antlr 解析器的 TestRig 工具发出一条错误消息:no viable alternative at input 'fed',而数学上此语法生成 feds 通过几个推导:

s --> c s --> 'f' 'e' s --> 'f' 'e' 'd'
s --> b s --> 'f' s --> 'f' 'e' 'd'

有谁知道为什么解析器无法解析 fed

谢谢,

埃里克

真奇怪。在 vscode 中,此语法按预期工作:

对于您看到的失败,我唯一的想法是您使用了过时的测试装置。