formal_language_theory / lectures / unit_11
.pdfНеобходимое условие LL(1)
Это означает, что существуют
a, b FOLLOWG ( A), |
|
|||||
|
|
|
|
1 |
|
|
такие, что |
|
|
|
|
|
|
c FIRST |
G |
( a) |
и |
c FIRST |
G |
|
|
||||||
1 |
||||||
|
||||||
1 |
|
|
|
|
и согласно определению функции существуют выводы:
(γb),
FIRSTG 1
|
a |
* |
|
* |
|
|
cu и |
b cv, |
|||
|
|
G |
|
G |
|
при некоторых u,v VT, |
если c VT, или |
||||
|
|
|
* |
|
|
|
|
|
|
|
|
|
* |
|
* |
|
|
a |
G |
и b |
G |
, если |
c = , |
и в этом случае a = b = |
. |
|
Ret 35
Ret 38
Ret 39
Ret 42
31
Необходимое условие LL(1)
Случай 1: c VT, |
|
|
a cu’a = cu, cu’, u’ VT*; |
||
* |
* |
|
G |
G |
|
* |
* |
|
b cv’b = cv, cv’, v’ V *. |
||
G |
G |
T |
|
Так как грамматика G — приведённая, то существует вывод, в частности левосторонний, который порождает сентенциальную форму, содержащую A:
S * wA , lm
который может быть продолжен двумя способами:
32
Необходимое условие LL(1)
* |
|
* |
* |
|
1) S wA w wcu’ wcu’z, |
||||
lm |
lm |
lm |
lm |
x |
|
|
|
|
|
* |
|
* |
* |
|
2) S wA w wcv’ wcv’z , |
||||
lm |
lm |
lm |
lm |
y |
|
* |
|
|
|
|
|
* существует также в |
||
где вывод z c z V |
||||
|
lm |
T |
|
|
силу приведённости грамматики G.
Итак, имеем два левосторонних вывода 1) и 2), фигурирующие в определении 2.3 LL(k)-грамматик, в которых в роли цепочки x используется cu’z, в роли цепочки y — cv’z, причём
33
Необходимое условие LL(1)
FIRST |
G |
(x) = FIRST |
G |
|
|
|
|
|
(cu z) {c}, |
||
1 |
1 |
|
|||
FIRST |
G |
( y) = FIRST |
G |
|
|
|
|
(cv z) {c}, |
|||
1 |
1 |
|
но .
Следовательно, грамматика G — не LL(1), что противоречит первоначальному предположению.
34
Необходимое условие LL(1)
Случай 2: c VT,
* ,
G
c a FOLLOW |
G |
( A) |
|
||
1 |
|
(см. 31)
b
* G
cv’b,
* G
cv’, v’ VT*.
То, что существует ний, вида S
|
G |
( A), |
означает, что |
1 |
|||
c FOLLOW |
|
|
вывод, в частности левосторон-
* |
|
G |
|
wA , такой, что |
1 |
( ) |
|
lm |
c FIRST |
|
|
|
|
|
или,
* lm
что то же самое, существует вывод сz при некотором z VT*.
35
Необходимое условие LL(1)
Продолжим левосторонним образом вывод
S wA двумя способами: |
|
|
|||||
* |
|
|
|
|
|
|
|
lm |
|
wA w |
|
w |
|
wсz, |
|
1) S |
|||||||
|
|
|
|
|
|||
|
* |
|
|
* |
|
* |
|
|
lm |
|
lm |
lm |
|
lm |
|
|
|
|
|
|
|||
2) S |
wA w |
|
|
|
x |
||
wсv’ wсv’сz. |
|||||||
|
* |
|
|
* |
|
|
* |
|
|
|
|
|
|
||
|
lm |
|
lm |
lm |
|
|
lm |
|
|
|
|
|
|
|
y |
Получили |
два |
вывода 1) и 2), |
фигурирующие в определении LL(k)- грамматик (при k = 1), с cz в роли цепочки x и cv’cz в роли цепочки y.
36
Необходимое условие LL(1)
Имеем:
т. е.
но .
FIRST |
G |
(x) = FIRST |
G |
(cz) {c}, |
||
|
|
|
|
|||
1 |
1 |
|
||||
FIRST |
G |
( y) = FIRST |
G |
|
||
|
|
|
(cv cz) {c}, |
|||
1 |
1 |
|
||||
FIRST |
G |
(x) = FIRST |
G |
( y), |
||
|
|
|||||
1 |
1 |
|
Следовательно, грамматика G — не LL(1), что противоречит первоначальному предположению.
37
Необходимое условие LL(1)
Случай 3: c VT,
a |
cu’a, cu’, u’ VT*; |
||
|
* |
* |
|
|
G |
G |
|
* |
|
G |
( A) |
, c b FOLLOW1 |
|||
G |
|
|
|
(см. 31).
Он разбирается аналогично случаю 2.
38
Необходимое условие LL(1)
Случай 4: c VT,
c
* G b
,
* |
|
|
, a = b = c, |
||
G |
G |
( A) (см. 31). |
FOLLOW |
||
|
|
|
1 |
|
То, что ствование
c FOLLOW |
G |
|
|
1 |
вывода вида S
( A), |
означает суще- |
|
|
||
|
wA , такого, что |
|
* |
||
G |
c FIRST |
G |
( ) |
|
||
1 |
|
или, что то же самое,
* G
cz при некотором z VT*.
39
Необходимое условие LL(1)
|
|
* |
|
|
Теперь вывод S wA перестроим в лево- |
||||
|
|
G |
|
|
сторонний и продолжим двумя способами: |
||||
* |
|
* |
* |
|
1) S wA w w wсz , |
||||
lm |
lm |
lm |
lm |
x |
* |
|
* |
* |
|
|
|
|||
2) S wA w w wсz , |
||||
lm |
lm |
lm |
lm |
y |
|
||||
|
|
|
|
Мы получили два левосторонних вывода
1) и 2), фигурирующих в определении LL(k)- грамматик (при k = 1), в которых в роли цепочек x и y используются одинаковые терминальные цепочки сz:
FIRST1G(x) FIRST1G( y) FIRST1G(cz) {c},
притом что .
40