Обязательным ответом на вопрос компилятора является чтение книги Dragon (Компиляторы: принципы, методы и инструменты). Когда вы говорите, что превратили исходный код в синтаксическое дерево, что именно вы имеете в виду? Обычно первым этапом синтаксического анализа является создание абстрактного синтаксического дерева (AST). Следующим шагом обычно является атрибуция . Атрибуты - это свойства узлов в AST, которые не обязательно связаны с исходным языком, но необходимы для генерации кода. Обычно здесь проводится некоторая форма проверки типов, чтобы определить требования к объему памяти и, в объектно-ориентированных языках, какую функцию вызывать. Например, если ваш источник obj1 = obj2 + obj3, вы на самом деле не знаете, что делать со знаком плюс, пока не определите тип obj2.
Итак, чтобы дать шанс ответить на ваш вопрос. 1) Разобрать исходный код в AST. 2) Делать атрибуцию на АСТ. 3) Сгенерируйте промежуточный код (что вы называете сборкой).
В главах 5 и 6 книги «Дракон» это подробно описано. Действительно сложная задача - выяснить, какие атрибуты вам нужны для генерации кода. Кроме того, есть некоторые хитрые проблемы с утверждениями if. Например, если условие if не выполняется, вы знаете, что вам нужно перепрыгнуть через некоторый код, но, по крайней мере, на начальном этапе вы не знаете, как далеко. Обратное исправление является одним из решений этой проблемы.