Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- while(! queue.empty()) {
- std::string op;
- const auto token = queue.front();
- queue.pop_front();
- switch(token.type) {
- case Token::Type::Number:
- stack.push_back(std::stoi(token.str));
- op = "Push " + token.str;
- break;
- case Token::Type::Operator:
- {
- const auto rhs = stack.back();
- stack.pop_back();
- const auto lhs = stack.back();
- stack.pop_back();
- switch(token.str[0]) {
- default:
- printf("Operator error [%s]\n", token.str.c_str());
- exit(0);
- break;
- case '^':
- stack.push_back(static_cast<char>(pow(lhs, rhs)));
- //stack.push_back(static_cast<int>(pow(lhs, rhs)));
- break;
- case 'r':
- //stack.push_back(static_cast<int>(sqrt(rhs))); //square root
- //stack.push_back(static_cast<int>(pow(rhs, 1/lhs))); //nth root
- //stack.push_back(pow(rhs, 1.0 / lhs));
- //stack.push_back(static_cast<signed char>(pow(rhs, 1.0/lhs))); //nth root
- stack.push_back(char(pow(rhs, 1.0/lhs))); //nth root
- break;
- case '*':
- //stack.push_back(lhs * rhs);
- stack.push_back(static_cast<char>(lhs * rhs));
- break;
- case '/':
- //stack.push_back(lhs / rhs);
- //stack.push_back(rational(lhs, rhs)); // TODO - fix rationalizing fractions
- //stack.push_back(divide(lhs, rhs));
- if(lhs%rhs == 0)
- stack.push_back(static_cast<char>(lhs / rhs));
- //stack.push_back(lhs / rhs);
- else
- stack.push_back(static_cast<char>(lhs / rhs));
- //stack.push_back(lhs / rhs);
- //evenly_divisible = false;
- //return lhs, rhs;
- break;
- case '+':
- stack.push_back(static_cast<char>(lhs + rhs));
- //stack.push_back(lhs + rhs);
- break;
- case '-':
- stack.push_back(static_cast<char>(lhs - rhs));
- //stack.push_back(lhs - rhs);
- break;
- case 'u':
- //stack.push_back(static_cast<char>((-1) * rhs));
- stack.push_back(static_cast<char>(-rhs));
- //stack.push_back(static_cast<signed int>((-1) * rhs));
- // TODO add negative values possibility
- break;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement