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

Если (xy, S$, ) (y, $, ), то S

lm

x

Одновременно можно воспользоваться индукционной гипотезой в применении к переходу (xy, S$, ) (y, $, ),

поскольку

FIRST1G ( y ) FIRST1G (zy) FIRST1G (z )

=FIRST1G ( ) FIRST1G ( A ) FIRST1G ( ),

иполучить как следствие

 

 

S

 

lm

 

x’ ’ = xA

( i ) lm

x= xz = 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′, vVT*, причём если x < k, то u= , и

если y < k, то v= . Итак, имеем uv = xuyv. Если 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

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