Генерация кода 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;
}
