Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lects_1.pdf
Скачиваний:
25
Добавлен:
09.06.2015
Размер:
731.64 Кб
Скачать

5.4. L - атрибутные транслирующие грамматики

Определение.

AT-грамматика является L - атрибутной транслирующей грамматикой (LAT-

грамматикой), если выполняются следующие три условия:

1)Каждый наследуемый атрибут символа правой части правила грамматики должен вычисляться с использованием либо наследуемых атрибутов символов левой части правила, либо с использованием произвольных атрибутов символов правой части правила, расположенных левее данного символа.

2)Каждый синтезируемый атрибут символа левой части правила грамматики должен вычисляться с использованием наследуемых атрибутов этого символа левой части правила или произвольных атрибутов символов правой части этого правила.

3)Каждый синтезируемый атрибут символа действия должен вычисляться по наследуемым атрибутам этого символа действия.

Значение условия 1 состоит в том, что оно обеспечивает зависимость наследуемых атрибутов от величин, находящихся только слева от них в правиле грамматики (символ L в обозначении LАТ-грамматики - это сокращение от Left - левый). Это условие позволяет обрабатывать атрибуты сверху вниз, потому что каждый символ обрабатывается до того, как прочитаны символы справа от него. Условия 2 и 3 обеспечивают исключение круговых зависимостей атрибутов. Условия 1, 2, 3 для правила вида

<A> <B><C>

приводят к следующему порядку вычисления атрибутов:

1)наследуемые атрибуты <A>,

2)наследуемые атрибуты <B>,

3)синтезируемые атрибуты <B>,

4)наследуемые атрибуты <C>,

5)синтезируемые атрибуты <C>,

6)синтезируемые атрибуты <A>.

63

Чтобы убедиться в том, что заданная АТ-грамматика обладает свойствами LАТграмматики, нужно проверить для каждого правила грамматики выполнение условий 1 и 2, а также для каждого символа действия - выполнение условия 3. Такая проверка заключается в анализе зависимостей атрибутов для каждого правила их вычисления. Для примера выполним анализ возможных зависимостей атрибутов, отвечающих рассмотренным условиям, для следующего правила:

<A>/a1%x1%y1 <B>/b1<C>%x2<D>%y2/a2/b2<E>/a3

Анализ зависимостей этого правила должен заключаться в проверке того, что правила вычисления атрибутов b1, a2, b2, a3 должны удовлетворять условию 1, а правила вычисления атрибутов x1, y1 - условию 2. Согласно условию 1 правило вычисления атрибута b1 может использовать для вычисления только атрибут a1, поэтому такие правила могут, например, иметь вид:

b1 := f(a1)

Условие 1 для рассматриваемого правила позволяет использовать для вычисления атрибутов a2 и b2 в качестве аргументов величины a1, b1, x2, а при вычислении a3 аргумен-

тами могут быть a1, b1, x2, y2, a2, b2.

Согласно условию правила 2 при вычислении атрибутов x1 и y1 могут быть использованы любые атрибуты кроме самих x1, y1.

Условие 3 используется для проверки символов действия. Чтобы убедиться в его выполнении, нужно просмотреть список аргументов правил вычисления синтезируемых атрибутов и убедиться, что среди них нет синтезированных атрибутов.

5.4.1. Форма простого присваивания АТ-грамматик

Ограничением, накладываемым на AT-грамматики, предназначенные для построения преобразователей, является запрещение использования в правилах вычисления атрибутов нетерминальных символов. Правила вычисления атрибутов должны иметь форму операторов присваивания с переменными в правой части. Грамматика с такими правилами на-

зывается AT-грамматикой простого присваивания.

64

Чтобы сократить число правил вычисления атрибутов, в таких грамматиках разрешается использовать правила не только в виде простых операторов присваивания

a := b,

но и в виде операторов множественного присваивания

(a1, a2, a3) := b,

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

Определение.

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

Если копирующие правила являются зависимыми, то в некоторых случаях их можно объединить в одно правило. Например, правила

a := x и (b, c) := x

можно записать как одно правило

(a, b, c) := x,

а правила

(a, x) := z и (b,c) := x

можно записать в виде

(a, b, c, x) := z.

Определение.

AT-грамматика имеет форму простого присваивания, если выполняются следующие условия:

1)все правила вычисления атрибутов, за исключением правила вычисления синтезируемых символов действия, являются копирующими,

2)для каждого правила грамматики множество копирующих правил является независимым.

65

Свойства L - атрибутивности и простого присваивания AT-грамматик являются не-

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

Если АТ–грамматика не имеет формы простого присваивания, то для нее можно попы-

таться построить эквивалентную AT-грамматику в форме простого присваивания.

Такое построение связано с исключением некопирующих правил вычисления атрибутов и добавлением вместо них операционных символов в правила грамматики.

Рассмотрим пример. Допустим, что задано некопирующее атрибутное правило в виде:

<A> a/x<B>%y<C>/z z := f(x, y).

Вначале введем новый символ действия, представляющий вычисление функции f. Обозначим символ действия {f} и снабдим его тремя атрибутами. Два наследуемых атрибута b1, b2 необходимы для задания аргументов функции, и один синтезируемый атрибут c – для получения значения функции. В результате получаем следующее определение символа действия:

{f}/b1/b2%c,

где значение c определяется как функция f(b1, b2). Затем включим новый символ действия в правило грамматики и заменим некопирующее правило вычисления атрибута с функцией f в правой части несколькими копирующими правилами, устанавливающими связь между атрибутами нового символа действия и аргументами

функции f. В результате может быть получено следующее атрибутное правило:

<A> a/x<B>%y{f}/b1/b2%c<C>/z b1 := x; b2 := y; z := c,

которое содержит только копирующие правила, два из которых копируют аргументы, и одно - результат. Это правило дает тот же эффект, что и первоначальное правило, поскольку оба правила порождают одинаковые выходные цепочки с атрибутами и дают одно и то же значение атрибута z.

66

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]