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

3.2.2. Унаследованные атрибуты

Термин "унаследованный" выражает ту мысль, что значение атрибута зависит от значений атрибутов предка символа или ат­рибутов его соседей в дереве вывода. Например, значение атри­бута r символа {ОТВЕТ} равно значению атрибута нетерминала Е (соседа слева), порождающего все выражение. Оно может быть вычислено только после того как будут определены значения всех синтезированных атрибутов нетерминалов.

Рассмотрим еще один пример АТ-грамматики. На рис. 3.6, а приведена входная КС-грамматика G4, порождающая описания переменных в некотором языке программирования. Множество входных символов этой грамматики состоит из лексем: запятая, идентификатор i и имя типа t.

Семантика обработки описания заключается в занесении типа переменной в определенное поле элемента таблицы идентификато­ров. Эту операцию можно выполнить с помощью семантической процедуры УСТАНОВИТЬ ТИП с двумя параметрами: указатель на элемент таблицы идентификаторов, соответствующий описываемой переменной, и тип переменной. Процедуру УСТАНОВИТЬ ТИП лучше всего вызывать сразу после распознавания идентифи­катора. Указанная последовательность действий может быть опи­сана транслирующей грамматикой G4Т, приведенной на рис. 3.6, б, в которой вызову процедуры УСТАНОВИТЬ ТИП соответствует операционный символ {ТИП}.

(1) D t i L (1) D t i { ТИП } L

(2) L , i L (2) L , i { ТИП } L

(3) L (3) L

а б

Рис. 3.6

Введем в транслирующую грамматику G4Т атрибуты и правила их вычисления. Входные символы t и i имеют по одному атрибуту. Значением атрибута символа i является указатель на элемент таблицы идентификаторов, а атрибут символа t может принимать значения из множества { ЦЕЛЫЙ, ВЕЩЕСТВЕННЫЙ, ЛОГИ­ЧЕСКИЙ }. Операционный символ {ТИП} должен иметь два унасле­дованных атрибута, значения которых совпадают со значениями соответствующих фактических параметров процедуры УСТАНОВИТЬ ТИП. Значения унаследованных атрибутов символа {ТИП} для пер­вого правила вывода приравниваются значениям соответствующих атрибутов входных символов i и t, входящих в правую часть того же правила левее символа {ТИП}. Во второе правило тип описываемых переменных можно передать через унаследован­ный атрибут нетерминала L. Значение этого унаследованного атрибута будет передаваться по дереву сверху вниз, на­чиная с вершины, где он получает начальное значение, равное значению атрибута входного символа t.

Атрибутная транслирующая грамматика G4А приведена на рис. 3.7.

(1) D tr ia { ТИП }a1, r1 Lr2

a1 a

r1, r2 r

(2) Lr tr ia { ТИП }a1, r1 Lr2

a1 a

r1, r2 r

  1. Lr

Рис. 3.7

(3)

Запись атрибутного правила в виде r1, r2 r означает, что значение r присваивается одновременно r1 и r2.

Входной цепочке tцелый i1, i2, i3 cоответствует дерево вывода в грамматике G4А, изображенное на рис. 3.8.

D

t целый i1 {ТИП} 1, целый L целый

, i2 {ТИП} 2, целый L целый

, i3 {ТИП} 3, целый L целый

Рис. 3.8

В рассмотренных примерах все операционные символы имели унаследованные атрибуты. При определении атрибутной транслирующей грамматики можно обойтись без синтезированных атрибутов операционных символов. Необходимость в синтезированных атрибутах операционных симво­лов может возникнуть в некоторых практических реализациях пе­реводов, поэтому в определение AT-грамматики включены оба типа атрибутов.

Соседние файлы в папке Формальные методы описания перевода(1)