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

FIRSTkG ( ) k FIRSTkG ( ) FIRSTkG ( )

Следовательно, учитывая (II.1), (II.2), (II.3), заключаем, что

w FIRST

G

(xy) = FIRST

G

(xuyv) FIRST

G

( ).

 

 

 

k

k

k

 

Из рассуждений I и II следует утверждение леммы.

Что и требовалось.

121

§2.5. Анализ в LL(k)-грамматиках

Вобщем случае анализа в LL(k)- грамматиках непосредственно по нетерминалу и аванцепочке невозможно однозначно определить правило для построения очередной сентенциальной формы.

Рассмотрим, например, несильную LL(2)- грамматику из примера 2.3 :

S aAaa bAba;

A b .

122

Анализ в LL(k)-грамматиках

Согласно алгоритму 2.1 для замены нетерминала A в выводе

 

 

 

 

*

 

 

*

 

 

 

 

S

 

 

 

 

 

wx

 

 

 

lm

wA lm

следует применять

правило A , если

аванцепочка

 

 

 

 

 

G

(x)

принадлежит

 

 

 

 

2

 

u FIRST

 

 

 

 

множеству

 

 

 

 

 

 

 

 

 

 

FIRST

G

( FOLLOW

G

( A)).

 

 

 

 

2

 

 

 

 

 

2

 

Очевидно, что в нашем примере

FOLLOW2G ( A) {aa, ba}.

123

Анализ в LL(k)-грамматиках

Получается так, что следует применять правило A b, если аванцепочка из

FIRST2G (bFOLLOW2G ( A))

FIRSTG (b{aa,ba}) {ba, bb},

или правило

2A , если аванцепочка из

множества

 

 

 

 

 

 

 

FIRST

G

( FOLLOW

G

( A))

 

 

 

2

 

 

2

 

 

FIRST

G

( {aa,ba})

{aa, ba}.

 

 

 

2

 

 

 

 

Если аванцепочка равна ba, то существует неопределённость в выборе правила для замены нетерминала A.

124

Анализ в LL(k)-грамматиках

Её можно разрешить, если для определения правила, по которому следует раскрывать нетерминал, помимо нетерминала и аванцепочки, использовать ещё один параметр: TA, L — так называемую LL(k)-таблицу, ассоциированную с двумя

k

индексами: A VN и L 2VT*, где множество L вычисляется с учётом следующих соображений.

125

Анализ в LL(k)-грамматиках

Пусть имеется вывод S * wA в некоторой lm LL(k)-грамматике. Вспоминая теорему 2.1,

нетрудно сообразить, что критерием выбора правила A для продолжения этого вывода может служить факт принадлежности текущей аванцепочки множеству

FIRSTkG ( ) FIRSTkG ( ) k FIRSTkG ( )

FIRSTkG ( ) k L,

где L FIRSTkG ( ).

126

Анализ в LL(k)-грамматиках

Это множество L и есть тот второй индекс таблицы TA, L, о котором идёт речь.

По аванцепочке таблица TA, L выдаёт правило, которое следует использовать для замены нетерминала A в текущей левосентенциальной форме.

Ясно, что для любой cfg число таких LL(k)- таблиц конечно, и все таблицы, необходимые для анализа любой цепочки в данной грамматике, могут быть построены заблаговременно.

127

Анализ в LL(k)-грамматиках

Они используются k-предсказывающим алгоритмом анализа в магазинных цепочках взамен нетерминалов (см. Пример 2.8 далее).

Теперь дадим определение LL(k)-таблиц и способ построения множества LL(k)-таблиц, необходимых и достаточных для анализа в данной LL(k)-грамматике (см. алгоритм 2.2 далее).

128

Анализ в LL(k)-грамматиках

Определение 2.11. Пусть G = (VN,

cfg. Для каждого A VN и

L 2

V *

T

 

 

VT, P, S) —

k определим

TA, L LL(k)-таблицу, ассоциированную с A

и L, как цепочке

функцию, которая по данной аван-

u V

*

k

выдает:

 

 

 

 

T

 

 

1)либо значение error,

2)либо A-правило и конечный список под-

 

V

*

k

множеств цепочек из

,

 

T

3) либо значение undefied.

129

LL(k)-таблицы

1) TA, L(u) = error,

если не существует ни одного правила вида

A P, такого, что

 

G

( )

k

L;

k

 

u FIRST

 

 

2) TA, L(u) = (A , Y1, Y2,…, Ym ),

если A единственное правило из P,

такое,

= x0

что

u

 

B1x1B2

FIRST

G

 

k

Bm xm,

( )

k

L;

при этом,

 

 

Bi VN, xj VT*, то

если

Y

=FIRST

G

(x B

x

B

... B

x

)

 

 

L,

 

k

i

k

i i 1

i 1

i 2

m

m

 

 

 

i = 1, 2, …, m; j = 0, 1, …, m; m 0;

130

Соседние файлы в папке lectures