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

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

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

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

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

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

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

Может ли кто-нибудь показать мне (просто) _ как изменить его на грамматику, поддерживающую LL (1)

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


person James    schedule 30.10.2011    source источник


Ответы (1)


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

person mishadoff    schedule 30.10.2011