formal_language_theory / lectures / unit_11
.pdfFIRSTkG ( ) k FIRSTkG ( ) FIRSTkG ( )
Следовательно, учитывая (II.1), (II.2), (II.3), заключаем, что
w FIRST |
G |
(xy) = FIRST |
G |
(xuyv) FIRST |
G |
( ). |
|
|
|
||||
k |
k |
k |
|
Из рассуждений I и II следует утверждение леммы.
Что и требовалось.
121
§2.5. Анализ в LL(k)-грамматиках
Вобщем случае анализа в LL(k)- грамматиках непосредственно по нетерминалу и аванцепочке невозможно однозначно определить правило для построения очередной сентенциальной формы.
Рассмотрим, например, несильную LL(2)- грамматику из примера 2.3 :
S aAaa bAba; |
A b . |
122
Анализ в LL(k)-грамматиках
Согласно алгоритму 2.1 для замены нетерминала A в выводе
|
|
|
|
* |
|
|
* |
|
|
|
|
S |
|
|
|
|
|
wx |
|||
|
|
|
lm |
wA lm |
||||||
следует применять |
правило A , если |
|||||||||
аванцепочка |
|
|
|
|
|
G |
(x) |
принадлежит |
||
|
|
|
|
2 |
||||||
|
u FIRST |
|
|
|
|
|||||
множеству |
|
|
|
|
|
|
|
|
|
|
FIRST |
G |
( FOLLOW |
G |
( A)). |
||||||
|
|
|
||||||||
|
2 |
|
|
|
|
|
2 |
|
Очевидно, что в нашем примере
FOLLOW2G ( A) {aa, ba}.
123
Анализ в LL(k)-грамматиках
Получается так, что следует применять правило A b, если аванцепочка из
FIRST2G (bFOLLOW2G ( A))
FIRSTG (b{aa,ba}) {ba, bb}, |
|||||||
или правило |
2A , если аванцепочка из |
||||||
множества |
|
|
|
|
|
|
|
FIRST |
G |
( FOLLOW |
G |
( A)) |
|||
|
|
|
|||||
2 |
|
|
2 |
|
|
||
FIRST |
G |
( {aa,ba}) |
{aa, ba}. |
||||
|
|||||||
|
|
2 |
|
|
|
|
Если аванцепочка равна ba, то существует неопределённость в выборе правила для замены нетерминала A.
124
Анализ в LL(k)-грамматиках
Её можно разрешить, если для определения правила, по которому следует раскрывать нетерминал, помимо нетерминала и аванцепочки, использовать ещё один параметр: TA, L — так называемую LL(k)-таблицу, ассоциированную с двумя
k
индексами: A VN и L 2VT*, где множество L вычисляется с учётом следующих соображений.
125
Анализ в LL(k)-грамматиках
Пусть имеется вывод S * wA в некоторой lm LL(k)-грамматике. Вспоминая теорему 2.1,
нетрудно сообразить, что критерием выбора правила A для продолжения этого вывода может служить факт принадлежности текущей аванцепочки множеству
FIRSTkG ( ) FIRSTkG ( ) k FIRSTkG ( )
FIRSTkG ( ) k L,
где L FIRSTkG ( ).
126
Анализ в LL(k)-грамматиках
Это множество L и есть тот второй индекс таблицы TA, L, о котором идёт речь.
По аванцепочке таблица TA, L выдаёт правило, которое следует использовать для замены нетерминала A в текущей левосентенциальной форме.
Ясно, что для любой cfg число таких LL(k)- таблиц конечно, и все таблицы, необходимые для анализа любой цепочки в данной грамматике, могут быть построены заблаговременно.
127
Анализ в LL(k)-грамматиках
Они используются k-предсказывающим алгоритмом анализа в магазинных цепочках взамен нетерминалов (см. Пример 2.8 далее).
Теперь дадим определение LL(k)-таблиц и способ построения множества LL(k)-таблиц, необходимых и достаточных для анализа в данной LL(k)-грамматике (см. алгоритм 2.2 далее).
128
Анализ в LL(k)-грамматиках
Определение 2.11. Пусть G = (VN,
cfg. Для каждого A VN и |
L 2 |
V * |
|
T |
|||
|
|
VT, P, S) —
k определим
TA, L — LL(k)-таблицу, ассоциированную с A
и L, как цепочке
функцию, которая по данной аван-
u V |
* |
k |
выдает: |
|
|||
|
|
|
|
T |
|
|
1)либо значение error,
2)либо A-правило и конечный список под-
|
V |
* |
k |
|
множеств цепочек из |
, |
|||
|
||||
T |
3) либо значение undefied.
129
LL(k)-таблицы
1) TA, L(u) = error,
если не существует ни одного правила вида
A P, такого, что |
|
G |
( ) |
k |
L; |
k |
|||||
|
u FIRST |
|
|
2) TA, L(u) = (A , Y1, Y2,…, Ym ),
если A — единственное правило из P,
такое,
= x0
что |
u |
|
B1x1B2
FIRST |
G |
|
|
k |
… Bm xm,
( ) |
k |
L; |
при этом, |
|
|
Bi VN, xj VT*, то
если
Y |
=FIRST |
G |
(x B |
x |
B |
... B |
x |
) |
|
|
L, |
|
k |
||||||||||
i |
k |
i i 1 |
i 1 |
i 2 |
m |
m |
|
|
|
i = 1, 2, …, m; j = 0, 1, …, m; m 0;
130