4.6.1. Тетрадное и триадное представления и их получение |
||||||
Алгоритм интерпретации расширенной ОПЗ можно рассмотреть, как процесс выполнения определенных операций над определенным количеством аргументов (как правило, 0, 1 или 2 аргумента, в ином случае – операцию всегда можно логически разбить на несколько операций с двумя аргументами.). Тогда, легко видеть, что схема вычисления представима в виде последовательности четверок <Операция> <операнд 1><операнд 2><результат> Замеч 1. Последовательность здесь может быть любой. Замеч. 2. Если арность операции меньше 2, то один или два операнда будут пустыми, результат также может быть пустым Замеч. 3. Вместо операндов и результата на практике прописываются адреса, по которым они хранятся. Такие четверки называются тетрадами. Пример. Сумма нат чисел от 1 до n.
Из примера видно, что при генерации последовательности тетрад по ОПЗ, необходимо обеспечить проставление меток для тетрад так, чтобы их содержание не изменилось (смещение в ОПЗ в тетрадном представлении разное). В качестве варианта содержанием метки здесь может быть номер теирады или ее смещение, которые пропорциональны друг другу, так как все тетрады имеют одинаковую длину. Видно, что логика тетрад уже очень сильно напоминает логику машинных команд (программирование на ассемблере), особенно RISC-процессора. Однако, возникает вопрос, нет ли возможности оптимизировать код в тетрадном представлении. Действительно, вдруг есть заведомо избыточные команды. Здесь, на помощь приходит запись тетрардного представления в виде триад. Подход очень прост – отбрасывается поле «результат», а ссылки на промежуточные данные заменяются просто ссылками на номер триад, также реализуются и метки. Очевидно, что между триадным и тетрадным представлениями существует взаимно-однозначное соответствие.
Пример
В триадном представлении легко исключить лишние команды. Прежде всего разделим команды на те, что производят действия и не производят. В нашем случае, к первой группе будут относится – I, O, H, Z, J, %, G, R, @. Ко второй группе все остальные. Очевидно, что триады команд второй группы, на которые нет ссылок в других триадах можно исключить. Затем повторять проверку до тех пор, пока не будут исчерпаны возможности исключения триад. Существуют и иные приемы оптимизации на уровне триад, а следовательно и на уровне тетрад, например выявление практически недостижимых команд в силу расположения меток и инструкции останова, замены нескольких триад одной, если это возможно.
Для решения таковых задач имеются множество специальных методов. Оптимизация на уровне триад (тетрад) является машинно-независимой, и полезна независимо от платформы.
|
||||||