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

Алгоритм вычисления функции

FOLLOWG k

( A)

4. Наконец, полагаем

FOLLOW

G

( A) (S, A)

 

k

 

для всех A VN и

FOLLOWG (S ) (S, S ) { },

k

 

 

так как всегда

 

 

FOLLOW

G

(S ),

 

k

 

но может оказаться, что (S, S).

231

Пример вычисления функции

FOLLOWG 2

Пример 2.12. Пусть G = ({S, A}, {a, b}, P, S),

где P = {S aAaa, S bAba, A b, A }.

Построим множества

FOLLOW2G (S) и FOLLOW2G ( A),

используя описанный алгоритм (см. табл. 2.6).

Получаем

FOLLOW2G (S) (S, S) { } { };

FOLLOW2G ( A) (S, A) {aa, ba},

поскольку

232

Пример вычисления функции

FOLLOWG 2

 

 

Таблица 2.6

 

 

 

N N

0

1

(S, S)

 

 

 

 

 

(S, A)

{aa, ba}

{aa, ba}

 

 

 

(A, S)

 

 

 

 

 

(A, A)

 

 

 

 

 

233

Алгоритм вычисления функции

FOLLOWG k

( A)

Покажем теперь, что алгоритм 2.7 действительно вычисляет функцию

FOLLOWG k

(

)

 

A

для любого нетерминала A.

234

j(A, B) (A,B)

Теорема 2.9. Пусть cfg. Алгоритм 2.7

функцию

G

(

FOLLOWk

 

k 0.

 

 

G = (VN, VT, P, S) —

правильно вычисляет

)

для любого A VN и

A

 

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

если

(A, B)

 

( A,

j

 

 

( A, B)

(

i

j

 

VN VN.

B) A, B)

( A, B),

при i > j для всех

Ret 230

235

j(A, B) (A, B)

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

 

 

( A, B) ( A, B)

 

j

 

 

или, что то же самое,

если

l

 

при l j,

 

w

( A, B)

 

то w ( A, B),

используя индукцию по l.

236

j(A, B) (A, B)

База. Пусть l = 0. Имеем

w

( A,

 

 

 

Согласно шагу 1 алгоритма 2.7

B).

существует

правило A B P, , V , и

w

FIRSTk

 

 

.

*

 

G

(

)

 

 

 

 

 

Это правило позволяет построить вывод

A B , причём любая цепочка

G

 

( )

w FIRST

G

 

 

k

 

также является элементом множества

 

 

( A,

— таково определение этой функции, т. е.

B)

w ( A, B). База доказана.

237

j(A, B) (A, B)

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

238

j(A, B) (A, B)

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

Итак, пусть w n 1 ( A, B). Согласно шагу 2 алгоритма 2.7

либо

w

( A, B),

n

 

и тогда согласно индукцион-

ной гипотезе

w ( A, B),

 

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

 

A X1 X2 Xp Xp + 1Xm P и

w

( Xp, B)

k

FIRSTG ( Xp 1 ... Xm),

n

 

 

k

где Xp VN, 1 p m.

239

j(A, B) (A, B)

Иначе говоря, по определению операцииk существуют

w (X , B), w FIRSTG (X ... X ) и

1 n p 2 k p 1 m

 

 

 

w FIRST

G

(w w ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

k

1

2

 

 

 

В соответствии с индукционным предпо-

ложением из того, что

w

( X

p

, B),

следует,

 

1

n

 

 

что

w ( X

p

, B).

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

По самому определению функции (A, B) последнее вхождение w1 означает, что суще-

 

 

*

G

ствует вывод X

 

w FIRSTk ( ).

p

B и

 

G

1

240

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