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

G

(A) F (A)

FIRST

k

j

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

Пусть

 

G

( A).

k

 

x FIRST

 

G

(A) F (A).

FIRST

k

j

По определению этой

функции существует вывод

 

 

 

 

 

 

 

 

 

 

 

 

A

*

xy,

 

 

 

 

 

G

 

где

x = k и y VT*, либо x < k

и y = .

Индукцией по длине вывода l покажем, что

если

 

G

( A)

благодаря существованию

k

 

x FIRST

 

 

 

 

 

такого вывода, то x Fj(A).

191

FIRSTG (A) F (A)

 

 

k

j

 

 

База. Пусть l = 1.

 

 

Имеем A xy, где

x = k и y VT*,

 

либо x < k и y = .

Тогда существует правило A xy P и согласно шагу 2 алгоритма 2.5

x F0(A) Fj(A).

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

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

192

FIRSTkG (A) Fj (A)

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

 

 

 

 

 

 

 

 

n

 

 

 

 

 

Пусть A Y1Y2Ym y1y2ym — вывод

 

 

 

 

 

 

n

 

G

 

 

 

 

 

 

 

 

 

 

 

 

 

, Y V, y

 

 

n,

 

 

 

 

 

 

p

 

 

*

 

длиной n + 1, где Y

y

 

V , n

p

 

 

 

 

 

p

G

 

p

p

 

p

T

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

p = 1, 2, …, m,

 

и по определению

функции

FIRST

G

( A) заключаем, что

 

 

 

 

 

 

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

 

 

 

 

x FIRST

G

( y y

...y

 

) FIRST

G

( A).

 

 

 

 

m

 

 

 

 

 

k

 

1 2

 

 

 

k

 

 

 

193

FIRSTkG (A) Fj (A)

Итак,

x FIRST

G

( y y

 

 

...y

)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

1

2

 

m

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

FIRST

G

( y )

 

 

 

FIRST

G

( y

)

...

 

FIRST

G

( y

 

)

 

 

k

 

 

k

 

 

k

 

 

 

 

1

 

 

k

 

 

2

 

k

 

 

k

m

 

FIRST

G

 

(Y )

 

 

FIRST

G

 

(Y )

...

 

 

FIRST

G

(Y

)

 

 

k

 

 

k

 

 

 

k

 

 

 

1

 

 

 

k

 

 

2

 

k

 

k

m

 

 

F (Y )

k

F (Y )

...

k

F (Y

).

 

 

 

 

 

 

 

 

n 1

 

 

 

 

n

 

 

2

k

 

 

 

 

n

m

 

 

 

 

 

 

 

 

 

Последнее вложение множеств имеет место в соответствии со следствием из

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

применённой

к

n p

 

 

выводам Yp yp, np n,

p = 1, 2, …, m,

с

G

 

 

учётом того, что при np = 0 имеем Yp = yp.

 

194

G

(A) F (A)

FIRST

k

j

Итак, существует правило

A Y1Y2Ym P и

x Fn(Y1) k Fn(Y2) k k Fn(Ym).

Согласно шагу 3 алгоритма 2.5 заключаем,

что x Fn + 1(A) Fj (A).

Утверждение II доказано.

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

 

G

(A),

F (A) = FIRST

j

k

 

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

195

§ 2.8. Вычисление функции (A)

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

Алгоритм 2.6: вычисление (A) для A VN .

Вход: G = (VN, VT, P, S) — cfg.

Выход: (A) для всех A VN. Метод. По определению

k

*

A) {L VT*

| S wA , w VT* и

 

lm

 

L FIRSTG ( )}.

 

k

Ret 214

196

Вычисление функции (A)

Введём в рассмотрение ещё одну вспомогательную функцию, определяемую для пары нетерминалов следующим образом:

(A,

B) =

{L VT*k

A

L=

*

 

 

* и

wB , w V

lm

 

T

 

 

( )}.

 

FIRST

G

 

 

 

k

 

 

Очевидно, что (A) = (S, A).

Таким образом, достаточно дать алгоритм

вычисления

функции (A, B) для любых

A, B VN.

 

Ret 215 Ret 219

Ret 222

197

Вычисление функции (A)

Мы будем вычислять (A, B) методом последовательных приближений, параллельно выстраивая последовательности множествi(A, B) для всех возможных пар

(A, B) VN VN

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

198

Вычисление функции (A)

1. σ ( A, B) {L V

*k

A βBα P,

 

0

T

 

Ret 215

Ret 217

Ret 220

Ret 224

*

G

(α)}.

β,α V , L FIRST

 

k

 

2. Пусть

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

0

1

i

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

Положим

σ

( A, B) σ

( A, B)

 

 

i 1

 

 

 

i

 

 

 

 

 

{L V *k

A X

1

X

...X

p

X

... X

m

P,

T

 

 

2

 

 

p 1

 

L σi ( Xp , B), Xp VN , 1 p m,

L L k FIRSTkG ( Xp 1 Xp 2 ... Xm )}.

199

Вычисление функции (A)

3. Повторять шаг 2 до тех пор, пока при некотором i = j не окажется, что

j+ 1(A, B) = j(A, B) для всех (A, B) VN VN.

Такое j существует, потому что

0(A, B) 1(A, B) …

V

*k

.

 

2

T

 

 

4.Полагаем (A, B) = j(A, B).

5.Наконец, (A) = (S, A).

Если окажется, в частности, что

{ } (S, S), то (S) = (S, S) {{ }}.

200

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