Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Левая рекурсия и ее устранение

Правило порождения вида AAγ в КС-грамматике называется леворекурсивным, и тогда говорят, что в грамматике имеется левая рекурсия. В дальнейшем будем считать, что грамматика приведенная, т.е. в ней обнаружены и из нее удалены все бесполезные нетерминалы.

При функционировании МПА, построенного по КС-грамматике с левой рекурсией, когда имеется правило порождения вида AAγ, выполнение соответствующего правила перехода (λ, A, q0) → (λ, Aγ–1, q0) будет повторяться бесконечно. Для НМПА это не страшно, так как другие варианты выполнения НМПА все равно найдут (если оно существует) левое каноническое порождение анализируемой цепочки символов. Если же требуется построить ДМПА, который может проверять только единственный вариант левого канонического порождения, такая ситуация недопустима. Поэтому рассмотрим устранение левой рекурсии без изменения порождаемого грамматикой языка.

Пусть имеется правило вида AAγ. Но тогда должно быть также правило вида A → α, где первый символ цепочки α не совпадает с A, так как в противном случае символ A – бесполезный. Цепочки символов, порождаемые этими двумя правилами следующие: α, αγ, αγγ и т.д. Эти же цепочки можно получить другими правилами: A → αA’, A’ → γA’| λ, где A’ – новый нетерминал.

Рассмотренный случай называют непосредственной рекурсией, ее легко обнаружить. Более сложен случай косвенной рекурсии, когда имеется совокупность правил вида AB1γ1, B1B2γ2, …, BnAγn. Тогда вначале косвенную рекурсию нужно свести к непосредственной, сделав следующую замену этой группы правил на правило: AAγn … γ2γ1. При этом надо учесть и другие совокупности правил, аналогичные рассмотренным, в которые входят какие-либо из нетерминалов B1, …, Bn.

 

Пример 6. Пусть задана грамматика простых арифметических выражений (S – начальный нетерминал):

SS + T | T

TT * F | F

F → (S) | a

Устранив левую рекурсию рассмотренным способом, получим правила:

STU

U → + TU | λ

TFV

V → * FV | λ

F → (S) | a

Конец примера.


<== предыдущая страница | следующая страница ==>
LL-разбор КС-грамматики автоматом с магазинной памятью | Преобразование КС-грамматики к обобщенной нормальной форме Грейбах

Дата добавления: 2015-07-26; просмотров: 223; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.007 сек.