Опубликован: 06.08.2007 | Доступ: свободный | Студентов: 1931 / 1080 | Оценка: 4.45 / 4.29 | Длительность: 18:50:00
Специальности: Программист
Дополнительный материал 2:

Атрибутные грамматики

Вычислительные последовательности и корректность. Определение визита

Назовем вычислительной последовательностью [4] для дерева вывода t в AG последовательность вида:

cs = (n1, A1)(n2, A2)(n2, A2) ... (nr, Ar);

где

  1. nj - внутренняя вершина t (в частности, корень);
  2. если nj#nj + 1, то nj + 1 - отец, сын или брат nj ;
  3. Aj - либо подмножество синтезируемых атрибутов nj, либо подмножество наследуемых атрибутов (то есть либо либо A_{j}\in S(Xn_{j} )), A_{j}\in S(Xn_{j})) ;
  4. n1 = nr - корень дерева;
  5. атрибуты Aj не зависят от Aj для i >= j ;
  6. рассмотрим какую-либо внутреннюю вершину n дерева t. Тогда вычислительную последовательность cs можно записать в следующем виде: cs = u1(n, B1)u2(n, B2) ... (n, Bh)uh+1, где подпоследовательности u1 ... uh+1 не содержат элементов вида (n, A). Тогда
    1. Bj <= I(Xn), если j нечетно;
    2. Bj <= S(Xn), если j четно,
    3. U_{j}\in [1, n], B = A(X_{n}) - вычисляются все атрибуты каждого символа X ;
    4. B_{i} \cup  B_{j} = 0, если i#j - все атрибуты вычисляются по одному разу.
    5. пусть cs = cs1<n, Bj><n1, A1><n2, A2>...<n, Bj+1> cs2, если j нечетно (четно), то nj - вершины поддерева с корнем n (вершины t вне поддерева с корнем n ).

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

Назовем незацикленную атрибутную грамматику корректной, если для всякого еe атрибутированного дерева существует вычислительная последовательность.

Теорема B.4. Незацикленная атрибутная грамматика корректна тогда и только тогда, когда для каждого правила p : X0->X1 ... Xnp если a\in I(X_{i}), i\in [1, n_{p}], то имеется в точности одно семантическое правило, сопоставленное p и определяющее значение a(Xi), и если a\in S(X_{0}), то имеется в точности одно семантическое правило, сопоставленное p и определяющее значение a(X0).

Теорема B.5. Сложность проверки незацикленной атрибутной грамматики на корректность линейна по размеру атрибутной грамматики.

Пусть t - дерево вывода и n - его внутренняя вершина. Рассмотрим вычислительную последовательность для t вида cs = cs1<n, B1>cs2<n, B2>cs3, где n входит в cs1 чeтное число раз, и не входит в cs2. Последовательность cs2 обходит поддерево с корнем n. Будем говорить, что <n, B1>cs2<n, B2> определяет визит в поддерево с корнем n и что вершина n в результате этого визита посещается один раз. Таким образом, если n входит в cs 2h раз, то n посещается h раз.

Чистые многовизитные грамматики

Будем говорить, что атрибутированное дерево k -визитно, если существует вычислительная последовательность cs для t такая, что никакая вершина n из t не посещается более k раз.

Атрибутная грамматика называется чистой k -визитной ( PMV ), если каждое атрибутированное дерево вывода t в AG k -визитно [5, 7].

Теорема B.6. Для всякой корректной атрибутной грамматики существует k такое, что грамматика является чистой k -визитной.

На самом деле это k не превосходит максимального по всем символам грамматики числа синтезируемых или наследуемых атрибутов.

Следствием этого являются две следующие теоремы.

Теорема B.7. Сложность задачи определения того, является ли произвольная атрибутная грамматика чистой k -визитной для какого-нибудь k > 0, экспоненциальна.

Эта задача просто совпадает с задачей определения корректности атрибутной грамматики.

Теорема B.8. Сложность задачи определения того, является ли произвольная атрибутная грамматика чистой k -визитной для фиксированного k также экспоненциальна.

Атрибуты всякого дерева t чистой k -визитной атрибутной грамматики можно вычислить с помощью следующего алгоритма:

Алгоритм B.2. Вычисление атрибутов чистой k - визитной атрибутной грамматики

procedure  визит_в_поддерево (n, i);
{n - корень поддерева;
i - номер визита в это поддерево}
{Предполагается, что в вершине n
применено правило вывода p}
begin вычислить некоторые наследуемые атрибуты Xn;
{эти атрибуты определяются <nj1, A> для начала i-го
визита в соответствующей вычислительной
последовательности}
визит_в_поддерево (n, i);
{Xnij - символ правой части правила pg
.
.
.
визит_в_поддерево (njl, ijl);
вычислить некоторые синтезируемые атрибуты Xn
end;
begin for j := 1 to k do визит_в_поддерево(r, j)
  {r - корень дерева}
end end.

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