Я взламывал свою грамматику ANTLR4, пытаясь устранить все ее двусмысленности, ошибки правил лексера за раз. Кажется, ничто из того, что я делаю, не решает проблемы. В частности, эти правила лексера, которые вызывают у меня ту же ошибку, следующие:
Identifier: Letter (Letter | Digit | Und)+;
Keyword : Letter+;
Param: Number | Identifier;
Statement: Keyword Lpr Param+ Rpr;
Block: Lbc Statement+ Rbc;
Как вы могли заметить, у всех них есть общий токен Letter. Этот и другие токены определяются как:
fragment Digit: '0'..'9';
fragment Letter: ('A'..'Z');
Und: '_';
Lpr: '(';
Rpr: ')';
Я не могу найти, как это могло вызвать двусмысленность, если только ANTLR не допускает множественное определение с потенциально идентичными результатами.