formal_language_theory / lectures / unit_11
.pdfЧасть 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