Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалки по ТЯПу.doc
Скачиваний:
58
Добавлен:
01.05.2014
Размер:
498.18 Кб
Скачать
  1. Правила работы нисходящего атрибутного преобразователя.

Атрибутные преобразователи ( АП ) Атрибутные описания, рассмотренные в предыдущем разделе, являются обобщением синтаксически-ориентированного способа описания перевода, показывающим возможность совмещения семантических вычислений с процессом синтаксического анализа, а описанные в настоящем разделе правила работы и построения атрибутного преобразователя демонстрируют возможность практического использования таких описаний при построении компиляторов для искусственных языков. Рассматриваемые АП строятся на основе нисходящих символьных преобразователей, поэтому их называют нисходящими атрибутными преобразователями. Такие преобразователи позволяют выполнять в процессе работы такие действия, как, например, выделение памяти для промежуточных результатов, заполнение полей таблиц и проверку контекстных условий. Естественно, что расширение функциональных озможностей по сравнению с символьными преобразователями достигается за счет усложнения структуры и правил работы АП. Эти усложнения, в основном, являются следствием необходимости сохранения и определения значений атрибутов в магазине в процессе работы АП.

Описание работы АП.В процессе работы АТ-преобразователь должен читать символы, находящиеся в вершине магазина, и выполнять действия, связанные не только с распознаванием входной цепочки и формированием выходной цепочки, но и действия по обработке атрибутов, которые можно описать в виде следующих правил. 1) Обработка входной цепочки начинается, когда в магазине находится начальный символ грамматики и маркер дна. Первая инструкция преобразователя должна заносить в магазин начальный символ грамматики и присваивать наследуемым атрибутам начального символа начальные значения. При этом поля синтезируемых атрибутов заполняются пустыми указателями. 2) Если в вершине магазина находится входной символ, имеющий атрибут, то производится считывание очередного символа с входной ленты, и эти символы сравниваются. Если они совпадают, то читается атрибут входного символа с ленты и записывается в ячейки магазина, образующие цепочку, на которую ссылается указатель, записанный в поле атрибута рассматриваемого входного символа. Затем входной символ и его атрибут удаляются из магазина, и входная головка сдвигается. 3) Если в вершине магазина находится входной символ, не имеющий атрибута, то производится считывание очередного входного символа с входной ленты, и эти символы сравниваются. Если они совпадают, то символ удаляется из магазина, и входная головка сдвигается на одну позицию. 4) Если в вершине магазина находится символ действия, то выполняется чтение атрибутов, соответствующих его аргументам, затем вычисляются значения в соответствии с функцией символа действия синтезируемых атрибутов, и эти значения помещаются во все поля, определяемые цепочкой указателей, на которую ссылается указатель в поле синтезируемого атрибута. Если символ действия должен передаваться на выход, то осуществляется запись этого символа и его атрибутов на выходную ленту. 5) Если в вершине магазина находится нетерминал, то он удаляется из магазина и вместо него в магазине строится фрагмент, соответствующий правой части правила грамматики, и устанавливаются связи этого фрагмента с атрибутами удаленного символа, которые оказываются расположенными непосредственно под создаваемым фрагментом. Такие связи должны быть определены в инструкции построения фрагмента. 6) Если в вершине магазина находится атрибут, значение которого определено, то он удаляется из магазина.

Соседние файлы в предмете Теория языков программирования