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

Если (xy, T0$, )

(y,

$, ) , то S

lm

x

Индукционная гипотеза. Предположим, что утверждение выполняется для всех l n

(n 1).

Индукционный переход. Докажем утверж-

дение для l = n + 1. Пусть

(xy, T0$, ) = (xy′, T0$, )

= (y′, TA, L $, ′)

(y′,

 

$,

 

где = ′i, ′ = n.

(y′,

 

 

i)

$, ′) =

(y, $, ),

Завершающие pop-движения предполагают,

что y= zy, = z .

161

Если (xy, T0$, )

(y, $, ) , то S

lm

x

Кроме того, мы имеем xy = xy= xzy, откуда x = xz.

Так как

 

 

= TA, L

 

, то последнее движе-

 

 

 

 

ние типа 1 было выполнено благодаря эле-

менту M (TA, L , u) = ( , i) для

 

 

G

(xy ,

 

k

 

u FIRST

 

что предполагает существование

правила

A под номером i.

 

 

 

 

162

Если (xy, T0$, )

(y, $, ) , то S

lm

x

Воспользовавшись индукционной гипоте-

зой в применении

(xy, T0$, )

к переходу

 

$, ′), поскольку

(y′,

FIRST

G

 

 

 

G

(zy) FIRST

G

(z )

 

( y ) FIRST

 

 

k

 

 

k

 

 

 

k

 

 

( ),

FIRST

 

( ) FIRST

 

( A ) FIRST

 

 

 

 

G

 

 

 

 

G

 

 

 

G

 

 

 

k

 

 

 

k

 

 

k

 

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

 

 

 

 

 

 

'

 

 

 

(i )

 

x′ = xz = x .

S x′ ′ = xA

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

lm

 

 

 

lm

 

 

 

 

 

 

 

Здесь

′, , , — гомоморфные образы

 

 

 

 

соответственно.

 

 

 

 

 

 

 

 

 

Утверждение II доказано.

163

Если (xy, T0$, )

(y, $, ) , то S

lm

x

Из рассуждений I и II при y = =

 

 

заключаем, что S x тогда и только тогда,

 

lm

когда (x, T0$, )

( , $, ). А это и означает,

что k-предсказывающий алгоритм анализа, построенный согласно алгоритму 2.3, является правильным для LL(k)-грамматики G.

Что и требовалось доказать.

164

Линейное время алгоритма анализа

Теорема 2.6. Число шагов, выполняемых k-предсказывающим алгоритмом анализа, линейно зависит от длины анализируемой цепочки.

Доказательство. Поскольку k-предсказыва- ющий алгоритм анализа применим только к LL(k)-грамматикам, а они не могут быть леворекурсивными (теорема 2.3), то макси-

мальное число шагов в любом левосторон-

нем выводе вида A B меньше, чем неко-

lm

торая константа c, зависящая от грамматики.

165

Линейное время алгоритма анализа

Во всяком случае, если бы существовал вывод такого вида, длина которого была бы больше числа нетерминалов грамматики

A B B

... B

B

lm

1

 

lm

2

 

lm

lm

m m

 

то какие-то два нетерминала (Bi и Bj при i j) неизбежно оказались бы одинаковыми.

Другими словами, мы имели бы вывод вида

B

 

 

 

B

i i

lm

j

j

 

 

 

что означало бы матики.

при

B = B

,

i

j

 

леворекурсивность грам-

166

Линейное время алгоритма анализа

Поскольку согласно теоремам 2.1 и 2.5 LL(k)-анализатор аккуратно воспроизводит в своем магазине открытые части сентенциальных форм (или их представления с участием LL(k)-таблиц вместо нетерминалов) левостороннего вывода входной цепочки, то участкам вывода вида

B B

... B

m

1

lm

2

 

lm

lm

m

 

 

 

 

 

соответствуют движения типа 1, следующие непосредственно друг за другом, и их число не превосходит c ≤ VN.

167

Линейное время алгоритма анализа

Пусть цепочка x L(G), где G LL(k)- грамматика и n = x .

Разбирая цепочку x, k-предсказывающий алгоритм анализа, построенный для грамматики G, совершает ровно n popдвижений и не более c движений типа 1 перед каждым из них.

Следовательно, общее число движений

N n + c n = O(n).

Что и требовалось доказать.

168

§ 2.6. Тестирование LL(k)-грамматик

Пусть имеется cfg G. Алгоритмы построения управляющих таблиц LL(k)- анализаторов 2.1 и 2.3 достигают успеха только если G LL(k)-грамматика.

Поэтому естественно поинтересоваться, является ли данная грамматика G LL(k)- грамматикой для данного значения k. Для ответа на этот вопрос можно воспользоваться теоремой 2.1, а для k = 1 и сильных LL(k)-грамматик также и теоремой 2.2 при данном значении k.

169

Тестирование LL(k)-грамматик

Напомним, что в общем случае cfg

G = (VN, VT, P, S) не является LL(k)-грам-

матикой тогда и только тогда, когда существуют левосторонний вывод вида

S

и

* wA и пара различных A-правил A lm

A P ( ), для которых

(FIRST

G

( )

 

L) (FIRST

G

( )

 

L) ,

 

k

 

k

k

 

k

 

 

где L FIRSTkG ( ).

170

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