Системное программное обеспечение: Основы трансляции. Карпушин А.Н - 58 стр.

UptoLike

60
Теперь, если исключить триады особого вида SAME(j,0), то в результате
выполнения алгоритма получим следующую последовательность триад:
1) * (C, B); 2) + (D, ^1); 3) := (D, ^2); 4) + (D, ^1); 5) := (A, ^4); 6) := (C, ^4).
Обратим внимание, что в итоговой последовательности изменилась нуме-
рация триад и номера в ссылках одних триад на другие. Если в программе ком-
пилятора в качестве ссылок использовать не номера триад, а непосредственно
указатели на них, то изменение ссылок в таком варианте не потребуется.
Общий алгоритм генерации и оптимизации объектного кода
Общий вариант алгоритма генерации кода получает на входе дерево выво-
да (построенное в результате синтаксического разбора) и создает по нему
фрагмент объектного кода линейного участка результирующей программы.
Алгоритм должен выполнить следующую последовательность действий:
1. построить последовательность триад на основе дерева вывода;
2. выполнить оптимизацию кода методом свертки;
3. выполнить оптимизацию кода методом исключения лишних операций;
4. преобразовать последовательность триад в последовательность команд на
языке ассемблера (полученная последовательность команд и будет резуль-
татом выполнения алгоритма).
Алгоритм преобразования триад в команды языка ассемблераэто един-
ственная машиннозависимая часть общего алгоритма. При преобразовании
компилятора для работы с другим результирующим объектным кодом потребу-
ется изменить только эту часть, при этом все алгоритмы оптимизации и внут-
реннее представление программы останутся неизменными.
Алгоритм преобразования триад в команды языка ассемблера может быть
различным. В тривиальном виде такой алгоритм заменяет каждую триаду на
последовательность соответствующих команд, а результат ее выполнения за-
поминается во временной переменной с некоторым именем (например, TMPi,
где i – номер триады). Тогда вместо ссылки на эту триаду в другой триаде будет
подставлено значение этой переменной. Однако алгоритм может предусматри-
вать и оптимизацию временных переменных.
Библиографический список
1. Ахо, А. Компиляторы: принципы, технологии и инструменты : пер. с
англ. / А. Ахо, Р. Сети, Дж УльманМ.: Издательский домВильямс”, 2001. –
768с.: ил.
2. Ахо, А. Теория синтаксического анализа, перевода и компиляции /
А. Ахо, Дж. Ульман. М.: Мир, 1978. т. 1, 612с. – т. 2, 487с.