Advertisement
GeeckoDev

expression.cpp

Dec 14th, 2011
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. #include "expression.h"
  4.  
  5. Expression::Expression()
  6. {
  7.     saPile = new std::stack<int>();
  8. }
  9.  
  10.  
  11. Expression::~Expression()
  12. {
  13.     delete saPile;
  14. }
  15.  
  16.  
  17. int Expression::evaluer(std::vector<char>* unTab)
  18. {
  19.     while (!saPile->empty())
  20.     {
  21.         saPile->pop();
  22.     }
  23.  
  24.     for (std::vector<char>::iterator it = unTab->begin(); it != unTab->end(); it++)
  25.     {
  26.         if ((*it) >= '0' && (*it) <= '9')
  27.         {
  28.             saPile->push(conversionCharEnInt(*it));
  29.             //std::cout << "Empile: " << saPile->top() << std::endl;
  30.         }
  31.         else
  32.         {
  33.             saPile->push(traiterOperation(*it));
  34.             //std::cout << "Empile: " << saPile->top() << std::endl;
  35.         }
  36.     }
  37.  
  38.     if (saPile->size() > 1) throw 3;
  39.     return saPile->top();
  40. }
  41.  
  42.  
  43. int Expression::conversionCharEnInt(char unChar)
  44. {
  45.     return unChar - '0';
  46. }
  47.  
  48.  
  49. int Expression::traiterOperation(char uneOp)
  50. {
  51.     int a, b;
  52.  
  53.     if (saPile->empty()) throw(2);
  54.     b = saPile->top();
  55.     saPile->pop();
  56.     //std::cout << "Dépile: " << b << std::endl;
  57.  
  58.     if (saPile->empty()) throw(2);
  59.     a = saPile->top();
  60.     saPile->pop();
  61.     //std::cout << "Dépile: " << a << std::endl;
  62.  
  63.     switch (uneOp)
  64.     {
  65.     case '+':
  66.         return a+b;
  67.         break;
  68.     case '-':
  69.         return a-b;
  70.         break;
  71.     case '*':
  72.         return a*b;
  73.         break;
  74.     case '/':
  75.         if (b == 0) throw 0;
  76.         return a/b;
  77.         break;
  78.     case '%':
  79.         if (b == 0) throw 0;
  80.         return a%b;
  81.         break;
  82.     case '<':
  83.         return a<b;
  84.         break;
  85.     case '>':
  86.         return a>b;
  87.         break;
  88.     case '=':
  89.         return a==b;
  90.         break;
  91.     case '!':
  92.         return a!=b;
  93.         break;
  94.     case '&':
  95.         return a&&b;
  96.         break;
  97.     case '|':
  98.         return a||b;
  99.         break;
  100.     }
  101.  
  102.     throw 1;
  103.     return 0;
  104. }
  105.  
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement