Advertisement
Guest User

Untitled

a guest
May 3rd, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. void Expression::evaluate(vector<Expression> seq)
  2. {
  3.     map <string, int> subs;
  4.  
  5.     for (Expression exp : seq)
  6.     {
  7.         if (exp.get_type() == assignment && exp.check())
  8.         {
  9.             vector<Token> expression_tokens = exp.get_postfix();
  10.             subs[expression_tokens[0].get_token()] = expression_tokens[1].value();
  11.         }
  12.     }
  13.  
  14.     for (Expression exp : seq)
  15.     {
  16.         bool success = true;
  17.  
  18.         if (exp.check())
  19.         {
  20.             if (exp.get_type() != assignment)
  21.             {
  22.                 stack<double> number;
  23.                 double result;
  24.                 for (int i = 0; i < postfix.size(); ++i)
  25.                 {
  26.                     if (postfix[i].get_type() == integer)
  27.                     {
  28.                         number.push(postfix[i].value());
  29.                     }
  30.                     else if (postfix[i].get_type() == op && !number.empty())
  31.                     {
  32.                         double operand1, operand2;
  33.                         string theOperator = postfix[i].get_token();
  34.                         operand1 = number.top();
  35.                         number.pop();
  36.                         operand2 = number.top();
  37.                         number.pop();
  38.                         result = eval(operand1, operand2, theOperator);
  39.                         number.push(result);
  40.                     }
  41.                     else if (postfix[i].get_type() == letter)
  42.                     {
  43.                         if (subs.count(tokenized[i].get_token()) != 0)
  44.                         {
  45.                             number.push(subs[tokenized[i].get_token()]);
  46.                         }
  47.                         else
  48.                         {
  49.                             success = false;
  50.                             break;
  51.                         }
  52.                     }
  53.                 }
  54.                 while (!number.empty())
  55.                 {
  56.                     evaluation.push_back(number.top());
  57.                     number.pop();
  58.                 }
  59.             }
  60.  
  61.         }
  62.         else
  63.         {
  64.             success = false;
  65.         }
  66.  
  67.         if (!success)
  68.         {
  69.             cout << exp.get_orignal() << "could not be evaluated!" << endl;
  70.         }
  71.     }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement