Если у вас есть грамматика, которая имеет неоднозначные правила, вы получите несколько толкований.Вам не нужно настаивать на том, что грамматика устраняет двусмысленность;Вы можете просто согласиться с тем, что что-то неоднозначно, и проанализировать его несколькими способами:
fruit flies like an arrow.
Результат анализа - множественные интерпретации.
Теперь, чтобы такой язык был полезным читателю, либо он должен быть доволен двусмысленностью, либо вы должны дать ему способ ее разрешить.(В этом примере я решил для вас, что вы рады двусмысленности, потому что я не дал вам способа ее решить!).Или можно дать читателю что-то с неоднозначным анализом, способом выбрать, какой анализ имеет смысл, и он отвергает неуместные синтаксические анализы.
Я могу сделать это для приведенного выше случая, сказав вам, что я имею в виду "fruit => watermelon ".
Компьютерные грамматики не отличаются, но большинству программистов не нужен неоднозначный код.Так что, в общем, разработчики языка любят для определения однозначных грамматик.На практике они не достигают успеха, и вы получаете забавные правила языка, такие как «Если это можно интерпретировать неоднозначно, то интерпретируйте это этим способом».