Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
58
Добавлен:
16.04.2015
Размер:
1.47 Mб
Скачать

Непростые LL(k)-трансляции и магазинные процессоры

Магазинный процессор ведёт анализ входной цепочки во входной грамматике и генерирует дерево вывода выходной цепочки в выходной грамматике.

Другими словами, он моделирует вывод элемента трансляции, используя магазин для манипуляции над синтаксическими цепочками трансляционных форм, а семантические цепочки этих форм представляет в виде дерева вывода в выходной грамматике, разрастающегося в ходе вывода.

281

Непростые LL(k)-трансляции и магазинные процессоры

В тот момент, когда в процессе анализа магазинный процессор воспроизводит шаг замены крайнего левого нетерминала в синтаксической цепочке как в k-пред- сказывающем алгоритме анализа, происходит пристраивание вершин, помеченных символами соответствующей семантической цепочки используемого правила схемы к вершине дерева вывода, представляющей связанное вхождение одноимённого нетерминала в семантической цепочке трансляционной формы.

282

Непростые LL(k)-трансляции и магазинные процессоры

Чтобы следить за связями между нетерминалами синтаксической цепочки текущей трансляционной формы с соответствующими вершинами дерева, представляющего семантические цепочки, используются указатели, хранимые в магазине анализатора при нетерминалах или LL(k)- таблицах, ассоциированных с ними.

283

Непростые LL(k)-трансляции и магазинные процессоры

Когда нетерминал (или LL(k)-таблица) на вершине магазина подменяется цепочкой, представляющей синтаксический элемент правила схемы, указатель, находящийся при нём (ней), указывает на вершину, к которой надлежит пристроить новые вершины. Указатели же на эти вновь появившиеся вершины помещаются в магазин при связанных вхождениях нетерминалов в синтаксическом элементе правила, о котором шла речь.

284

Непростые LL(k)-трансляции и магазинные процессоры

Проще всего проиллюстрировать работу магазинного процессора схематически — см.

рис. 2.3).

285

Непростые LL(k)-трансляции и магазинные процессоры

На рис. 2.3(a) представлена началь-

 

 

 

 

 

 

 

 

ная конфигурация магазинного про-

 

 

 

 

 

 

 

Root

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

цессора.

 

 

М

 

 

 

 

 

 

 

В магазине, кроме

маркера “дна”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

магазина, находится только начальная

а

 

 

 

 

 

 

S

г

 

 

 

 

 

 

 

LL(k)-таблица T0

с указателем p0 на

а

 

T0, p0

 

 

 

корень строящегося дерева вывода в

з

 

 

 

 

 

 

 

 

 

 

 

выходной грамматике результата тран-

и

 

 

$

 

 

 

 

н

 

 

 

 

 

 

сляции входной цепочки. Этот указа-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тель запоминается также в отдельной

 

 

 

 

 

 

 

 

переменной (Root), чтобы через него

 

 

 

 

 

 

 

 

получить доступ

к

семантическому

 

 

 

 

 

 

 

 

дереву после его построения.

Рис. 2.3 (a). Магазинный процессор.

286

(б)

М

а

г

а

з

и

н

(в)

М

а

г

а

з

и

н

Root S

TA,L, p А

A 1B 1, 2B 2

$

Root S

1

TB,Y, q

A

1

 

2 B

2

$

На рис. 2.3 (б) представлена промежуточная конфигурация магазинного процессора, когда часть дерева вывода построена.

Среди его листьев находится вершина, помеченная нетерминалом A.

В рассматриваемый момент на вершине магазина находится LL(k)- таблица TA, L с указателем p на упомянутую вершину дерева вывода, помеченную нетерминалом A, к которой будет пристроено поддерево, представляющее семантический элемент

правила

A 1B 1, 2B 2,

используемого на этом шаге моделирования вывода. В этом правиле явно выделена пара связанных вхождений одного нетерминала (B).

Рис. 2.3 (б, в). Магазинный процессор.

287

Непростые LL(k)-трансляции и магазинные процессоры

Рис. 2.3 (в) иллюстрирует результат этого шага: в магазине вместо таблицы TA, L помещён образ синтаксической цепочки 1B 1, а к узлу A пристроен древовидный образ

семантической цепочки 2B 2.

Показана связь одного символа TB, Y — образа нетерминала B в синтаксической цепочке, заместившей в магазине TA, L, с узлом B из множества вновь образованных узлов, составляющих образ семантической цепочки 2B 2.

288

Непростые LL(k)-трансляции и магазинные процессоры

Указатель q при TB, Y определяет ту вершину, к которой будет “подвешиваться” древовидный образ семантической цепочки некоторого правила схемы, определяющего нетерминал B, когда магазинный символ TB, Y будет замещаться синтаксической цепочкой этого же правила.

Опишем теперь неформально алгоритм построения магазинного процессора по данной схеме, обладающей указанными свойствами.

289

Алгоритм построения магазинного процессора

Алгоритм 2.9: построение магазинного процессора по непростой семантически однозначной sdts с входной грамматикой класса LL(k).

Вход: T = (N, , , R, S) — непростая семантически однозначная sdts с входной грамматикой Gi класса LL(k).

Выход: магазинный процессор , такой, что

( = (T).

290

Соседние файлы в папке lectures