Генерация кода assembler для foreach

Пишу программу, которая генерирует код ассемблера для конструкции foreach (... in ...) { ... }

Имеется дерево синтаксического разбора, в одной ветке содержится foreach и круглые скобки, в другой всё что внутри фигурных скобок.

Как можно описать конструкцию для первой ветки? А именно для того, что находится в скобках.

Вот код и скриншот с выводом дерева разбора + сгенерированный код второй ветки.

void generateCode() {
        rightTree->generateCode1();
        leftTree->generateCode1();
    }

void generateCode1()
    {
        if (key == "foreach")
        {
            cout << "FOREACH" << endl;
            //rightTree->generateCode2();
            return;
        }
        if (key == "{ }")
        {
            rightTree->generateCode2();
            return;
        }
    }
    void generateCode2()
    {
        if (key == "=")
        {
            leftTree->generateCode2();
            cout << "\tSTORE " << rightTree->key << endl;
            return;
        }
        if (key == "+")
        {
            rightTree->generateCode2();
            cout << "\tSTORE $" << number << endl;
            leftTree->generateCode2();
            cout << "\tADD $" << number << endl;
            number++;
            return;
        }
        if (key == "-")
        {
            rightTree->generateCode2();
            cout << "\tSTORE $" << number << endl;
            leftTree->generateCode2();
            cout << "\tSUB $" << number << endl;
            number++;
            return;
        }
        if (key == "*")
        {
            rightTree->generateCode2();
            cout << "\tSTORE $" << number << endl;
            leftTree->generateCode2();
            cout << "\tMUL $" << number << endl;
            number++;
            return;
        }
        if (key == "/")
        {
            rightTree->generateCode2();
            cout << "\tSTORE $" << number << endl;
            leftTree->generateCode2();
            cout << "\tDIV $" << number << endl;
            number++;
            return;
        }
        if (key[0] >= '0' && key[0] <= '9')
        {
            cout << "\tLOAD =" << key << endl;
            return;
        }
        cout << "\tLOAD " << key << endl;
    }

введите сюда описание изображения


Ответы (0 шт):