Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
tfg_lecture.doc
Скачиваний:
164
Добавлен:
16.03.2015
Размер:
2.63 Mб
Скачать

4.4. Устранение левой рекурсии и левая факторизация

В целом ряде приложений требуется, чтобы грамматика рассматриваемого языка не содержала левой рекурсии. Наличие леворекурсивных правил в исходной грамматике не фатально, так как для любой КС-грамматики существует эквивалентная грамматика без левой рекурсии.

Рассмотрим случай когда правила грамматики саморекурсивны, то есть левая часть правила и край правой части совпадают. Пусть нетерминал A имеет m леворекурсивных правил

A A i для 1 i m

и n правил

A j для 1 j n ,

которые не являются леворекурсивными (отметим, что отсутствие последних делает A тупиком).

Заменив эти правила на правила

A j <список A> для 1 j n

<список A> i <список A> для 1 i m

<список A> ,

где <список A> - новый нетерминал, мы получим эквивалентную группу правил без левой рекурсии.

Пример 4.7. Самой короткой грамматикой для представления идентификатора является леворекурсивная грамматика

<И> б<И>б<И>ц,

где б - любая буква, а ц - любая цифра. В данной грамматике два леворекурсивных правила и одно правило без левой рекурсии. Заменяя их на правила

<И> б<И1>

1> б<И1> ц<И1> ,

мы получим обобщенную праворекурсивную грамматику идентификатора. Заметим, что исключение аннулирующего правила приведет нас к грамматике из примера 4.3. 

Если в грамматике имеется группа правил вида

A  1... n ,

то цепочку можно “вынести за скобку” и преобразовать данную группу правил к виду

A B

B 1... n .

Этот прием носит название левой факторизации и его необходимо знать для ряда приложений.

Упражнения

4.1. В грамматике

S abAcDkY

A nmDkyvaxYejab

D ghYokh

Y fd

устраните правила

A nmDkyvaxYejab

D ghYokh

и проведите декомпозицию относительно Y. Подсчитайте количество правил результирующей грамматики и грамматики до проведения преобразований.

4.2. Исключите тупики из следующих грамматик:

(а)

S aBcDkLMp L f M

B cLpDqpDcf M LkpMLc

D f Drf pq K r F

F abcab

(б)

S ABBCkL A aAbLc

B BSAL L cBjp

C QSdC Q qQaC

M xNyMzSh N xCvwM

(в)

S BACBAL C QSdC

A aAbBcC Q qQaC

B BSALg M xNyMzSh

L cBjCp N xCvwM

4.3. Устраните аннулирующие правила из следующих грамматик:

(а)

S abCDeKp

C dSde

D dDDDef K

K emcf

(б)

S aSbSbSaS

(в)

S ABC A BB

B CCa C AAb

4.4. Устраните цепные правила из грамматики

E E+TT

T TFF

F (E)a

4.5. Найдите приведенную грамматику, эквивалентную грамматике

S AB A CD

B DE C Sa

D Sb E Sc

4.6. Устраните левую рекурсию в следующих грамматиках:

(а)

E E+TE-TT-T

T TFT/FF

F (E)a

(б)

S AB

A AaAbde

B qKrBBfBg

K vSw

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]