
formal_language_theory / lectures / unit_11
.pdf
Если (xy, S$, ) (y, $, ), то S
lm
x
Одновременно можно воспользоваться индукционной гипотезой в применении к переходу (x’y’, S$, ) (y’, ’$, ’),
поскольку
FIRST1G ( y ) FIRST1G (zy) FIRST1G (z )
=FIRST1G ( ) FIRST1G ( A ) FIRST1G ( ),
иполучить как следствие
|
|
|
S |
|
|
lm |
||
|
x’ ’ = x’A
( i ) lm
x’ = x’z = x .
Утверждение II доказано.
111

Если (xy, S$, ) (y, $, ), то S
lm
x
Из утверждений |
I и II при y = = |
|
|||
|
|
|
|
|
|
заключаем, что S |
|
x тогда и только тогда, |
|||
lm |
|||||
когда (x, S$, ) |
|
|
|
||
( , $, ). |
|
А это и означает, что 1-предсказывающий алгоритм анализа, построенный согласно алгоритму 2.1, является правильным для LL(1)-грамматики G.
Теорема доказана.
112
Замечание 2.1. Алгоритм 2.1 пригоден для построения анализаторов для LL(k)- грамматик и при k > 1, если только они сильные. При его применении к сильным LL(k)-грамматикам всюду, где используется параметр 1, следует использовать значение k.
Прежде, чем перейти к обсуждению LL- анализа при k > 1, введём в рассмотрение ещё одну полезную операцию над языками.
113

Операция
k
Определение 2.10. Пусть — некоторый
алфавит, и L , L — подмножества *. |
|
|||||||||
|
|
|
1 |
2 |
|
|
|
|
|
|
Положим |
|
|
|
|
|
|
|
|||
L L {w |
|
k |
x L , y L , xy |
wz, |
||||||
1 |
k |
2 |
|
|
* |
|
1 |
2 |
|
|
|
|
|
|
|
|
|||||
где w k, z |
* |
, либо w k и z ε}. |
||||||||
|
||||||||||
Операция k |
подобна инфиксной |
опера- |
ции
FIRST |
G |
. |
|
||
k |
|
Пример 2.7.
Пусть L1 = { , abb} и L2 = {b, bab}. Тогда L1 2 L2 = {b, ba, ab}.
114

FIRST |
G |
( ) FIRST |
G |
( ) |
|
FIRST |
G |
( ) |
|
|
|
|
|
|
|
|
|||
|
k |
k |
|
k |
k |
|
|||
|
|
|
|
|
|
|
|
|
|
Лемма 2.1. Для любой cfg G = (VN, VT, P, S) и любых цепочек V * имеет место тож-
дество
FIRST |
G |
( ) FIRST |
G |
( ) |
|
FIRST |
G |
( ). |
|
|
|
|
|
|
|||
k |
k |
|
k |
k |
|
Доказательство.
I. Пусть |
w FIRST |
G |
( ). |
|
|
||
k |
|
Докажем, что тогда
Ret 175
Ret 217
Ret 219
w FIRST |
G |
( ) |
|
FIRST |
G |
( ). |
|||
|
k |
|
|||||||
|
k |
|
|
k |
|
|
|||
Обозначим L1 = FIRSTkG ( ), L2 = FIRSTkG ( ). |
|||||||||
Из того, что w FIRSTkG ( ) |
следует, что |
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
существуют выводы u, |
v, такие что |
||||||||
w FIRSTG (uv). |
|
G |
|
|
G |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
||
k |
|
|
|
|
|
|
115 |
||
|
|
|
|
|
|
|
|

