Алгоритм Устранение прямой левой рекурсии

 

Вход: КС-грамматика .

Выход: Эквивалентная КС-грамматика без прямой левой рекурсии, т.е. без правил вида

Шаг 1. Вывести из грамматики все правила для рекурсивного нетерминала :

Шаг 2. Внести новый нетерминал так, чтобы он описывал любой «хвост» строки, порождаемой рекурсивным нетерминалом :

Шаг 3. Заменить в рекурсивном правиле для правую часть, используя новый нетерминал и все нерекурсивные правила для так, чтобы генерируемый язык не изменился:

Шаг 4. Пополнить множество нетерминалов грамматики новым нетерминалом . Пополнить множество правил грамматики правилами, полученными на шаге 3.

Шаг 5. Повторить действия шагов 1-4 для всех рекурсивных нетерминалов грамматики, после чего полученные множества нетерминалов и правил принять в качестве и

 

ПримерДанаграмматика с правилами .

Шаг алгор. Действия и результ.

1.

2.

3.

4. VN ={S,A,B,C,Z}, P’=

После устранения прямой левой рекурсии получим эквивалентную грамматику с правилами