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

Пример не сильной LL(2)-грамматики

Но поскольку, очевидно, что

FOLLOW

G

(S ) { },

 

2

 

то, учитывая существование выводов

S aAaa и S bAba,

заключаем, что

FOLLOW

G

( A) {aa, ba}.

 

2

 

Проверка условия сильной LL(2)-грам- матики показывает, что

51

Пример не сильной LL(2)-грамматики

для S:

FIRST

G

 

2

(aAaa{ })

FIRST

G

 

2

(bAba{ }) =

{aa, ab} {bb} = ,

а для A:

 

( {aa, ba}) =

2 (b{aa, ba})

2

FIRSTG

FIRSTG

 

= {ba, bb} {aa, ba} = {ba} .

Таким образом, грамматика G LL(2), но не сильная LL(2)-грамматика.

Ret 120

52

Теорема 2.3. Если G = (VN, VT, P, S) cfg,

и G — леворекурсивна, то G — не LL(k)- грамматика ни при каком k.

Доказательство будем проводить в предположении приведённости грамматики G, поскольку, как отмечалось ранее, бесполезные нетерминалы не влияют на выполнение LL(k)-критерия.

Ret 165 Ret 167

53

Леворекурсивная грамматика — не LL(k) при любом k

Так как грамматика G леворекурсивна,

 

 

 

 

 

 

 

 

 

 

то существует вывод вида A

 

A , где ,

G

 

 

 

 

 

 

 

 

 

хотя и не исключается,

что

 

 

 

 

.

 

 

 

 

 

 

A

G

 

 

Напомним, что

A

 

означает, что

G

 

 

 

 

 

 

 

A .

существует вывод вида A

 

 

 

 

*

 

G

 

G

 

 

 

 

 

 

 

 

Отметим, что независимо от того, = A

или

A , должно существовать ещё

какое-то

правило

для

A,

 

скажем, A

( ), ибо в противном случае ничего,

 

 

i

 

кроме A

*

A ,

где i 0, вывести из

G

нетерминала A было бы невозможно, что противоречило бы приведённости G.

54

Леворекурсивная грамматика — не LL(k) при любом k

Итак, вывод вида A состоит из шагов вида

G

A в общем случае

A

 

A1 1

 

A2 2 1

 

G

G

G

 

 

Am m ... 1 = A ,

 

G

где Am = A, = m m – 1

Очевидно, что в

...

 

G

 

... 1.

этом

Am – 1 m – 1

выводе

... 1

 

 

G

были

использованы правила

A A1 1, A1 A2 2,…, Am – 1 Am m,

где Am = A.

55

Леворекурсивная грамматика — не LL(k) при любом k

Хотя бы одно из этих правил должно иметь альтернативу, не начинающуюся ни на один из нетерминалов A1, A2, … , Am (иначе грамматика G была бы неприведённой).

Пусть, например, существует

Aj Aj+ 1 j+ 1 | , где Aj+ 1 j+ 1.

56

Леворекурсивная грамматика — не LL(k) при любом k

Так как грамматика G — приведённая, существует сентенциальная форма, в частности, левостороннего вывода, в которой участвует нетерминал A, например

в выводе S

*

который может быть

wA ,

 

 

 

lm

 

 

продолжен следующим образом:

 

S wA

wA i

wA1 1 i

*

 

 

*

 

*

 

 

 

 

 

lm

*

 

lm

G

lm

 

 

 

 

 

 

 

 

wAj j 1 i .

 

Далее

lm

этот вывод можно продолжить

 

двумя способами:

57

Леворекурсивная грамматика — не LL(k) при любом k

1)

wAj+ 1 j+ 1 j1 i

wAm m1 i =

 

 

 

 

 

*

 

 

 

 

G

 

 

lm

 

 

 

= wA

*

wAj j1

 

 

 

 

 

w j1

 

 

i+ 1

 

 

i+ 1

 

i + 1

 

 

 

lm

 

 

G

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

 

wzx x r i + 1t,

 

 

 

 

 

lm

j 1

 

 

 

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

2)

 

 

*

 

 

 

 

w j1 i wzxjx1r it,

 

 

 

G

 

lm

 

 

 

 

y

предполагая, что ввиду приведённости

грамматики,

существуют выводы

 

z,

x , … , x , r, t,

*

 

*

 

*

 

*

*

lm

j

lm

j

1 lm

1

lm

lm

где w, z, x , …, x

, r, t V *.

 

 

 

 

j

1

 

T

 

 

58

Леворекурсивная грамматика — не LL(k) при любом k

Эти два вывода можно сопоставить с теми, которые фигурируют в определении 2.3 LL(k)-грамматик, учитывая, что

x = zxj…x1ri+ 1t, а y = zxj…x1rit.

Если r , то каким бы большим ни было k, всегда путем выбора i можно добиться,

чтобы

FIRSTGk (x) FIRSTGk ( y

при том, что в точке, где эти два вывода разошлись, были применены различные альтернативы для раскрытия нетерминала Aj:

Aj Aj+ 1 j+ 1 | , Aj+ 1 j+ 1.

59

Леворекурсивная грамматика — не LL(k) при любом k

Если r = , то имеем два разных левосторонних вывода одной и той же терминальной цепочки wzxj x1t. То и другое означает, что грамматика G — не LL(k) ни при каком k.

Следствие 2.3. Итак, мы имеем два достаточных признака для того, чтобы считать КС-грамматику не LL-грамматикой.

Это — неоднозначность и леворекурсивность.

60

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