formal_language_theory / lectures / unit_11
.pdfНеобходимое условие LL(1)
Следовательно, грамматика G — не LL(1), что противоречит первоначальному предположению.
Противоречие можно видеть и в том, что существуют два разных левосторонних вывода для одной и той же терминальной цепочки wcz. То есть грамматика G — неоднозначна и не может быть LL- грамматикой по самому замыслу этого класса КС-грамматик.
41
Необходимое условие LL(1)
Случай 5: c = ,
, , |
|
* |
* |
G |
G |
FOLLOW1G
a = b = ,
( A).
Как и в случае 4, |
|
|
|
G |
( A) |
означает |
|
|
|
1 |
|||||
|
FOLLOW |
|
|
||||
|
|
|
wA , такого, что |
||||
существование вывода S |
* |
||||||
G |
|||||||
. |
|
|
|
|
|
||
|
|
|
|
|
|
||
* |
|
|
|
|
|
|
|
G |
|
|
|
|
|
|
Его можно перестроить в левосторонний и продолжить двумя способами:
1) S * wA
lm
2) S * wA
lm
lm
lm
w * w
lm
w * w
lm
* lm*
lm
w, w.
42
Необходимое условие LL(1)
Имеем |
|
G |
|
G |
( y) { }, |
1 |
1 |
||||
|
FIRST |
|
(x) = FIRST |
|
хотя по-прежнему . Следовательно, грамматика G — не LL(1), что противоречит первоначальному предположению.
Противоречие можно видеть и в том, что существуют два разных левосторонних вывода для одной и той же терминальной цепочки w.
Необходимость доказана.
43
Достаточное условие LL(1)
II. Достаточность. Пусть условие теоремы выполнено, но грамматика G — не LL(1).
Тогда |
существуют |
два |
левосторонних |
||
вывода вида |
w wx, |
|
|
||
1) S |
wA |
|
|
||
|
* |
|
* |
|
|
|
|
|
|
|
|
2) S |
lm |
lm |
lm |
|
|
wA |
w wy, |
|
|
||
|
* |
|
* |
|
|
|
lm |
lm |
lm |
|
( y), но . |
в которых |
|
G |
G |
||
FIRST1 (x) = FIRST1 |
|
Поскольку * x и
lm
* lm
y, то
FIRST1G (x) FIRST1G ( ) FIRST1G ( FOLLOW1G ( A)), FIRST1G ( y) FIRST1G ( ) FIRST1G ( FOLLOW1G ( A)).
44
Достаточное условие LL(1)
Пусть
Тогда
FIRST |
G |
(x) FIRST |
G |
( y) {z}. |
|
|
|||
1 |
1 |
|
z FIRST |
G |
( ) FIRST |
G |
( ) |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
||
1 |
|
|
1 |
|
|
|
|
|
||
FIRST |
G |
( FOLLOW |
G |
( A)) FIRST |
G |
( FOLLOW |
G |
( A)), |
||
|
|
|
|
|||||||
1 |
1 |
|
|
1 |
1 |
|
а это противоречит первоначальному предположению о том, что условие теоремы выполнено, то есть что
FIRST1G ( FOLLOW1G ( A)) FIRST1G ( FOLLOW1G ( A)) ,
Достаточность доказана и вместе с ней и вся теорема.
45
Необходимое и достаточное условие LL(1)
Следствие 2.1. Теорему 2.2 можно переформулировать следующим образом:
КС-грамматика G является LL(1)-грам- матикой тогда и только тогда, когда для
каждого множества A-правил
A 1 2 … n
выполняются следующие условия (ср. 28) :
1) |
|
G |
i |
|
|
|
G |
j |
) |
|
|
|
|
1 |
|
|
1 |
|
|
|
|||||||
|
FIRST |
|
( |
) FIRST |
|
|
( |
|
|
||||
|
при i j, 1 i, j n; |
|
|
|
|
|
|||||||
2) если i |
* |
, то |
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|||||
|
|
|
G |
|
G |
( ) |
FOLLOW |
G |
( A) |
||||
|
|
|
FIRST |
||||||||||
|
|
|
|
|
|||||||||
|
|
|
|
1 |
j |
|
j i. |
1 |
|
||||
|
для всех j: 1 j |
n, |
|
|
|
|
46
Необходимое и достаточное условие LL(1)
Определение 2.7. Контекстно-свободная
грамматика G = (VN, VT, P, S) называется
сильной LL(k)-грамматикой, если она удовлетворяет условию теоремы 2.2:
FIRST |
G |
( FOLLOW |
G |
( A)) |
|
|
|||
k |
k |
|
||
FIRST |
G |
( FOLLOW |
G |
( A)) |
|
|
|||
k |
k |
|
для всех A VN, , (VN VT)*, таких, что существуют правила A , A P, .
Ret 113
47
Необходимое и достаточное условие LL(1)
Следствие 2.2. Каждая LL(1)-грамматика является сильной.
Однако следующий пример показывает, что для k > 1 не всякая LL(k)-грамматика является сильной.
48
Пример 2.3. Несильная LL(2)-грамматика. Рассмотрим cfg
G = ({S, A}, {a, b}, P, S), где
P = {S aAaa bAba, A b }.
Используя теорему 2.1, проверим, что грамматика G — LL(2).
I.Проведём тестирование относительно
нетерминала S: |
|
Фактически, единственное |
|||
FIRST |
G |
(aAaa ) = {aa, ab}, |
возможное |
= . |
|
|
|||||
|
|
|
|||
2 |
|
|
|||
|
G |
(bAba ) = {bb} независимо от , |
|||
FIRST2 |
|||||
FIRST2G (aAaa ) FIRST1G (bAba ) = |
|
||||
= {aa, ab} {bb} = |
. |
Ret 122 |
Ret 125 |
||
|
|
|
|
49
Пример не сильной LL(2)-грамматики
II. Проведём тестирование относительно нетерминала A. При этом следует учесть, что
S aAaa и S bAba, так что {aa, ba}.
Тогда при = aa:
FIRST |
G |
|
|
2 |
FIRST2G
(baa) = {ba}, |
FIRST |
G |
( aa) = {aa}, |
|
|||
|
2 |
|
|
|
G |
|
|
(baa) FIRST2 |
( aa) = {ba} {aa} |
= ;
при = ba:
|
G |
(bba) = {bb}, |
|
|
|
G |
( ba) = {ba}, |
|
2 |
|
|
2 |
|||||
FIRST |
|
|
|
FIRST |
|
|
||
|
G |
(bba) |
|
|
G |
( ba) = {bb} {ba} = . |
||
2 |
|
2 |
||||||
FIRST |
|
|
FIRST |
|
|
|
|
Так что G — действительно LL(2)-грам- матика.
50