Удалению левой рекурсии в КС-грамматиках

advertisement
Тема 14: Удаление левой рекурсии в контекстно свободных
грамматиках
Определение: Грамматика, имеющая правила вида A->Aα называется
грамматикой с левой рекурсией.
Для приведения грамматики в одну из нормальных форм
часто
необходимо избавиться от левой рекурсии.
Теорема: Для любой контекстно-свободной грамматики можно построить
эквивалентную КСГ, которая не содержит левую рекурсию.
Алгоритм:
Пусть дан нетерминал A и правила, имеющие общий вид A->, где
(VTVN)*. Эти правила можно разделить на 2 вида:
1. Правила с левой рекурсией A->A1, A->A2, ..., A->Am.
2. Правила без левой рекурсии и имеющие общую форму A->β1,
A->β2,..., A->βn. Общий вид этих правил будет:
1. A->Аi, i[1,m]
2. A->βj, j [1,n]
В правилах второго типа нет левой рекурсии. Меняем правила
грамматики. Вместо этих правил напишем новые. Возможны 2 варианта:
I вариант (без -продукций) для всех i и для всех j, выше
приведенные правила заменяются на:
1. A->jY
2. A->j
3. Y->i
4. Y->iY, где Y новый нетерминальный символ.
II варинат (с -продукциями) для всех i и для всех j
1. A->jY
2. Y->
3. Y->iY, где Y новый нетерминальный символ.
Используя любой из этих двух методов граматика будет без левой
рекурсии.
Download