Удачи.

я есть абстрактное синтаксическое дерево, которое мне нужно преобразовать в сборку для виртуальной машины. Я не знаю, как лучше это сделать, поэтому я начал использовать цепочку шаблонов строк. Пример псевдокода того, что я имею в виду, скажем, нужно скомпилировать упрощенный оператор if с одним условием:

std::string compile_if(Node* n) {
    std::string str = "";

    curLabel = nLabels++;

    str += compile_comparison(n->getChild(0));

    str += ".true"+curLabel+":";
    str += compile_block(n->getChild(1));

    str += ".false"+curLabel+":";

    return str;
}

Где каждый compile_ * генерирует строку сборки на основе текущего / следующего узлов AST. Затем последняя строка проходит через ассемблер. Это кажется неаккуратным и сложным в поддержке, конечно, это не то, что делает большинство компиляторов. Это плохая идея, я должен изменить это? Как большинство других компиляторов генерируют виртуальный ассемблерный код / ​​машинный код?

Ответы на вопрос(1)

Ваш ответ на вопрос