orga-comp/interpreter.cpp

40 lines
873 B
C++

#include "orga-comp.h"
void
interpreter::evalSTM(struct token stm) {
switch (stm.tok_type) {
case token::STM_ASSIGN:
table[stm.value] = evalEXP(*stm.rvalue);
std::cout << stm.value << " igual a " << table.at(stm.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.tok_type) {
case token::EXP_NUMBER:
return std::stoi(exp.value);
break;
case token::EXP_ID:
return table.at(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;
}
exit(-1);
}