Пример вычисления функции
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).
Пример вычисления функции
Поскольку процесс не сошелся для всех нетерминалов, необходимо повторить шаг 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);
Пример вычисления функции
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, что даёт, наконец,
Пример вычисления функции
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 ) |
Теорема 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 — приведённая грамматика.
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). База доказана.
Индукционная гипотеза. Предположим, что аналогичное утверждение выполняется для всех l n (0 n j).
Индукционный переход. Докажем, что тогда аналогичное утверждение верно для l = n + 1.
Пусть x Fn + 1(A).
Согласно алгоритму 2.5 (см. шаг 3)
либо x Fn(A) и тогда в соответствии с индук-
ционным предположением |
|
|
G |
( A), |
|
k |
|
x FIRST |
|
либо существует правило вида |
|
|
|
A Y1Y2…Ym P и
x Fn(Y1) k Fn(Y2) k … k Fn(Ym).
Если Yp VN (1 p m), то в соответствии с индукционной гипотезой
|
G |
(Y |
F (Y ) FIRST |
|
n p |
k |
|
|
p |
Если же Yp VT (1 |
|
|
p |
определению множеств Fn и функции
|
G |
(Y ). |
) {Y } FIRST |
p |
k |
p |
случае |
справедливо |
Fn (Yp ) FIRSTkG (Yp )
для Yp VN VT (1 p m).
Тогда
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 Y1Y2…Ym P. Утверждение I доказано.