Разработка компиляторов

       

Ограничения BURS


Несмотря на простоту описания системы команд с помощью формализма BURS, построение кодогенератора с его помощью требует дополнительных усилий. Использование BURS кардинально упрощает стадию сопоставления с образцом и выбора режимов адресации, однако такие задачи, как линеаризация дерева (построение топологической сортировки) и распределение регистров должны быть решены отдельно. BURS представляется наилучшим выбором для CISС архитектур, в которых разнообразие команд и режимов адресации действительно велико. Для RISC же архитектур задачи распределения регистров и планирования оказываются более важными.

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

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

Наконец, как уже упоминалось выше, BURS-код оптимален при условии, что распределение регистров не заденет результатов выбора команд (т.е. что запаса регистров хватит для его реализации).



Содержание раздела