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

Пример 2.1: вычисление функции при k = 1

Получаем

(FIRST1G ( AS) 1 L) {a, b} 1 { } {a, b},

(FIRST1G ( ) 1 L) { } 1 { } { },

и тогда

(FIRSTG ( AS) L) (FIRSTG ( ) L)

 

1

1

1

1

{a,b}

 

 

(I)

 

 

{ } .

 

 

211

Пример 2.1: вычисление функции при k = 1

Имеем также два альтернативных правила для нетерминала A: A aA, A b.

Требуется вычислить

(FIRST

G

(aA)

L) (FIRST

G

(b) L),

 

 

 

 

1

 

1

1

1

где L (A) = {{ , a, b}}.

 

 

Получаем

 

 

 

 

(FIRST

G

(aA) L) {a} { a, b} {a},

 

 

1

 

 

1

1

 

 

(FIRST

G

(b) L) {b} { , a,b} {b},

 

 

1

 

 

1

1

 

 

и тогда

 

 

(aA) L) (FIRSTG (b) L)

(FIRSTG

1

 

 

1

1

 

1

{a} {b} .

 

 

(II)

212

Пример 2.1: вычисление функции при k = 1

Так как оба пересечения (I) и (II) пусты, то данная грамматика G действительно LL(1)-грамматика.

213

 

 

 

j

( A, B) ( A, B)

 

 

 

 

 

Теорема 2.8. Пусть G = (VN, VT, P, S) — cfg.

Алгоритм 2.6 правильно вычисляет функцию (A) для любого нетерминала

A VN и k 0.

Доказательство. Достаточно показать, что

 

 

 

 

 

( A, B)

если

σ

( A, B) σ

j

( A, B) σ ( A, B),

i

j

 

σ

 

 

 

 

при i > j для всех A, B VN.

Не нарушая общности рассуждений, будем предполагать, что G — приведённая грамматика.

214

 

 

 

j

( A, B) ( A, B)

 

 

I. Покажем сначала, что

( A, B)

j

 

Индукцией по i покажем, что

σ ( A, B) σ ( A, B) для любого i

i

 

 

 

База. Пусть i = 0, т. е.

 

( A, B

 

0

 

L σ

шагу 1 алгоритма 2.6 существует

( A, B).

0.

).

Согласно

 

правило

A B P, где , V *,

L FIRST

G

( ).

 

k

 

Поскольку грамматика G приведённая, то существует вывод, в частности левосторон-

ний, вида A * wB .

lm

Следовательно, по определению (A, B)

L FIRSTkG ( ) σ ( A, B). База доказана.

215

 

 

 

j

( A, B) ( A, B)

 

 

 

 

 

Индукционная гипотеза. Предположим, что аналогичное утверждение выполняется для всех i n (0 n j).

216

 

 

 

j

( A, B) ( A, B)

 

 

 

 

 

Индукционный переход. Докажем, что тогда аналогичное утверждение верно для i = n + 1.

Пусть

n 1

 

 

L σ

( A, B).

Согласно шагу 2 алгоритма 2.6:

L

 

 

 

 

и

тогда в соответствии

либо

 

n

 

 

 

σ

( A, B),

 

 

 

 

 

индукционной гипотезой

 

 

 

L

σ

( A, B),

 

 

 

 

 

 

 

 

либо существуют правило

 

 

A X1X2Xm P,

где Xp VN (1 p m),

L

n

p

 

 

такие что

 

 

σ ( X

 

, B),

 

 

 

 

 

 

с

и

 

 

G

(X

X

... X

).

L L

FIRST

 

k

k

p 1

p 2

m

 

(I.1)

217

 

 

 

j

( A, B) ( A, B)

 

 

 

 

 

Согласно

индукционной гипотезе, при-

 

 

σ

 

( X

 

, B) , можем утверждать,

ненной к L

n

p

 

L σ ( X

 

 

 

 

что

p

, B)

 

(I.2)

 

 

 

 

 

 

и, в следствии (I.2), существует вывод вида

 

 

wp B , и

L FIRST

G

( ).

(I.3)

Xp

*

 

 

 

 

 

lm

 

k

 

 

 

 

 

j

 

 

 

 

 

 

 

 

 

 

 

 

Тогда можно

построить

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

вывод:

 

 

A

*

lm

 

 

 

 

*

 

lm

 

 

 

*

 

lm

 

 

X1 X2

*

Xp – 1 Xp Xp + 1Xm

 

lm

w1w2wp – 1Xp Xp + 1Xm *

lm

w1w2wp – 1wp B Xp + 1Xm .

218

 

 

 

j

( A, B) ( A, B)

 

 

 

 

 

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

G

( X

... X

 

 

FIRST

m

) σ (A, B).

k

p 1

 

 

Кроме того, по лемме 2.1

σ (A, B)

(I.4)

FIRST

G

( X

... X

 

)

 

 

 

 

 

 

m

 

 

 

 

 

k

 

 

p 1

 

 

 

 

 

 

 

 

 

FIRST

G

( )

 

FIRST

G

( X

... X

 

)

 

k

 

m

 

 

k

 

 

 

 

k

p 1

 

 

L

 

FIRST

G

( X

... X

 

) L

k

 

m

 

k

p 1

 

 

(. I.1 4).

Итак,

 

( A, B)

L σ

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

219

 

 

( A, B)

( A, B)

j

 

 

II. Покажем теперь, что

Пусть

L σ ( A, B).

 

 

( A, B).

σ ( A, B) σ

j

 

 

Это значит, что суще-

ствует левосторонний вывод

 

A wB ,

w V * и L FIRST

 

*

 

 

G

 

lm

 

T

k

 

 

по длине

вывода

Индукцией

что

L

j

 

 

 

σ ( A, B).

 

( ).

l покажем,

База. Пусть l

L FIRST

G

(

 

k

 

= 1, т. е. A wB , w V * и

lm

T

 

). Тогда существует правило

A wB и согласно шагу 1 алгоритма 2.6

G

 

 

(A, B).

L FIRST

( ) σ

(A, B) σ

k

0

j

 

База доказана.

220

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