Книга: Системное программное обеспечение. Лабораторный практикум

Общий алгоритм генерации и оптимизации объектного кода

Общий алгоритм генерации и оптимизации объектного кода

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

Алгоритм должен выполнить следующую последовательность действий:

• построить последовательность триад на основе дерева вывода;

• выполнить оптимизацию кода методом свертки для линейных участков результирующей программы;

• выполнить оптимизацию кода методом исключения лишних операций для линейных участков результирующей программы;

• преобразовать последовательность триад в последовательность команд на языке ассемблера (полученная последовательность команд и будет результатом выполнения алгоритма).

Алгоритм преобразования триад в команды языка ассемблера – это единственная машинно-зависимая часть общего алгоритма. При преобразовании компилятора для работы с другим результирующим объектным кодом потребуется изменить только эту часть, при этом все алгоритмы оптимизации и внутреннее представление программы останутся неизменными.

В данной работе алгоритм преобразования триад в команды языка ассемблера предлагается разработать самостоятельно. В тривиальном виде такой алгоритм заменяет каждую триаду на последовательность соответствующих команд, а результат ее выполнения запоминается во временной переменной с некоторым именем (например TMPi, где i – номер триады). Тогда вместо ссылки на эту триаду в другой триаде будет подставлено значение этой переменной. Однако алгоритм может предусматривать и оптимизацию временных переменных.[8]

Оглавление книги


Генерация: 1.664. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз