Атрибутная грамматика

Материал из WEGA

Атрибутная грамматика (Attribute grammar) - состоит из КС-грамматики [math]\displaystyle{ G }[/math], называемой ее основой (или базой), отображений [math]\displaystyle{ S }[/math] и [math]\displaystyle{ I }[/math], ставящих в соответствие каждому символу [math]\displaystyle{ X }[/math] непересекающиеся множества [math]\displaystyle{ S(X) }[/math] и [math]\displaystyle{ I(X) }[/math] его синтезируемых и наследуемых атрибутов, а также из множеств [math]\displaystyle{ M(p) }[/math] так называемых семантических правил (правил вычисления значений атрибутов) для каждого правила [math]\displaystyle{ p\in P }[/math].


Пусть [math]\displaystyle{ p:X_0\longrightarrow X_1X_2\ldots X_{n\lt p\gt } }[/math] --- некоторое правило грамматики [math]\displaystyle{ G }[/math]. Говорят, что имеется вхождение атрибута [math]\displaystyle{ a }[/math] при [math]\displaystyle{ j }[/math]-м символе [math]\displaystyle{ X_j }[/math] правила [math]\displaystyle{ p }[/math] (обозначается [math]\displaystyle{ a\lt j\gt }[/math]), если [math]\displaystyle{ a\in A(X_j)=I(X_j)\cup S(X_j) }[/math]. Для [math]\displaystyle{ a\lt j\gt }[/math] иногда используются также обозначения [math]\displaystyle{ X_j.a }[/math] и [math]\displaystyle{ a^{X_j} }[/math]. Множество [math]\displaystyle{ M(p) }[/math] состоит из семантических правил, определяющих вычисление элементов из [math]\displaystyle{ S(X_0) }[/math] и [math]\displaystyle{ I(X_j) }[/math] для [math]\displaystyle{ j\in [1,n\lt p\gt ] }[/math] в терминах элементов [math]\displaystyle{ A(X_i), 0\leq i\leq n\lt p\gt }[/math], и имеющих вид


[math]\displaystyle{ a_0\lt i_0\gt =f^{p}_{a_0\lt i_0\gt } (a_1\lt i_1\gt ,\ldots , a_{k}\lt i_{k}\gt ), }[/math]


где либо [math]\displaystyle{ i_0=0 }[/math] и [math]\displaystyle{ a_0\in S(X_0) }[/math], либо [math]\displaystyle{ 1\leq i_0\leq n\lt p\gt }[/math] и [math]\displaystyle{ a_0\in I(X_{i_0}) }[/math].

Если [math]\displaystyle{ M(p) }[/math] содержит семантическое правило, определяющее вычисление [math]\displaystyle{ a_0\lt i_0\gt }[/math] по [math]\displaystyle{ a_1\lt i_1\gt ,\ldots , a_k\lt i_k\gt }[/math], то говорят, что [math]\displaystyle{ a_0\lt i_0\gt }[/math] локально зависит от [math]\displaystyle{ a_1\lt i_1\gt }[/math],[math]\displaystyle{ \ldots }[/math], [math]\displaystyle{ a_k\lt i_k\gt }[/math]. В частном случае [math]\displaystyle{ k }[/math] может быть равно нулю, и тогда говорят, что атрибут [math]\displaystyle{ a_0\lt i_0\gt }[/math] получает в качестве значения константу.

Пусть [math]\displaystyle{ W(p) }[/math] обозначает множество вхождений атрибутов в правило [math]\displaystyle{ p }[/math], т.е. [math]\displaystyle{ W(p)=\{ a\lt i\gt :a\in A(X_i), 0\leq i\leq n\lt p\gt \} }[/math]. Таким образом, семантические правила из [math]\displaystyle{ M(p) }[/math] индуцируют на [math]\displaystyle{ W(p) }[/math] отношение локальной зависимости [math]\displaystyle{ D(p) }[/math] такое, что [math]\displaystyle{ b\lt j\gt D(p)a\lt i\gt }[/math] тогда и только тогда, когда [math]\displaystyle{ b\lt j\gt }[/math] появляется в определении [math]\displaystyle{ a\lt i\gt }[/math].

Граф локальной зависимости в продукции [math]\displaystyle{ p }[/math] --- это граф отношения [math]\displaystyle{ D(p) }[/math] на множестве [math]\displaystyle{ W(p) }[/math].

Атрибутная грамматика является грамматикой в нормальной форме (или нормализованной), если ее семантические правила определяют вычисления атрибутов из [math]\displaystyle{ W(p) }[/math] по атрибутам из [math]\displaystyle{ I(X_0) }[/math] и [math]\displaystyle{ S(X_j) }[/math] для [math]\displaystyle{ 1\leq j\leq n\lt p\gt }[/math], т.е. они используют только атрибуты, определенные вне продукции [math]\displaystyle{ p }[/math]. Всякая атрибутная грамматика может быть преобразована в нормальную форму посредством простого преобразования семантических определений, если [math]\displaystyle{ D(p) }[/math] является ациклическим.

См. также

Атрибутное дерево, Атрибутное вычисление, Задача трансляции.

Литература

[Евстигнеев-Касьянов/98]