Скачиваний:
8
Добавлен:
01.05.2014
Размер:
948.29 Кб
Скачать

2.4.8. Построение атрибутного дмп-процессора

Реализация перевода при помощи атрибутного ДМП-процессора [1] накладывает определенные ограничения на транслирующую атрибутную грамматику, лежащую в его основе. Нисходящие методы синтаксического анализа требуют построения описания перевода в виде L-атрибутной АТГ, восходящие методы – постфиксной АТГ. Методика построения нисходящих и восходящих ДМП-процессоров и их функционирование рассмотрено в [1]. В дополнение к этому дадим несколько частных рекомендаций, связанных с реализацией перевода при помощи алгоритмов типа «перенос-свертка».

Модификация алгоритма типа «перенос-свертка»

Анализ алгоритма показывает, что перенос символа в магазин выполняется в случае, если наверху магазина находится определенный нетерминал, а очередной входной символ имеет заданное значение. Это обстоятельство позволяет связать с операцией переноса выполнение семантических действий. Рассмотрим такие действия подробнее.

Если значение функции переноса f(A, a) = ПЕРЕНОС, то в грамматике существует правило вида B Aa. Добавив в ДМП-процессор возможность при переносе выполнить подпрограмму, соответствующую операционному символу {act}, можно не преобразовывать правило вида

B Aa{act} к постфиксной форме. Эта возможность может быть реализована путем:

  • указания в таблице переносов алгоритма нового значения функции (например, ПЕРЕНОС + ДЕЙСТВИЕ) и имени (номера) действия;

  • передачей в операционный символ соответствующих атрибутов;

Сохранение значений синтезированных атрибутов операционных символов можно реализовать, записав в магазин вспомогательные символы с нужными атрибутами, или приписав атрибуты подходящим терминалам. На рис. 2.5 значение метки, сгенерированной в операционном символе {BF}, запоминается (для передачи в операционный символ {DEFL}) как атрибут терминального символа THEN, переносимого в магазин.

Рекомендуемая форма описания функций свертки приведена на рис. 2.6.

Организация взаимодействия ДМП-процессоров

Если перевод описан n транслирующими атрибутными грамматиками, то он должен быть реализован при помощи n взаимосвязанных ДМП-процессоров. Для организации взаимодействия процессоров рекомендуется модифицировать стандартный алгоритм синтаксического анализа следующим образом.

  1. Вызывающий ДМП-процессор. В основе этого процессора лежит АТГ, в которой основной символ подграмматики – специальный терминальный символ (см. 2.4.3). Когда анализ входной цепочки достигает этого символа (например, при нисходящем анализе этот символ находится наверху магазина), то данный процессор должен выполнить переход к вызываемому процессору (если их несколько, то для реализации перехода необходимо задать имя или номер вызываемого процессора).

  2. Вызываемый ДМП-процессор. Каждый процессор должен работать со своим (логически) магазином. В программной реализации ДМП-процессора это может быть новый объект соответствующего класса или, если используется один физический магазин, то в него вталкивается символ «дно магазина» и анализ начинается так, как если бы магазир был пуст.

Действия

  1. Читать атрибут третьего сверху символа магазина (THEN) и запомнить его в переменной label.

  2. Выполнить функцию, соответствующую операционному символу {DEFL} с параметром label, строящую на выходе тетраду

    DEFL

    label

  3. Заменить пять верхних символов магазина нетерминалом OpIf.

Магазин

До (свертки)

После

1

END

Атрибуты

1

OpIf

2

Lop

3

THEN

lab1

4

Exp

R1

5

IF

...

Свертка по правилу (2)

Рис. 2.6

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

Соседние файлы в папке Разработка языковых процессоров