218
Алгоритм 3.4: LR(k)-тестирование.
Вход:
G =(V
N
, V
T
, P, S) — контекстно-свободная грамматика, k ≥ 0.
Выход: “Да”, если G — LR(k)-грамматика. “Нет” в противном случае.
Метод.
1. Построим каноническую систему S множеств LR(k)-ситуаций, допусти-
мых для грамматики G.
2. Каждое A ∈S проверим на непротиворечивость. Если окажется, что рас-
сматриваемое множество
A противоречиво, то алгоритм заканчивается с отве-
том “Нет”.
3. Если алгоритм не закончился на шаге 2, то он выдает ответ “Да” и заверша-
ется.
Замечание 3.5. При тестировании достаточно просматривать лишь множества
A ∈S, в которых имеется хотя бы одна LR(k)-ситуация вида [A →β., u] (с точкой в кон-
це правила).
Пример 3.11. Протестируем грамматику примера 3.10, содержащую
следующие правила: 0) S
’→ S, 1) S → SaSb, 2) S → ε.
В соответствии с замечанием 3.5 необходимо и достаточно проверить лишь
непротиворечивость множеств
A
0
, A
1
, A
2
, A
4
, A
5
, A
7
, построенных в предыду-
щем примере (новая нумерация).
Проверка
A
0
= {[S
’
→ .S, ε], [S → .SaSb, ε | a], [S → ., ε | a]}:
u ∈{ε, a}, u ∉
1
EFF
G
(S{ε}) = ∅; u∉
1
EFF
G
(SaSb{ε, a}) = ∅.
Вывод: множество
A
0
непротиворечиво.
Проверка
A
1
={[S
’
→ S., ε], [S → S.aSb, ε | a]}:
u =
ε, u ∉
1
EFF
G
(aSb{ε, a}) = {a}.
Вывод: множество
A
1
непротиворечиво.
Проверка
A
2
={[S → Sa.Sb, ε | a], [S → .SaSb, a | b], [S → ., a | b]}:
u ∈{a , b}, u ∉
1
EFF
G
(Sb{ε, a}) = ∅, u ∉
1
EFF
G
(SaSb{a, b}) = ∅.
Вывод: множество
A
2
непротиворечиво.
Проверка
A
4
={[S → Sa.Sb, a | b], [S → .SaSb, a | b], [S → ., a | b]}:
u
∈{a , b}, u ∉
1
EFF
G
(Sb{a, b}) =
1
EFF
G
(SaSb{a, b}) = ∅.
Вывод: множество
A
4
непротиворечиво.
Проверка
A
5
={[S → SaSb., ε|a]} — множество непротиворечиво.
Проверка
A
7
={[S → SaSb., a | b]} — множество непротиворечиво.
Заметим, что
1
EFF
G
(Sb) =
1
EFF
G
(SaSb)=∅ потому, что из цепочек, начи-
нающихся на нетерминал S, выводимы терминальные цепочки только благодаря
ε-правилу, используемому на последнем шаге. Таким образом, получаемые це-
почки не участвуют в образовании
1
EFF
G
.
Поскольку противоречивых множеств не найдено, то рассматриваемая
грамматика — LR(1)-грамматика.