Пример 2.1: вычисление функции при k = 1
Получаем
(FIRST1G ( AS) 1 L) {a, b} 1 { } {a, b},
(FIRST1G ( ) 1 L) { } 1 { } { },
и тогда
(FIRSTG ( AS) L) (FIRSTG ( ) L) |
|
1 |
1 |
1 |
1 |
{a,b} |
|
|
(I) |
|
|
{ } . |
|
|
Пример 2.1: вычисление функции при k = 1
Имеем также два альтернативных правила для нетерминала A: A aA, A b.
Требуется вычислить
(FIRST |
G |
(aA) |
L) (FIRST |
G |
(b) L), |
|
|
|
|
1 |
|
1 |
1 |
1 |
где L (A) = {{ , a, b}}. |
|
|
Получаем |
|
|
|
|
(FIRST |
G |
(aA) L) {a} { a, b} {a}, |
|
|
1 |
|
|
1 |
1 |
|
|
(FIRST |
G |
(b) L) {b} { , a,b} {b}, |
|
|
1 |
|
|
1 |
1 |
|
|
и тогда |
|
|
(aA) L) (FIRSTG (b) L) |
(FIRSTG |
1 |
|
|
1 |
1 |
|
1 |
{a} {b} . |
|
|
(II) |
Пример 2.1: вычисление функции при k = 1
Так как оба пересечения (I) и (II) пусты, то данная грамматика G действительно LL(1)-грамматика.
Теорема 2.8. Пусть G = (VN, VT, P, S) — cfg.
Алгоритм 2.6 правильно вычисляет функцию (A) для любого нетерминала
A VN и k 0.
Доказательство. Достаточно показать, что
|
|
|
|
|
( A, B) |
если |
σ |
( A, B) σ |
j |
( A, B) σ ( A, B), |
i |
j |
|
σ |
|
|
|
|
при i > j для всех A, B VN.
Не нарушая общности рассуждений, будем предполагать, что G — приведённая грамматика.
I. Покажем сначала, что |
( A, B) |
j |
|
Индукцией по i покажем, что |
σ ( A, B) σ ( A, B) для любого i |
i |
|
|
|
База. Пусть i = 0, т. е. |
|
( A, B |
|
0 |
|
L σ |
шагу 1 алгоритма 2.6 существует
Поскольку грамматика G приведённая, то существует вывод, в частности левосторон-
ний, вида A * wB .
lm
Следовательно, по определению ’(A, B)
L FIRSTkG ( ) σ ( A, B). База доказана.
215
Индукционная гипотеза. Предположим, что аналогичное утверждение выполняется для всех i n (0 n j).
Индукционный переход. Докажем, что тогда аналогичное утверждение верно для i = n + 1.
Согласно шагу 2 алгоритма 2.6:
|
|
L |
|
|
|
|
и |
тогда в соответствии |
|
либо |
|
n |
|
|
|
|
σ |
( A, B), |
|
|
|
|
|
|
индукционной гипотезой |
|
|
|
|
L |
σ |
( A, B), |
|
|
|
|
|
|
|
|
|
|
либо существуют правило |
|
|
|
A X1X2…Xm P, |
где Xp VN (1 p m), |
|
L |
n |
p |
|
|
такие что |
|
|
|
σ ( X |
|
, B), |
|
|
|
|
|
|
|
|
G |
(X |
X |
... X |
). |
L L |
FIRST |
|
k |
k |
p 1 |
p 2 |
m |
|
Согласно |
индукционной гипотезе, при- |
|
|
σ |
|
( X |
|
, B) , можем утверждать, |
ненной к L |
n |
p |
|
L σ ( X |
|
|
|
|
что |
p |
, B) |
|
(I.2) |
|
|
|
|
|
|
и, в следствии (I.2), существует вывод вида
|
|
wp B , и |
L FIRST |
G |
( ). |
(I.3) |
Xp |
* |
|
|
|
|
|
lm |
|
k |
|
|
|
|
|
j |
|
|
|
|
|
|
|
|
|
|
|
|
Тогда можно |
построить |
левосторонний |
вывод:
|
|
X1 X2 |
* |
… Xp – 1 Xp Xp + 1… Xm |
|
lm |
w1w2…wp – 1Xp Xp + 1… Xm *
lm
w1w2…wp – 1wp B Xp + 1…Xm .
ствует левосторонний вывод
|
A wB , |
w V * и L FIRST |
|
* |
|
|
G |
|
lm |
|
T |
k |
|
|
по длине |
вывода |
Индукцией |
что |
L |
j |
|
|
|
σ ( A, B). |
|
= 1, т. е. A wB , w V * и |
lm |
T |
|
). Тогда существует правило |
A wB и согласно шагу 1 алгоритма 2.6
G |
|
|
(A, B). |
L FIRST |
( ) σ |
(A, B) σ |
k |
0 |
j |
|
База доказана.