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

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

Построение выводов (окончание)


Пусть задана грамматика G и дерево t. Индукцией по числу шагов можно доказать, что приведенный алгоритм действительно строит разметку, обладающую заявленными свойствами. В частности, дерево t выводится в грамматике G тогда и только тогда, когда C[root(t)][S] непусто, где S - стартовый нетерминал G.

Данный алгоритм имеет сложность, пропорциональную произведению числа правил на число вершин дерева.

Будем называть грамматику G однозначной тогда и только тогда, когда для произвольного дерева из порождаемого ею языка существует в точности один вывод, и неоднозначной в противном случае.

Пример


На иллюстрации показан пример построения разметки для дерева в соответствии с грамматикой, рассмотренной выше. Здесь слева изображено само дерево, а справа - дерево, снабженное разметкой C. Эта разметка представлена именами нетерминалов, в скобках указаны номера правил.

Системы восходящего переписывания деревьев

Деревянные грамматики лежат в основе систем восходящего переписывания деревьев (Bottom-Up Rewriting Systems, BURS), которые на сегодняшний день являются одним из наиболее распространенных способов описания кодогенераторов. Точнее, BURS позволяет построить алгоритм выбора инструкций, который при определенных допущениях строит оптимальный код.

Деревянные грамматики представляются естественным выбором как механизм описания выбора команд, поскольку являются удобной формализацией сопоставления с образцом.

Для использования в качестве формализма описания выбора команд понятия теории деревянных грамматик интерпретируются следующим образом:

  1. нетерминалы обозначают режимы адресации или классы размещения значений (регистр, непосредственный операнд и т.д.)
  2. цепные правила обозначают преобразования типов или пересылки
  3. язык, определяемый грамматикой - это формат внутреннего представления программы перед выбором команд
  4. вывод дерева в данной грамматике - последовательность команд

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