- •Построение матрицы операторного предшествования
- •Автомат с магазинной памятью (сокращенно мп-автомат)
- •Преобразователь с магазинной памятью (сокращенно мп - преобразователь)
- •Опишем lr(k)-алгоритм разбора.
- •Алгоритм построения управляющей таблицы для lr(0)-грамматики без -правил
- •Алгоритм построения управляющей таблицы для slr(1)-грамматики без -правил
- •Включение -правил в lr(0)- и slr (1)-грамматики
- •Алгоритм построения анализатора типа “перенос –свертка” для грамматик простого предшествования
- •Описание алгоритма
Алгоритм построения управляющей таблицы для lr(0)-грамматики без -правил
ВПЕРВ(Yj) = { Yj } { Xi Y A X и
Xi - самое левое грамматическое вхождение в правую часть правила A X} .
Заметим, что если в грамматике есть правила с пустой правой частью, то на последнем шаге вывода они не применяются.
Используя множества ВПЕРВ, определим отношение ВПОД (ВХОДИТ_ПОД) следующим образом:
Xi ВПОД Yj – это множество {( Xi,Yj ) A XiZi R и Yj BПЕРВ(Zi) } ;
ВПОД Yj – это множество { ( ,Yj ) Yj BПЕРВ(S0) } .
Вход
КС-грамматика G = < T, N, S, R > без -правил.
Выход
Множество LR(0)-таблиц для грамматики G или сообщение о том, что грамматика G не является LR(0)-грамматикой.
Описание алгоритма
1.Построить пополненную грамматику G’ для исходной грамматики G.
2.Вычислить отношения ВПОД для грамматических вхождений грамматики G’.
3.Определить функции переходов g(Х) следующим образом:
а) Построить таблицу, содержащую по одному столбцу для каждого символа из V {} и одной отроке для каждого грамматического вхождения грамматики G’и маркера дна. Элемент в строке, помеченной грамматическим вхождением Хi или маркером дна , и столбце, отмеченном символом грамматики Y, должен содержать все грамматические вхождения, для которых справедливо отношение Хi ВПОД Yj. Заметам, что некоторые элементы построенной таким образом таблицы могут содержать более одного грамматического вхождения, т.е. таблица может быть недетерминированной.
б) Интерпретируя построенную таблицу как таблицу конечного автомата (состояния - грамматические вхождения и маркер дна (начальное состояние), а входные символы - символы из V {}), определить тип автомата: детерминированный или недетерминированный. Недетерминированный автомат преобразовать в эквивалентный ему детерминированный автомат.
в) Определить магазинный алфавит Vp так, чтобы каждому состоянию детерминированного конечного автомата соответствовал ровно один магазинный символ.
г) Заменить совокупности грамматических вхождений, отмечающих состояния автомата, соответствующими символами из Vp.
Полученная таблица представляет собой таблицу функций переходов g(X) LR(0)-анализатора, причем элементы таблицы, соответствующие переходу в пустое множество состояний, имеют значение ОШИБКА.
4.Определить функции действия f(a) для всех магазинных символов, каждому из которых соответствует одна строка таблицы. Количество столбцов таблицы f(a) определяется количеством символов в T {}. Элементы таблицы f(a) определяются следую щим образом.
|
E |
T |
( |
) |
i |
+ |
{} |
{E0,E1} |
{T2} |
{(3} |
|
{i4} |
|
{E0,E1} |
|
|
|
|
|
{+1} |
{T2} |
|
|
|
|
|
|
{(3} |
{E1,E3} |
{T2} |
{(3} |
|
{i4} |
|
{i4} |
|
|
|
|
|
|
{+1} |
|
{T1} |
{(3} |
|
{i4} |
|
{E1,E3} |
|
|
|
{)3} |
|
{+1} |
{T1} |
|
|
|
|
|
|
{)3} |
|
|
|
|
|
|
б) Если магазинному символу Т соответствует только одно грамматическое вхождение Xi, являющееся самым правым вхождением в i-е правило вывода грамматики G, то все элемента строки, помеченной Т, имеют значение (СВЕРТКА, i).
в) Если магазинному символу Т соответствует маркер дна магазина или все грамматические вхождения, представляемые символом Т, не являются самыми правыми в своих правилах, то в строке, отмеченной Т, f() = ошибка, а значения остальных элементов – ПЕРЕНОС.
г) Если множество вхождений, соответствующее магазинному символу Т, содержит начальное вхождение S0 и хотя бы еще одно вхождение, отличное от которое не является самым правым в своем правиле, то в строке, отмеченной Т, f() = ДОПУСК, а значение всех остальных элементов - ПЕРЕНОС.
Если имеется множество грамматических вхождений, не удовлетворяющих перечисленным выше условиям, то G не является LR(0)-грамматикой.
Пример
Построим управляющую таблицу LR(0)-анализатора для грамматики G3
E E + T
E T
T (E)
T i
Определим пополненную грамматику
G3’= < T, N {S}, S, R { S E }>.
|
E0 |
E1 |
+1 |
T1 |
T2 |
(3 |
E3 |
)3 |
i4 |
E0 |
|
|
|
|
|
|
|
|
|
E1 |
|
|
1 |
|
|
|
|
|
|
+1 |
|
|
|
1 |
|
1 |
|
|
1 |
T1 |
|
|
|
|
|
|
|
|
|
T2 |
|
|
|
|
|
|
|
|
|
(3 |
|
1 |
|
|
1 |
1 |
1 |
|
1 |
E3 |
|
|
|
|
|
|
|
1 |
|
)3 |
|
|
|
|
|
|
|
|
|
i4 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
|
1 |
1 |
|
|
1 |
Функции переходов g(Х) LR(0)-анализатора для грамматики G3 приведены на рис. 4.12.
а)
|
E |
T |
( |
) |
i |
+ |
E0 |
|
|
|
|
|
|
E1 |
|
|
|
|
|
+1 |
+1 |
|
T1 |
(3 |
|
i4 |
|
T1 |
|
|
|
|
|
|
T2 |
|
|
|
|
|
|
(3 |
E1, E3 |
T2 |
(3 |
|
i4 |
|
E3 |
|
|
|
)3 |
|
|
)3 |
|
|
|
|
|
|
i4 |
|
|
|
|
|
|
|
E0, E1 |
T2 |
(3 |
|
i4 |
|
б)
Рис. 4.10
{E0,E1} |
{E1,E3} |
{} |
{T2} |
{(3} |
{i4} |
{+1} |
{T1} |
{)3} |
Ex |
Ey |
|
T2 |
(3 |
i4 |
+1 |
T1 |
)3 |
Рис. 4.11
g(X) |
E |
T |
( |
) |
i |
+ |
|
Ex |
T2 |
(3 |
|
i4 |
|
Ex |
|
|
|
|
|
+1 |
T2 |
|
|
|
|
|
|
(3 |
Ey |
T2 |
(3 |
|
i4 |
|
i4 |
|
|
|
|
|
|
+1 |
|
T1 |
(3 |
|
i4 |
|
Ey |
|
|
|
)3 |
|
+1 |
T1 |
|
|
|
|
|
|
)3 |
|
|
|
|
|
|
Рис. 4.12
Определим функции действия f(a).
f(a) |
( |
) |
i |
+ |
|
|
П |
П |
П |
П |
|
Ex |
П |
П |
П |
П |
Д |
T2 |
С,2 |
С,2 |
С,2 |
С,2 |
С,2 |
(3 |
П |
П |
П |
П |
|
i4 |
С,4 |
С,4 |
С,4 |
С,4 |
С,4 |
+1 |
П |
П |
П |
П |
|
Ey |
П |
П |
П |
П |
|
T1 |
С,1 |
С,1 |
С,1 |
С,1 |
С,1 |
)3 |
С,3 |
С,3 |
С,3 |
С,3 |
С,3 |
Рис. 4.13