Кодогенерация: различия между версиями

26 байт добавлено ,  2 года назад
м
викификация
(→‎Преамбула: викификация)
м (викификация)
Метка: редактор вики-текста 2017
Обычно, на вход генератора кода подаётся {{iw|дерево разбора||en|parse tree}} или [[абстрактное синтаксическое дерево]]. Дерево преобразуется в линейную последовательность инструкций промежуточного языка (например, в трехадресный код).
 
Сложные [[Компилятор|компиляторы]], как правило, делают несколько проходов через различные промежуточные формы кода. Этот многоступенчатый процесс используется потому, что многие алгоритмы оптимизации кода проще реализовать каждый отдельно, или же потому, что какой-то шаг оптимизации зависит от результата отработки другого шага. Кроме того, при такой организации, легко создать один компилятор, который будет создавать код для нескольких платформ, так как достаточно заменить последний шаг генерации кода ([[[[Front end и back end|бэкэнд]]]], англ. backend).
 
Дальнейшие этапы компиляции могут и не относиться к «генерации кода», в зависимости от того, насколько значительными будут изменения, вносимые ими. Так, локальная оптимизация вряд ли может называться «генерацией кода», однако сам генератор кода может включать в себя этап локальной оптимизации.