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

Необходимое условие LL(1)

Следовательно, грамматика G не LL(1), что противоречит первоначальному предположению.

Противоречие можно видеть и в том, что существуют два разных левосторонних вывода для одной и той же терминальной цепочки wcz. То есть грамматика G — неоднозначна и не может быть LL- грамматикой по самому замыслу этого класса КС-грамматик.

41

Необходимое условие LL(1)

Случай 5: c = ,

, ,

*

*

G

G

FOLLOW1G

a = b = ,

( A).

Как и в случае 4,

 

 

 

G

( A)

означает

 

 

1

 

FOLLOW

 

 

 

 

 

wA , такого, что

существование вывода S

*

G

.

 

 

 

 

 

 

 

 

 

 

 

*

 

 

 

 

 

 

G

 

 

 

 

 

 

Его можно перестроить в левосторонний и продолжить двумя способами:

1) S * wA

lm

2) S * wA

lm

lm

lm

w * w

lm

w * w

lm

* lm*

lm

w, w.

42

Необходимое условие LL(1)

Имеем

 

G

 

G

( y) { },

1

1

 

FIRST

 

(x) = FIRST

 

хотя по-прежнему . Следовательно, грамматика G не LL(1), что противоречит первоначальному предположению.

Противоречие можно видеть и в том, что существуют два разных левосторонних вывода для одной и той же терминальной цепочки w.

Необходимость доказана.

43

Достаточное условие LL(1)

II. Достаточность. Пусть условие теоремы выполнено, но грамматика G не LL(1).

Тогда

существуют

два

левосторонних

вывода вида

w wx,

 

 

1) S

wA

 

 

 

*

 

*

 

 

 

 

 

 

 

2) S

lm

lm

lm

 

 

wA

w wy,

 

 

 

*

 

*

 

 

 

lm

lm

lm

 

( y), но .

в которых

 

G

G

FIRST1 (x) = FIRST1

 

Поскольку * x и

lm

* lm

y, то

FIRST1G (x) FIRST1G ( ) FIRST1G ( FOLLOW1G ( A)), FIRST1G ( y) FIRST1G ( ) FIRST1G ( FOLLOW1G ( A)).

44

Достаточное условие LL(1)

Пусть

Тогда

FIRST

G

(x) FIRST

G

( y) {z}.

 

 

1

1

 

z FIRST

G

( ) FIRST

G

( )

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

1

 

 

 

 

 

FIRST

G

( FOLLOW

G

( A)) FIRST

G

( FOLLOW

G

( A)),

 

 

 

 

1

1

 

 

1

1

 

а это противоречит первоначальному предположению о том, что условие теоремы выполнено, то есть что

FIRST1G ( FOLLOW1G ( A)) FIRST1G ( FOLLOW1G ( A)) ,

Достаточность доказана и вместе с ней и вся теорема.

45

Необходимое и достаточное условие LL(1)

Следствие 2.1. Теорему 2.2 можно переформулировать следующим образом:

КС-грамматика G является LL(1)-грам- матикой тогда и только тогда, когда для

каждого множества A-правил

A 1 2 n

выполняются следующие условия (ср. 28) :

1)

 

G

i

 

 

 

G

j

)

 

 

 

1

 

 

1

 

 

 

 

FIRST

 

(

) FIRST

 

 

(

 

 

 

при i j, 1 i, j n;

 

 

 

 

 

2) если i

*

, то

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

G

 

G

( )

FOLLOW

G

( A)

 

 

 

FIRST

 

 

 

 

 

 

 

 

 

1

j

 

j i.

1

 

 

для всех j: 1 j

n,

 

 

 

 

46

Необходимое и достаточное условие LL(1)

Определение 2.7. Контекстно-свободная

грамматика G = (VN, VT, P, S) называется

сильной LL(k)-грамматикой, если она удовлетворяет условию теоремы 2.2:

FIRST

G

( FOLLOW

G

( A))

 

 

k

k

 

FIRST

G

( FOLLOW

G

( A))

 

 

k

k

 

для всех A VN, , (VN VT)*, таких, что существуют правила A , A P, .

Ret 113

47

Необходимое и достаточное условие LL(1)

Следствие 2.2. Каждая LL(1)-грамматика является сильной.

Однако следующий пример показывает, что для k > 1 не всякая LL(k)-грамматика является сильной.

48

Пример 2.3. Несильная LL(2)-грамматика. Рассмотрим cfg

G = ({S, A}, {a, b}, P, S), где

P = {S aAaa bAba, A b }.

Используя теорему 2.1, проверим, что грамматика G LL(2).

I.Проведём тестирование относительно

нетерминала S:

 

Фактически, единственное

FIRST

G

(aAaa ) = {aa, ab},

возможное

= .

 

 

 

 

2

 

 

 

G

(bAba ) = {bb} независимо от ,

FIRST2

FIRST2G (aAaa ) FIRST1G (bAba ) =

 

= {aa, ab} {bb} =

.

Ret 122

Ret 125

 

 

 

 

49

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

II. Проведём тестирование относительно нетерминала A. При этом следует учесть, что

S aAaa и S bAba, так что {aa, ba}.

Тогда при = aa:

FIRST

G

 

2

FIRST2G

(baa) = {ba},

FIRST

G

( aa) = {aa},

 

 

2

 

 

G

 

 

(baa) FIRST2

( aa) = {ba} {aa}

= ;

при = ba:

 

G

(bba) = {bb},

 

 

 

G

( ba) = {ba},

2

 

 

2

FIRST

 

 

 

FIRST

 

 

 

G

(bba)

 

 

G

( ba) = {bb} {ba} = .

2

 

2

FIRST

 

 

FIRST

 

 

 

 

Так что G — действительно LL(2)-грам- матика.

50

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