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

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

Пусть некоторая цепочка

z FIRST

G

( FIRST

G

 

 

 

k

 

k

( .

Следовательно, существуют выводы

*

*

(3) zu и (4)

zv,

для некоторых u, v VT*, причём если z < k, то u = v = (см. определение 2.2), которые всегда можно перестроить в левосторонние.

21

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

Мы можем продолжить имеющийся вывод

S * lm

используя правила

wA ,

(1) A , (2) A и

*

и (4)

выводы (3) zu

lm

 

двумя разными способами :

* lm

zv,

22

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

1) S wA w wzu,

*

 

*

 

lm

lm

lm

x

 

 

 

2) S wA w wzv

*

 

*

 

lm

lm

lm

y

 

 

 

 

Остается

 

сопоставить эти два лево-

сторонних вывода с теми, которые участвуют в определении 2.3 LL(k)-грамматик. Здесь в роли цепочки x используется zu, а в роли цепочки y zv.

Очевидно,

G

(x

G

( y {z},

FIRSTk

 

FIRSTk

 

но , что противоречит предположению о том, что G LL(k)-грамматика.

23

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

В частности, если z < k и u = v = , то мы имеем два разных левосторонних вывода одной и той же терминальной цепочки wz. Это означает, что G не однозначная грамматика и, естественно, не LL(k) ни при каком k.

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

24

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

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

Это значит, что существуют два левосторонних вывода:

1)S

2)S

* lm*

lm

wA wA

lm

lm

w * wx, lm w * wy,

lm

в которых

FIRST

G

(x FIRST

G

( y ,

 

 

 

 

k

 

k

 

но .

25

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

 

*

Имеем x

lm

FIRST

G

(x)

 

 

 

k

 

и

*

lm

FIRST

y, и пусть

G

( y {z}.

 

k

 

Согласно определению функции FIRSTGk из

существования этих двух выводов заклю-

чаем, что {z} FIRSTGk (x) FIRSTGk (

{z} FIRST

и, следовательно,

G

( y) FIRST

G

k

k

 

(

z FIRST

G

( FIRST

G

 

 

 

k

 

k

( ,

что входит в противоречие с первоначальным предположением о том, что условие теоремы выполняется.

Достаточность доказана, а вместе с ней

и вся теорема.

26

Свойства LL(k)-грамматик

Определение 2.6. Пусть G = (VN, VT, P, S) —

cfg, и

V *.

Определим функцию

G

*

( ) = {w VT

FOLLOW k

Здесь k — целое.

S

w

* G

FIRST

и

G

( )}.

 

k

 

27

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

Теорема 2.2. Чтобы cfg G = (VN, VT, P, S)

была LL(1)-грамматикой, необходимо и достаточно, чтобы

FIRST

G

( FOLLOW

G

( A))

 

 

1

1

 

FIRST

G

( FOLLOW

G

( A))

 

 

1

1

 

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

.

Ret 46 Ret 169

28

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

Доказательство. Требуется пояснить, что в

формулировке

условия

теоремы аргумент

функции FIRST1G — не цепочка, как было

определено ранее, а множество цепочек.

 

Расширение

области

определения

этой

функции на множества цепочек

W V

*

про-

 

 

 

изводится естественным образом:

 

 

FIRSTG

(W )

FIRSTG (w).

 

 

k

 

k

 

 

 

w W

29

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

Обе части теоремы доказываются методом “от противного”. Как и ранее, не нарушая общности рассуждений, будем считать грамматику G приведённой.

I. Необходимость. Пусть G LL(1)-грам-

матика, но условие не выполнено, т. е. существуют правила A , A P при, и существует c (VT { }), такие, что

c FIRST

G

( FOLLOW

G

( A))

 

 

1

1

 

c FIRST

G

( FOLLOW

G

( A)).

 

 

 

1

1

 

и

30

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