Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void Expression::evaluate(vector<Expression> seq)
- {
- map <string, int> subs;
- for (Expression exp : seq)
- {
- if (exp.get_type() == assignment && exp.check())
- {
- vector<Token> expression_tokens = exp.get_postfix();
- subs[expression_tokens[0].get_token()] = expression_tokens[1].value();
- }
- }
- for (Expression exp : seq)
- {
- bool success = true;
- if (exp.check())
- {
- if (exp.get_type() != assignment)
- {
- stack<double> number;
- double result;
- for (int i = 0; i < postfix.size(); ++i)
- {
- if (postfix[i].get_type() == integer)
- {
- number.push(postfix[i].value());
- }
- else if (postfix[i].get_type() == op && !number.empty())
- {
- double operand1, operand2;
- string theOperator = postfix[i].get_token();
- operand1 = number.top();
- number.pop();
- operand2 = number.top();
- number.pop();
- result = eval(operand1, operand2, theOperator);
- number.push(result);
- }
- else if (postfix[i].get_type() == letter)
- {
- if (subs.count(tokenized[i].get_token()) != 0)
- {
- number.push(subs[tokenized[i].get_token()]);
- }
- else
- {
- success = false;
- break;
- }
- }
- }
- while (!number.empty())
- {
- evaluation.push_back(number.top());
- number.pop();
- }
- }
- }
- else
- {
- success = false;
- }
- if (!success)
- {
- cout << exp.get_orignal() << "could not be evaluated!" << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement