Непростые LL(k)-трансляции и магазинные процессоры
Магазинный процессор ведёт анализ входной цепочки во входной грамматике и генерирует дерево вывода выходной цепочки в выходной грамматике.
Другими словами, он моделирует вывод элемента трансляции, используя магазин для манипуляции над синтаксическими цепочками трансляционных форм, а семантические цепочки этих форм представляет в виде дерева вывода в выходной грамматике, разрастающегося в ходе вывода.
Непростые LL(k)-трансляции и магазинные процессоры
В тот момент, когда в процессе анализа магазинный процессор воспроизводит шаг замены крайнего левого нетерминала в синтаксической цепочке как в k-пред- сказывающем алгоритме анализа, происходит пристраивание вершин, помеченных символами соответствующей семантической цепочки используемого правила схемы к вершине дерева вывода, представляющей связанное вхождение одноимённого нетерминала в семантической цепочке трансляционной формы.
Непростые LL(k)-трансляции и магазинные процессоры
Чтобы следить за связями между нетерминалами синтаксической цепочки текущей трансляционной формы с соответствующими вершинами дерева, представляющего семантические цепочки, используются указатели, хранимые в магазине анализатора при нетерминалах или LL(k)- таблицах, ассоциированных с ними.
Непростые LL(k)-трансляции и магазинные процессоры
Когда нетерминал (или LL(k)-таблица) на вершине магазина подменяется цепочкой, представляющей синтаксический элемент правила схемы, указатель, находящийся при нём (ней), указывает на вершину, к которой надлежит пристроить новые вершины. Указатели же на эти вновь появившиеся вершины помещаются в магазин при связанных вхождениях нетерминалов в синтаксическом элементе правила, о котором шла речь.
Непростые LL(k)-трансляции и магазинные процессоры
Проще всего проиллюстрировать работу магазинного процессора схематически — см.
рис. 2.3).
Непростые LL(k)-трансляции и магазинные процессоры
На рис. 2.3(a) представлена началь-
|
|
|
|
|
|
|
|
ная конфигурация магазинного про- |
|
|
|
|
|
|
|
Root |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
цессора. |
|
|
М |
|
|
|
|
|
|
|
В магазине, кроме |
маркера “дна” |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
магазина, находится только начальная |
а |
|
|
|
|
|
|
S |
г |
|
|
|
|
|
|
|
LL(k)-таблица T0 |
с указателем p0 на |
а |
|
T0, p0 |
|
|
|
корень строящегося дерева вывода в |
з |
|
|
|
|
|
|
|
|
|
|
|
выходной грамматике результата тран- |
и |
|
|
$ |
|
|
|
|
н |
|
|
|
|
|
|
сляции входной цепочки. Этот указа- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
тель запоминается также в отдельной |
|
|
|
|
|
|
|
|
переменной (Root), чтобы через него |
|
|
|
|
|
|
|
|
получить доступ |
к |
семантическому |
|
|
|
|
|
|
|
|
дереву после его построения. |
Рис. 2.3 (a). Магазинный процессор.
Непростые LL(k)-трансляции и магазинные процессоры
Рис. 2.3 (в) иллюстрирует результат этого шага: в магазине вместо таблицы TA, L помещён образ синтаксической цепочки 1B 1, а к узлу A пристроен древовидный образ
семантической цепочки 2B 2.
Показана связь одного символа TB, Y — образа нетерминала B в синтаксической цепочке, заместившей в магазине TA, L, с узлом B из множества вновь образованных узлов, составляющих образ семантической цепочки 2B 2.
Непростые LL(k)-трансляции и магазинные процессоры
Указатель q при TB, Y определяет ту вершину, к которой будет “подвешиваться” древовидный образ семантической цепочки некоторого правила схемы, определяющего нетерминал B, когда магазинный символ TB, Y будет замещаться синтаксической цепочкой этого же правила.
Опишем теперь неформально алгоритм построения магазинного процессора по данной схеме, обладающей указанными свойствами.
Алгоритм построения магазинного процессора
Алгоритм 2.9: построение магазинного процессора по непростой семантически однозначной sdts с входной грамматикой класса LL(k).
Вход: T = (N, , , R, S) — непростая семантически однозначная sdts с входной грамматикой Gi класса LL(k).
Выход: магазинный процессор , такой, что
( = (T).