Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Доки / T_ALG / 1 / FOMICHEV / Section5 / part513

.html
Скачиваний:
8
Добавлен:
17.04.2013
Размер:
7.66 Кб
Скачать

s73 Пред.Страница След.Страница Раздел Содержание     5.1.3. Пример АТ-грамматики     Атрибутные транслирующие грамматики могут быть использованы для построения выводов, в которых построение цепочки совмещается с вычислением значений атрибутов. Чтобы различать атрибуты в правилах вывода, условимся записывать синтезируемые атрибуты с префиксом в виде знака процента (%), а наследуемые - с префиксом в виде наклонной черты (/). Например, если символ <X> имеет один синтезируемый атрибут a и два наследуемых атрибута b, c, а символы <Y> и <Z> имеют по одному наследуемому атрибуту d и e, то правило <X> Ю <Y><Z> может быть записано в виде:

  <X>%a/b/c Ю <Y>/d<Z>/e.     Это правило вывода необходимо дополнить правилами вычисления значений атрибутов, которые в соответствии с приведенным определением могут иметь вид:

  a := b+d;

d := 2*c;

e := b.     В дальнейшем правила вычисления атрибутов условимся записывать непосредственно за правилами вывода или на отдельной строчке, отделяя их от правил вывода двумя восклицательными знаками (!!).     В качестве первого примера рассмотрим АТ-грамматику, описывающую трансляцию выражений, состоящих из констант C, в значение заданного выражения.     Допустим, что у каждого нетерминала <E>, <T>, <P> имеется по одному атрибуту, принимающему целочисленные значения. Терминальный символ C также имеет один атрибут, определяющий значение константы и принимающий целочисленные значения. Операционный символ грамматики {ответ} имеет наследуемый атрибут с целочисленной областью значений. Начальным символом грамматики служит символ <S>.     В тех случаях, когда атрибуты символов действия должны передаваться на выход вместе с этими символами действия, как это имеет место в рассматриваемом примере, условимся записывать атрибуты символов действия внутри фигурных скобок.

  Г 5. 0 :        <S> Ю <E>%a{ответ/b} !! b := a

<E>%d Ю <E>%e+<T>%f

!! d := e+f

<E>%g Ю <T>%h

!! g := h

<T>%i Ю <T>%j*<P>%k

!! i := j*k

<T>%m Ю <P>%n

!! m := n

<P>%p Ю (<E>%q)

! p := q

<P>%r Ю C/s

!! r := s. Пред.Страница След.Страница Раздел Содержание

 

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