orga-comp/interpreter.cpp

39 lines
866 B
C++
Raw Normal View History

2021-10-01 14:20:03 +00:00
#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;
}
}