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

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

FIRSTG 1

F1(T) = F0(F) 1F0(T) F0(T) =

= {(, a} 1{*, } = {(, a} F0(T); F1(T)=F0(*) 1F0(F) 1F0(T) F0{ } F0(T)=

={*} 1{(, a} 1{*, } { } {*, } =

={*} { } {*, } = {*, } = F0(T);

F1(F) = F0(() 1F0(E) 1F0( )) F0(F) =

= {(} 1 1{)} {(, a} = {(, a} = F0(F).

181

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

FIRSTG 1

Поскольку процесс не сошелся для всех нетерминалов, необходимо повторить шаг 3, что дает

F2(E) = F1(T) 1F1(E) F1(E) =

= {(, a} 1{+, } = {(, a} F1(E); F2(E)=F1(+) 1F1(T) 1F1(E) F1( ) F1(E) =

= {+} 1 {(, a} 1 {+, } { } {+, } = ={+} { } {+, } = {+, } = F1(E);

F2(T) = F1(F) 1F1(T) F1(T) =

={(, a} 1 {*, } {(, a} =

={(, a} {(, a} = {(, a} = F1(T);

182

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

FIRSTG 1

F2(T)=F1(*) 1F1(F) 1F1(T) F1( ) F1(T) =

={*} 1{(, a} 1{*, } { } {*, } =

={*} { } {*, } = {*, } = F1(T);

F2(F) = F1(() 1F1(E) 1F1( )) F1(F) =

={(} 1 {(, a} 1 {)} {(, a} =

={(} {(, a} = {(, a} = F1(F).

Так как F2(E) F1(E) придется ещё раз проделать шаг 3, что даёт, наконец,

183

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

FIRSTG 1

F3(E)

= {(, a} = F2(E);

F (E) = {+, } = F (E);

3

2

F3(T)

= {(, a} = F2(T);

F (T) = {*, } = F (T);

3

2

F3(F)

= {(, a} = F2(F).

Таким образом, окончательно получаем:

FIRST

G

(E) FIRST

G

(T ) FIRST

G

(F ) {(, a};

 

 

 

 

 

1

 

1

 

 

1

 

 

G

 

 

G

 

{*, }.

FIRST1

(E ) { , };

 

FIRST1

(T )

184

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

Алгоритм 2.5 правильно вычисляет

функцию

 

G

k

V

 

 

FIRST

 

*

и k 0.

 

 

 

 

 

( )

для любой цепочки

Доказательство.

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

показать, что

 

 

 

G

(A),

F (A) = FIRST

j

k

 

если Fi (A) = Fj(A) при i > j для всех A VN. Не нарушая общности рассуждений,

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

185

F (A) FIRSTG (A)

 

 

 

 

 

 

j

k

 

 

 

 

 

 

 

 

 

 

 

 

G

(A).

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

F (A) FIRST

j

 

 

k

 

 

Пусть x Fl (A) при l j. Индукцией по l

покажем, что тогда

x FIRST

G

( A).

 

 

 

 

k

 

 

 

База. Пусть l = 0 и x F0(A). Тогда согласно шагу 2 алгоритма 2.5 существует правило

 

 

k

и либо x = k,

*

,

вида A x P, где x VT

 

 

либо x < k и = .

 

 

 

 

 

Следовательно, A x

 

*

 

 

 

xy, где x = k и

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

 

 

 

 

 

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

FIRST

G

 

k ,

заключаем, что x FIRSTkG ( A). База доказана.

186

 

G

(A)

F (A) FIRST

j

k

 

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

187

 

G

(A)

F (A) FIRST

j

k

 

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

Пусть x Fn + 1(A).

Согласно алгоритму 2.5 (см. шаг 3)

либо x Fn(A) и тогда в соответствии с индук-

ционным предположением

 

 

G

( A),

 

k

 

x FIRST

 

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

 

 

 

A Y1Y2Ym P и

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

188

 

G

(A)

F (A) FIRST

j

k

 

Если Yp VN (1 p m), то в соответствии с индукционной гипотезой

 

G

(Y

F (Y ) FIRST

 

n p

k

 

 

p

Если же Yp VT (1

 

 

p

).

m), то согласно

определению множеств Fn и функции

FIRST

G

 

k

заключаем, что

F (Y

 

n

p

Итак, в любом вложение

 

G

(Y ).

) {Y } FIRST

p

k

p

случае

справедливо

Fn (Yp ) FIRSTkG (Yp )

для Yp VN VT (1 p m).

189

 

G

(A)

F (A) FIRST

j

k

 

Тогда

x F (Y )

k

F (Y )

k

...

k

F (Y

 

)

 

 

 

 

n 1

 

 

 

n

 

2

 

 

 

 

n

 

m

 

 

 

 

 

 

FIRST

G

(Y )

 

FIRST

G

(Y )

 

...

 

FIRST

G

(Y

)

 

k

 

k

k

 

 

k

 

1

 

 

 

k

 

 

2

 

 

 

 

k

m

 

= FIRST

G

(Y Y ... Y ) FIRST

G

( A),

 

 

 

 

 

 

 

 

 

 

 

 

 

k

 

1

2

 

m

 

 

 

 

 

k

 

 

 

 

 

 

 

 

 

поскольку A Y1Y2Ym P. Утверждение I доказано.

190

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