formal_language_theory / lectures / unit_11
.pdfНеобходимое условие LL(k)
Пусть некоторая цепочка
z FIRST |
G |
( FIRST |
G |
|
|
||
|
k |
|
k |
( .
Следовательно, существуют выводы
* |
* |
(3) zu и (4) |
zv, |
для некоторых u, v VT*, причём если z < k, то u = v = (см. определение 2.2), которые всегда можно перестроить в левосторонние.
21
Необходимое условие LL(k)
Мы можем продолжить имеющийся вывод
S * lm
используя правила
wA ,
(1) A , (2) A и
* |
и (4) |
выводы (3) zu |
|
lm |
|
двумя разными способами :
* lm
zv,
22
Необходимое условие LL(k)
1) S wA w wzu, |
|||
* |
|
* |
|
lm |
lm |
lm |
x |
|
|
|
|
2) S wA w wzv |
|||
* |
|
* |
|
lm |
lm |
lm |
y |
|
|||
|
|
|
|
Остается |
|
сопоставить эти два лево- |
сторонних вывода с теми, которые участвуют в определении 2.3 LL(k)-грамматик. Здесь в роли цепочки x используется zu, а в роли цепочки y — zv.
Очевидно, |
G |
(x |
G |
( y {z}, |
FIRSTk |
|
FIRSTk |
|
но , что противоречит предположению о том, что G — LL(k)-грамматика.
23
Необходимое условие LL(k)
В частности, если z < k и u = v = , то мы имеем два разных левосторонних вывода одной и той же терминальной цепочки wz. Это означает, что G — не однозначная грамматика и, естественно, не LL(k) ни при каком k.
Необходимость доказана.
24
Достаточное условие LL(k)
II. Достаточность. Пусть условие теоремы выполнено, но G — не LL(k)-грамматика.
Это значит, что существуют два левосторонних вывода:
1)S
2)S
* lm*
lm
wA wA
lm
lm
w * wx, lm w * wy,
lm
в которых
FIRST |
G |
(x FIRST |
G |
( y , |
|
|
|
||
|
k |
|
k |
|
но .
25
Достаточное условие LL(k)
|
* |
|
Имеем x |
||
lm |
||
FIRST |
G |
(x) |
|
|
|
|
k |
|
и
*
lm
FIRST
y, и пусть
G |
( y {z}. |
|
|
k |
|
Согласно определению функции FIRSTGk из
существования этих двух выводов заклю-
чаем, что {z} FIRSTGk (x) FIRSTGk (
{z} FIRST
и, следовательно,
G |
( y) FIRST |
G |
|
k |
k |
||
|
(
z FIRST |
G |
( FIRST |
G |
|
|
||
|
k |
|
k |
( ,
что входит в противоречие с первоначальным предположением о том, что условие теоремы выполняется.
Достаточность доказана, а вместе с ней
и вся теорема. |
26 |
Свойства LL(k)-грамматик
Определение 2.6. Пусть G = (VN, VT, P, S) —
cfg, и
V *.
Определим функцию
G |
* |
|
( ) = {w VT |
||
FOLLOW k |
Здесь k — целое.
S
w
* G
FIRST
и
G |
( )}. |
|
|
k |
|
27
Необходимое и достаточное условие LL(1)
Теорема 2.2. Чтобы cfg G = (VN, VT, P, S)
была LL(1)-грамматикой, необходимо и достаточно, чтобы
FIRST |
G |
( FOLLOW |
G |
( A)) |
|
|
|||
1 |
1 |
|
||
FIRST |
G |
( FOLLOW |
G |
( A)) |
|
|
|||
1 |
1 |
|
для всех A VN, , (VN VT)*, таких, что существуют правила A , A P, где
.
Ret 46 Ret 169
28
Необходимое и достаточное условие LL(1)
Доказательство. Требуется пояснить, что в
формулировке |
условия |
теоремы аргумент |
|||
функции FIRST1G — не цепочка, как было |
|||||
определено ранее, а множество цепочек. |
|
||||
Расширение |
области |
определения |
этой |
||
функции на множества цепочек |
W V |
* |
про- |
||
|
|||||
|
|
||||
изводится естественным образом: |
|
|
|||
FIRSTG |
(W ) |
FIRSTG (w). |
|
|
|
k |
|
k |
|
|
|
w W
29
Необходимое условие LL(1)
Обе части теоремы доказываются методом “от противного”. Как и ранее, не нарушая общности рассуждений, будем считать грамматику G приведённой.
I. Необходимость. Пусть G — LL(1)-грам-
матика, но условие не выполнено, т. е. существуют правила A , A P при, и существует c (VT { }), такие, что
c FIRST |
G |
( FOLLOW |
G |
( A)) |
|
|
|
||||
1 |
1 |
|
|||
c FIRST |
G |
( FOLLOW |
G |
( A)). |
|
|
|
|
|||
1 |
1 |
|
и
30