функции существует вывод
|
|
|
|
|
|
|
|
|
|
|
|
A |
* |
xy, |
|
|
|
|
|
G |
|
где |
x = k и y VT*, либо x < k |
и y = . |
Индукцией по длине вывода l покажем, что |
если |
|
G |
( A) |
благодаря существованию |
k |
|
x FIRST |
|
|
|
|
|
такого вывода, то x Fj(A).
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).
FIRSTkG (A) Fj (A)
Индукционный переход. Докажем, что тогда аналогичное утверждение верно для l = n + 1.
|
|
|
|
|
|
|
|
n |
|
|
|
|
|
Пусть A Y1Y2…Ym y1y2…ym — вывод |
|
|
|
|
|
|
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 |
|
|
|
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. |
|
Итак, существует правило
A Y1Y2…Ym P и
x Fn(Y1) k Fn(Y2) k … k Fn(Ym).
Согласно шагу 3 алгоритма 2.5 заключаем,
что x Fn + 1(A) Fj (A).
Утверждение II доказано.
Из рассуждений I и II следует равенство
что равносильно утверждению теоремы.
§ 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 |
Вычисление функции (A)
Введём в рассмотрение ещё одну вспомогательную функцию, определяемую для пары нетерминалов следующим образом:
* |
|
|
* и |
wB , w V |
lm |
|
T |
|
|
( )}. |
|
FIRST |
G |
|
|
|
k |
|
|
Очевидно, что (A) = ’(S, A).
Таким образом, достаточно дать алгоритм
вычисления |
функции ’(A, B) для любых |
A, B VN. |
|
Ret 215 Ret 219 |
Ret 222 |
Вычисление функции (A)
Мы будем вычислять ’(A, B) методом последовательных приближений, параллельно выстраивая последовательности множеств’i(A, B) для всех возможных пар
(A, B) VN VN
следующим образом:
Вычисление функции (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 |
|
σ ( 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 )}.
Вычисление функции (A)
3. Повторять шаг 2 до тех пор, пока при некотором i = j не окажется, что
’j+ 1(A, B) = ’j(A, B) для всех (A, B) VN VN.
Такое j существует, потому что
4.Полагаем ’(A, B) = ’j(A, B).
5.Наконец, (A) = ’(S, A).
Если окажется, в частности, что
{ } ’(S, S), то (S) = ’(S, S) {{ }}.