Вы правы - начиная с 'c' на входе, нет способа решить, следует ли рассматривать это как 'A' или 'B'. Я сомневаюсь, что есть что-то, что действительно может разобрать это правильно - это просто неоднозначно. Использование другого типа парсера не поможет; вам действительно нужно изменить язык.
Существуют некоторые формальные методы обнаружения таких двусмысленностей, но я с трудом могу себе представить, что с ними так мало грамматики Один простой способ выявить эту конкретную проблему - мысленно упорядочить ее в дерево:

Две строки, выходящие из поля 'c', представляют конфликт уменьшения / уменьшения. Нет причин предпочитать один путь от 'c' до 'E' другому, поэтому грамматика неоднозначна.