Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2218 / 892 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 15:

Выбор инструкций при генерации кода

Подстановка деревьев


Для дальнейших рассуждений введем следующие обозначения:

  • через root(t) обозначим корень дерева t
  • через t(v) обозначим поддерево дерева t с корнем v (таким образом, t(root(t))=t)
  • через sons(v) обозначим множество сыновей вершины v
  • через son(v,i) обозачим i-го сына вершины v

Для пары деревьев в одном и том же алфавите можно определить операцию подстановки. Для этого в одном из них выбирается лист, который затем заменяется на корень другого дерева. Если t_{2} подставляется вместо вершины v в дерево t_{1}, то результат подстановки будем обозначать t_{1}\textit{[v \leftarrow t}_{2}].

Регулярные деревянные грамматики

Одним из способов задания деревянных языков являются автоматные деревянные грамматики.

Деревянная грамматика в нормальной форме - это четверка, содержащая входной алфавит (снабженный функцией арности), алфавит нетерминалов, стартовый нетерминал и множество правил. В отличие от обычных контекстно-свободных грамматик, у которых в правой части правила стоит слово из объединенного алфавита терминалов и нетерминалов, в деревянной грамматике в правой части правила находится так называемый деревянный образец, который в общем случае является деревом, у которого нетерминалами могут быть помечены только (некоторые) листья. В приведенном выше определении требуется, чтобы деревянный образец имел высоту не более единицы и чтобы все его листья были помечены нетерминалами (именно поэтому данные грамматики называются грамматиками в нормальной форме).

Очевидно, что деревянные грамматики в данном виде есть обобщение обычных контекстно-свободных автоматных грамматик. Легко видеть, что возможен и контекстно-зависимый вариант - для этого достаточно разрешить присутствие деревянного образца в левой части правила. Заметим, наконец, что неавтоматный вариант контекстно-свободных грамматик не обобщается на деревянный случай - непонятно, как можно обобщить правило

N=K_{1}K_{2}, N,K_{1},K_{2} \in N