#include "orga-comp.h" void interpreter::evalSTM(struct token stm) { switch (stm.t) { case token::STM_ASSIGN: table[stm.lvalue->value] = evalEXP(*stm.rvalue); std::cout << stm.lvalue->value << " igual a " << table[stm.lvalue->value] << '\n'; break; case token::STM_COMPOUND: evalSTM(*stm.lvalue); evalSTM(*stm.rvalue); break; default: std::cout << "ERROR \n"; exit(-1); break; } } int interpreter::evalEXP(struct token exp) { switch (exp.t) { case token::EXP_NUMBER: return std::stoi(exp.value); break; case token::EXP_ID: return table[exp.value]; break; case token::EXP_OPERATION: if(exp.value == "+") return evalEXP(*exp.lvalue) + evalEXP(*exp.rvalue); if(exp.value == "-") return evalEXP(*exp.lvalue) - evalEXP(*exp.rvalue); break; default: std::cout << "ERROR \n"; exit(-1); break; } }