FIRST |
G |
( ) FIRST |
G |
( ) |
|
FIRST |
G |
( ) |
|
|
|
|
|
|
|
|
|||
|
k |
k |
|
k |
k |
|
|||
|
|
|
|
|
|
|
|
|
|
Последние два вывода означают, что
x FIRST |
G |
(u) FIRST |
G |
( ) L , |
|
|
|
|
|||
k |
k |
1 |
|||
y FIRST |
G |
(v) FIRST |
G |
( ) L . |
|
|
|
||||
k |
k |
2 |
(*)
Учитывая определение операции k,
заключаем, |
|
что |
|
|
|
|
FIRSTG (xy) L |
k |
L . |
||||
|
k |
1 |
|
2 |
||
Остается убедиться в том, что |
||||||
FIRST |
G |
(xy) FIRST |
G |
(uv) {w}. |
||
|
|
|||||
k |
|
|
k |
|
116
FIRST |
G |
( ) FIRST |
G |
( ) |
|
FIRST |
G |
( ) |
|
|
|
|
|
|
|
|
|||
|
k |
k |
|
k |
k |
|
|||
|
|
|
|
|
|
|
|
|
|
Так как
x FIRST |
G |
(u), |
|
||
k |
|
а
y FIRST |
G |
(v), |
|
||
k |
|
то u = xu’и v = yv’ при некоторых u′, v′ VT*, причём если x < k, то u’= , и
если y < k, то v’= . Итак, имеем uv = xu′yv′. Если x = k, то
w FIRSTkG (uv) {x} FIRSTkG (xy). (I.1)
Если x < k, то u’= и
w FIRSTkG (uv) FIRSTkG (xyv ),
117

FIRSTkG ( ) FIRSTkG ( ) k FIRSTkG ( )
причём,
если y < k, то v’= и тогда
w FIRSTkG (uv) FIRSTkG (xy). |
(I.2) |
если же y = k, то |
|
w FIRST |
G |
(uv) FIRST |
G |
|
|
|
(xyv ) |
||
k |
k |
|
||
FIRST |
G |
(xy). |
|
|
|
|
|
||
k |
|
|
|
(I.3)
Итак, в любом случае из (I.1), (I.2), (I.3) с учётом (*) следует
w FIRSTkG (uv) FIRSTkG (xy) L1 k L2FIRSTkG ( ) k FIRSTkG ( ).
118

FIRSTkG ( ) k FIRSTkG ( ) FIRSTkG ( )
II. Пусть
w FIRST |
G |
( ) |
|
FIRST |
G |
( ). |
|
k |
|
||||
k |
|
k |
|
w
Докажем, что тогда Согласно определению
ствуют цепочки
FIRST |
G |
( ). |
|
|
|
k |
|
операции k суще-
x FIRST |
G |
( ), y FIRST |
G |
( ), |
|
|
|||
k |
k |
|
w FIRST |
G |
(xy). |
|
||
k |
|
Кроме |
того, |
|
|
функции |
|
G |
, |
k |
|||
|
FIRST |
|
некоторых u, v V
согласно
|
* |
имеем |
|
* и |
G |
|
|
T |
|
определению
xu, * yv при G
FIRSTkG (xuyv) FIRSTkG ( ).
119
FIRST |
G |
( ) FIRST |
G |
( ) FIRST |
G |
( ) |
||
|
|
|
|
|
|
|||
|
k |
k |
k |
k |
|
|||
|
|
|
|
|
|
|
|
|
Остается убедиться в том, что
FIRST |
G |
(xuyv) FIRST |
G |
(xy). |
|
|
|||
k |
k |
|
Если x = k, то
FIRST |
G |
|
|
k |
Если x <
(xuyv) = {x} =
k, то u = и
FIRST |
G |
(xy). |
|
||
k |
|
(II.1)
FIRST |
G |
(xuyv) = FIRST |
G |
(xyv), |
|
|
|||
k |
k |
|
причём, если y k, то v = и
FIRST |
G |
(xuyv) = FIRST |
G |
(xy), |
|
|
|||
k |
k |
|
(II.2)
а при y = k от v ничего не зависит и
FIRSTkG (xuyv) FIRSTkG (xy). (II.3)
120