Превратить грамматику в грамматику LL1

#parsing #grammar #text-parsing #left-recursion

#синтаксический анализ #грамматика #синтаксический анализ текста #левая рекурсия

Вопрос:

Я готовлюсь к завтрашнему экзамену и пересматриваю результаты за предыдущие годы.

В тесте была грамматика.

 Expression -> Foo " " Bar "end"
Foo -> [a-z0-9]  | Expression
Bar -> Expression Foo | a*b*c 
 

Я пытался и потратил часы на изучение того, как это сделать, но не могу понять.

Я взглянул на замену вещей на epsilion и тому подобное, но не чувствую уверенности.

Я думаю, что мне нужно создать Foo’и Bar’, а затем просто добавить правила epsilon, но я не уверен.

Не мог бы кто-нибудь, пожалуйста, показать мне (просто) _как изменить его на грамматику с поддержкой LL (1)

Заранее спасибо

Ответ №1:

Насколько я помню грамматику LL-1, смотрите вперед на 1 символ. Ваша цель — устранить двусмысленность и левую рекурсию. Все, что вам нужно — использовать левую факторизацию. Сначала взгляните на это.