101
3. К каждой вершине уровня level, которая помечена нетерминалом, при-
строим копии дуг управляющей граф-схемы, инцидентных начальной вершине
компоненты, определяющей этот нетерминал, вместе с концевыми вершинами
и контекстными метками, помечающими эти дуги. Вновь присоединенные
вершины будем считать относящимися к уровню level+1 разложения состоя-
ния q. Далее, level:=level + 1.
Шаг 3 повторяется до тех пор, пока не обнаружится, что на текущем уровне
нет ни одной нетерминальной вершины, и тогда алгоритм построения разло-
жения состояния q заканчивается. Если же шаг 3 “зацикливается”, разложение
состояния q — бесконечно
77
.
External balance — проверка внешней балансировки. Процедура External
balance проверяет выполнение условия внешней балансировки для дерева воз-
вратных состояний, корень которого задан как ее параметр. Это условие состо-
ит в том, что для каждой пары вершин, принадлежащих одной и той же ветви
этого дерева и представляющих некоторые состояния q
1
и q
2
, должно быть:
Accept(q
1
) ∩ Accept(q
2
)=∅,
где Accept(q)
def
=
{a | a ∈Σ
f
& ∃r : (r ∈ℜ
f
*
&
2
f
δ
(q, a, r) — определено} —
множество входных символов, допустимых в состоянии q.
Forward pass semantics — семантика леса. Процедура Forward pass
semantics(f) определяет множество семантических цепочек прямого просмотра
для леса f, заданного ее параметром. Именно, для каждой ветви леса f опреде-
ляется цепочка, составленная из семантических символов прямого просмотра,
помечающих эту ветвь. Множество всех таких цепочек выдается в качестве ре-
зультата процедуры.
Height
— высота леса. Процедура Height вычисляет высоту леса, заданного
ее параметром. Она равна длине самой длинной ветви по всем деревьям, вхо-
дящим в данный лес, и выражается числом дуг, составляющих эту ветвь.
Leaves — множество листьев. Процедура Leaves выдает множество
листьев, т. е. концевых вершин леса или множества ветвей, заданного ее
параметром.
Mark
— метки вершин. Процедура Mark выдает множество меток, поме-
чающих вершины, заданные ее параметром.
Mark
ℜ
f
— резольверные метки. Процедура выдает цепочку резольверов
прямого просмотра, помечающих данную ветвь разложения состояния прямого
просмотра.
Mask — нетерминалы меток конечных вершин.
Процедура Mask(q, r), где q — подавляемое состояние, r — цепочка ре-
зольверных символов прямого просмотра, выдает множество нетерминалов,
входящих в состав меток конечных вершин — листьев тех ветвей разложения
77
Разумеется, фактическое “зацикливание” алгоритма не допускается. Признаком,
предупреждающим о зацикливании, является появление на какой-нибудь ветви разложения
двух вершин, помеченных одинаковыми нетерминальными символами.