Атрибутная грамматика: различия между версиями
Glk (обсуждение | вклад) (Создана новая страница размером '''Атрибутная грамматика''' (''Attribute grammar'') - состоит из ''КС-грамматики'' <math>G</math...) |
KEV (обсуждение | вклад) Нет описания правки |
||
Строка 1: | Строка 1: | ||
'''Атрибутная грамматика''' (''Attribute grammar'') - состоит из ''КС-грамматики'' <math>G</math>, | '''Атрибутная грамматика''' (''[[Attribute grammar]]'') - состоит из [[КС-грамматика|''КС-грамматики'']] <math>G</math>, называемой ее ''основой'' (или [[база|''базой'']]), отображений | ||
называемой ее ''основой'' (или ''базой''), отображений | |||
<math>S</math> и <math>I</math>, ставящих в соответствие каждому символу <math>X</math> | <math>S</math> и <math>I</math>, ставящих в соответствие каждому символу <math>X</math> | ||
непересекающиеся множества <math>S(X)</math> и <math>I(X)</math> его | непересекающиеся множества <math>S(X)</math> и <math>I(X)</math> его синтезируемых и ''наследуемых'' атрибутов, а также из | ||
синтезируемых | |||
множеств <math>M(p)</math> так называемых ''семантических правил'' | множеств <math>M(p)</math> так называемых ''семантических правил'' | ||
(правил вычисления значений атрибутов) для каждого правила | (правил вычисления значений атрибутов) для каждого правила | ||
Строка 10: | Строка 8: | ||
Пусть <math>p:X_0\longrightarrow X_1X_2\ldots X_{n<p>}</math> --- | Пусть <math>p:X_0\longrightarrow X_1X_2\ldots X_{n<p>}</math> --- | ||
некоторое правило грамматики <math>G</math>. Говорят, что имеется | некоторое правило [[грамматика|грамматики]] <math>G</math>. Говорят, что имеется | ||
вхождение атрибута <math>a</math> при <math>j</math>-м символе <math>X_j</math> правила <math>p</math> | вхождение атрибута <math>a</math> при <math>j</math>-м символе <math>X_j</math> правила <math>p</math> | ||
(обозначается <math>a<j></math>), если <math>a\in A(X_j)=I(X_j)\cup S(X_j)</math>. | (обозначается <math>a<j></math>), если <math>a\in A(X_j)=I(X_j)\cup S(X_j)</math>. | ||
Строка 22: | Строка 20: | ||
<math>a_0<i_0>=f^{p}_{a_0<i_0>} (a_1<i_1>,\ldots , a_{k}<i_{k}>),</math> | <math>a_0<i_0>=f^{p}_{a_0<i_0>} (a_1<i_1>,\ldots , a_{k}<i_{k}>),</math> | ||
где либо <math>i_0=0</math> и <math>a_0\in S(X_0)</math>, либо <math>1\leq | |||
i_0\leq n<p></math> и <math>a_0\in I(X_{i_0})</math>. | i_0\leq n<p></math> и <math>a_0\in I(X_{i_0})</math>. | ||
Строка 39: | Строка 38: | ||
определении <math>a<i></math>. | определении <math>a<i></math>. | ||
''Граф локальной зависимости'' в продукции <math>p</math> --- это граф | ''[[Граф]] локальной зависимости'' в продукции <math>p</math> --- это граф | ||
отношения <math>D(p)</math> на множестве <math>W(p)</math>. | отношения <math>D(p)</math> на множестве <math>W(p)</math>. | ||
Строка 52: | Строка 51: | ||
семантических определений, если <math>D(p)</math> является ациклическим. | семантических определений, если <math>D(p)</math> является ациклическим. | ||
См. также ''Атрибутное дерево, Атрибутное вычисление, | ==См. также== | ||
Задача трансляции.'' | ''[[Атрибутное дерево]], [[Атрибутное вычисление]], [[Задача трансляции]].'' | ||
==Литература== | ==Литература== | ||
[Евстигнеев-Касьянов/98] | [Евстигнеев-Касьянов/98] |
Версия от 14:56, 25 сентября 2009
Атрибутная грамматика (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]