Я использую ANTLR для создания распознавателя для Java-подобного языка и используется следующие правила распознавать общие типы:жизнеспособной альтернативы ошибки
referenceType
: singleType ('.' singleType)*
;
singleType
: Identifier typeArguments?
;
typeArguments
: '<' typeArgument (',' typeArgument)* '>'
;
typeArgument
: referenceType
;
Теперь для следующего входного заявления, ANTLR не производит «нет жизнеспособной альтернативной» ошибки.
Iterator<Entry<K,V>> i = entrySet().iterator();
Однако, если я помещаю пробел между двумя последовательными символами '>', ошибок не возникает. Это говорит о том, что ANTLR не может отличить вышеуказанное правило от правила, используемого для распознавания сдвиговых выражений, но я не знаю, как изменить грамматику, чтобы устранить эту двусмысленность. Любая помощь будет оценена по достоинству.