40 lines
873 B
C++
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);
|
|
} |