- •3. Атрибутные транслирующие грамматики
- •3.1. Транслирующие грамматики
- •3.2. Атрибутные транслирующие грамматики
- •3.2.1. Синтезированные атрибуты
- •Рис 3.4
- •3.2.2. Унаследованные атрибуты
- •3.2.3. Определение атрибутной транслирующей грамматики
- •P2 p1
- •3.2.4. L- и s-атрибутные транслирующие грамматики
- •3.2.5. Форма простого присваивания
E t синтезированный t
R p, t унаследованный p синтезированный t
Атрибуты операционных символов – унаследованные
S i p1 = E q1 {ПРИСВОИТЬ} p2, q2
P2 p1
q2 q1
(2) E t2 i p1 R p2, t1
p2 p1
t2 t1
(3) R p1, t2 + i q1 {СЛОЖИТЬ} p2, q2, r1R r2, t1
r1 , r2 GETNEW
p2 p1
q2 q1
t2 t1
(4) R p1, t2 i q1 {УМНОЖИТЬ} p2, q2, r1R r2, t1
r1 , r2 GETNEW
p2 p1
q2 q1
t2 t1
(5) R p1, t2
p2 p1
Рис. 3.9
На рис. 3.10 приведено атрибутное дерево вывода в АТ-грамматике G5А, соответствующее входной цепочке i 5 = i 7 + i 2 i 3 при условии, что процедура GETNEW выдает последовательные адреса ячеек, начиная с адреса 100. Заметим (см. рис. 3.9), что при применении правила (5) синтезированному атрибуту нетерминала R присваивается значение его унаследованного атрибута. Затем это значение передается вверх по дереву вывода как синтезированный атрибут нетерминала из левой части правил (4), (3) и (2) и используется в качестве второго атрибута операционного символа {ПРИСВОИТЬ}.
Определение. Последовательность атрибутных входных и операционных символов, полученная по атрибутному дереву вывода в АТ-грамматике, называется атрибутной активной цепочкой.
Определение. Множество пар, первым элементом которых является атрибутная входная цепочка, а вторым элементом – атрибутная последовательность операционных символов атрибутной активной цепочки, называется атрибутным переводом (GA), определяемым АТ-грамматикой.
Например, грамматика G5А для входной цепочки i 5 = i 7 + i 2 i 3 определяет следующую атрибутную последовательность операционных символов:
{ СЛОЖИТЬ } 7, 2, 100 { УМНОЖИТЬ} 100, 3, 101 { ПРИСВОИТЬ } 5, 101 .
Определение. Дерево вывода в АТ-грамматике называется завершенным, если в результате применения процедуры построения дерева значения всех атрибутов всех символов окажутся вычисленными.
Хотя для каждого атрибута, входящего в дерево вывода, существует правило его вычисления, может оказаться, что между атрибутами возникла круговая зависимость, в результате чего нельзя получить завершенное дерево.
Определение. АТ-грамматика называется корректной тогда и только тогда, когда в результате применения описанной процедуры построения атрибутного дерева вывода получается завершенное дерево.
Рассмотрим два подкласса корректных АТ-грамматик, которые часто используются при проектировании компиляторов: L-атрибутные транслирующие грамматики и S-атрибутные транслирующие грамматики.
3.2.4. L- и s-атрибутные транслирующие грамматики
Определение. АТ-грамматика называется L-атрибутной тогда и только тогда, когда выполняются следующие условия:
Аргументами правила вычисления значения унаследованного атрибута символа из правой части правила вывода могут быть только унаследованные атрибуты символа из левой части и произвольные атрибуты символов из правой части, расположенные левее рассматриваемого символа.
Аргументами правила вычисления значения синтезированного атрибута символа из левой части правила вывода являются унаследованные атрибуты этого символа или произвольные атрибуты символов из правой части.
Аргументами правила вычисления значения синтезированного атрибута операционного символа могут быть только унаследованные атрибуты этого символа.
Является ли заданная АТ-грамматика L-атрибутной, можно проверить, независимо исследуя каждое правило вывода и каждое правило вычисления значения атрибута.
Примером L-атрибутной транслирующей грамматики является грамматика G5А (см. рис. 3.9).
При выполнении условия 1 унаследованные атрибуты каждой вершины дерева вывода зависят (непосредственно или косвенно) только от атрибутов входных символов, расположенных в дереве левее данной вершины, что позволяет использовать L-атрибутные грамматики в нисходящих синтаксических анализаторах. Условия 2 и 3 введены с целью сделать АТ-грамматику корректной.
В L-атрибутной транслирующей грамматике атрибуты символов А, В и С из правила вывода А ВС можно вычислять в следующем порядке:
унаследованные атрибуты символа А;
унаследованные атрибуты символа B;
синтезированные атрибуты символа В;
унаследованные атрибуты символа С;
синтезированные атрибуты символа С;
синтезированные атрибуты символа А.
Определение. АТ-грамматика называется S-атрибутной тогда и только тогда, когда она является L-атрибутной и все атрибуты нетерминалов – синтезированные.