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

Часть II: Формальное определение LL(k)-грамматики

Определение 2.3. Пусть G = (VN, VT, P, S)

cfg.

Говорят, что G есть LL(k)-грамматика для некоторого фиксированного k 0, если для любых двух левосторонних выводов

вида

 

 

1) S

wA w wx,

 

*

 

*

2) S

lm

lm

lm

wA w wy,

 

*

 

*

 

 

 

 

lm

lm

lm

в которых

FIRSTGk (x FIRSTGk ( y имеет

место равенство = .

Ret 12

Ret 16

Ret 19 Ret 23

Ret 33 Ret 59

11

Часть II: Формальное определение LL(k)-грамматики

Определение 2.4. Говорят, что cfg G есть

LL-грамматика, если она LL(k) для некоторого k .

Пример 2.2. LL(1)-грамматика.

Пусть G = ({S, B}, {a, b}, P, S), где

P = {S aBS b, B a bSB}.

Рассмотрим два левосторонних вывода вида (1) и (2) (см. определение 2.3), в которых роль нетерминала A играет символ S.

Ret 80

12

Пример 2.2.

Имеем (1) S

aBS и (2) S

 

 

lm

 

lm

Тогда w =

= , = aBS,

 

= b.

b.

Ясно, что любая цепочка x, выводимая из= aBS, начинается на a, а цепочка y, выводимая из = b, равна b.

Поэтому если первый символ цепочки, следующей за закрытой частью сентенциальной формы (w = ), есть a, то для замены нетерминала S следует использовать первую альтернативу. Если она начинается на b, то вторую.

13

Пример 2.2.

Рассмотрим два левосторонних вывода, в которых роль нетерминала A играет символ

B:

(1) S aBS aaS и (2) S

 

aBS abSBS.

lm

lm

 

lm

lm

Тогда w = a, = S,

= a, = bSB.

Ясно, что любая цепочка x, выводимая из= aS, начинается на a, а цепочка y, выводимая из = bSBS, начинается на b.

14

Пример 2.2.

Поэтому если первый символ цепочки, следующей за закрытой частью сентенциальной формы, есть a, то для замены нетерминала B следует использовать первую альтернативу (т. е. правило B a). Если она начинается на b, то вторую (т. е. правило

B bSB).

15

Пример 2.2.

В обоих случаях LL(1)-условие выполнено: по первому символу цепочки, следующей за закрытой частью сентенциальной формы, однозначно определяется то правило, которое следует применить к соответствующему нетерминалу, чтобы в конце концов получить анализируемую цепочку.

Очевидно, что любые два левосторонних вывода в данной грамматике, подпадающие под образец (см. определение 2.3), удовлетворяют LL(k)-условию при k = 1.

16

Часть II: Формальное определение LL(k)-грамматики

Грамматика примера 2.2 служит примером простой LL(1)-грамматики.

Определение 2.5. Говорят, что cfg G является

простой LL(1)-грамматикой, если в ней нет

-правил, и все альтернативы для каждого нетерминала начинаются с терминалов, и притом различных.

Таким образом, в простой LL(1)- грамматике для данной пары (A, a), где A VN и a VT, существует, самое большее, одна альтернатива вида A a , V *.

17

§ 2.2. Свойства LL(k)-грамматик

Теорема 2.1. Чтобы cfg G = (VN, VT, P, S)

была LL(k)-грамматикой, необходимо и достаточно, чтобы

FIRST

G

( FIRST

G

 

 

 

k

 

k

(

для всех , , , таких, что существуют правила вида A , A P, , и

существует вывод вида S

* lm

wA .

Ret 49

Ret 126 Ret 169

18

Свойства LL(k)-грамматик

Доказательство. Будем предполагать, что грамматика G не содержит бесполезных нетерминалов, то есть G ― приведённая КС-

грамматика.

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

Обе части доказательства проведём методом “от противного”.

19

Свойства LL(k)-грамматик

I. Необходимость. Пусть G LL(k)-грам-

матика, но условие не выполнено, т. е. нашлись такие цепочки , , , что существуют правила

(1)A , (2) A P, ,

исуществует вывод

S * wA ,

для которых

lm

FIRST

G

( FIRST

G

 

 

 

k

 

k

( .

20

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