Exemplo n.º 1
0
 public ExecutionItem(EnmOperators op)
 {
     itemString   = op.ToString();
     itemType     = ItemType.itOperator;
     itemOperator = op;
     itemParams   = null;
 }
Exemplo n.º 2
0
 public ExecutionItem(string s, StringCollection param)
 {
     itemString   = s;
     itemType     = ItemType.itFunction;
     itemOperator = EnmOperators.Blank;
     itemParams   = param;
 }
Exemplo n.º 3
0
 public ExecutionItem(ItemType itType, string s)
 {
     itemString   = s;
     itemType     = itType;
     itemOperator = EnmOperators.Blank;
     itemParams   = null;
 }
Exemplo n.º 4
0
 public ExecutionItem(EnmOperators op)
 {
     itemString = op.ToString();
     itemType = ItemType.itOperator;
     itemOperator = op;
     itemParams = null;
 }
Exemplo n.º 5
0
 public ExecutionItem()
 {
     itemString   = "";
     itemType     = ItemType.itUnknow;
     itemOperator = EnmOperators.Blank;
     itemParams   = null;
 }
Exemplo n.º 6
0
 public ExecutionItem(string s, StringCollection param)
 {
     itemString = s;
     itemType = ItemType.itFunction;
     itemOperator = EnmOperators.Blank;
     itemParams = param;
 }
Exemplo n.º 7
0
 public ExecutionItem(bool b)
 {
     itemString   = b.ToString();
     itemType     = ItemType.itBool;
     itemOperator = EnmOperators.Blank;
     itemParams   = null;
 }
Exemplo n.º 8
0
 public ExecutionItem(ItemType itType, string s)
 {
     itemString = s;
     itemType = itType;
     itemOperator = EnmOperators.Blank;
     itemParams = null;
 }
Exemplo n.º 9
0
 public ExecutionItem(bool b)
 {
     itemString = b.ToString();
     itemType = ItemType.itBool;
     itemOperator = EnmOperators.Blank;
     itemParams = null;
 }
Exemplo n.º 10
0
 public ExecutionItem()
 {
     itemString = "";
     itemType = ItemType.itUnknow;
     itemOperator = EnmOperators.Blank;
     itemParams = null;
 }
Exemplo n.º 11
0
        private void OperatorStackManager(EnmOperators op)
        {
            if (scOp.Count == 0)
            {
                scOp.Push(op);
                return;
            }
            ;
            if (op == EnmOperators.LeftPar)
            {
                scOp.Push(op);
                return;
            }
            ;
            if (op == EnmOperators.RightPar)
            {
                while (scOp.Count > 0)
                {
                    EnmOperators opStack = scOp.Pop();
                    if (opStack != EnmOperators.LeftPar)
                    {
                        eqResult.Enqueue(new ExecutionItem(opStack));
                    }
                    else
                    {
                        return;
                    }
                }
                ;
                return;
            }
            ;

            while (scOp.Count > 0)
            {
                EnmOperators opStack = scOp.Peek();
                if (GetPrivelege(op) <= GetPrivelege(opStack))
                {
                    eqResult.Enqueue(new ExecutionItem(scOp.Pop()));
                }
                else
                {
                    break;
                }
            }
            scOp.Push(op);
        }
Exemplo n.º 12
0
        private int GetPrivelege(EnmOperators op)
        {
            switch (op)
            {
            case EnmOperators.LeftPar:
                return(0);

            case EnmOperators.RightPar:
                return(1);

            case EnmOperators.Eq:
            case EnmOperators.NtEq:
            case EnmOperators.GrEq:
            case EnmOperators.LsEq:
            case EnmOperators.Gr:
            case EnmOperators.Ls:
                return(2);

            case EnmOperators.Plus:
            case EnmOperators.Minus:
            case EnmOperators.Or:
                return(3);

            case EnmOperators.Mul:
            case EnmOperators.Div:
            case EnmOperators.And:
                return(4);

            case EnmOperators.UnMinus:
            case EnmOperators.UnPlus:
            case EnmOperators.Not:
                return(5);

            default:
                return(5);
            }
        }
Exemplo n.º 13
0
        private void DoOperator(EnmOperators op, ExecutionQueue eq)
        {
            switch(op)
            {
                case EnmOperators.UnMinus:
                case EnmOperators.Nop:
                case EnmOperators.Not:
                case EnmOperators.UnPlus:
                    if(calcStack.Count < 1) throw(new CalcException("Stack is empty on " + op.ToString()));
                    break;
                default:
                    if(calcStack.Count < 2) throw(new CalcException("Stack is empty on " + op.ToString()));
                    break;
            }

            switch(op)
            {
                case EnmOperators.UnMinus:
                case EnmOperators.Not:
                    calcStack.Push(-calcStack.Pop());
                    break;
                case EnmOperators.UnPlus:
                    break;
                case EnmOperators.Plus:
                    calcStack.Push(calcStack.Pop() + calcStack.Pop());
                    break;
                case EnmOperators.Minus:
                    calcStack.Push(calcStack.Pop() - calcStack.Pop());
                    break;
                case EnmOperators.Mul:
                    calcStack.Push(calcStack.Pop() * calcStack.Pop());
                    break;
                case EnmOperators.Div:
                    calcStack.Push(calcStack.Pop() / calcStack.Pop());
                    break;
                case EnmOperators.Gr:
                    calcStack.Push(calcStack.Pop() > calcStack.Pop());
                    break;
                case EnmOperators.Ls:
                    calcStack.Push(calcStack.Pop() < calcStack.Pop());
                    break;
                case EnmOperators.GrEq:
                    calcStack.Push(calcStack.Pop() >= calcStack.Pop());
                    break;
                case EnmOperators.LsEq:
                    calcStack.Push(calcStack.Pop() <= calcStack.Pop());
                    break;
                case EnmOperators.Eq:
                    calcStack.Push(calcStack.Pop() == calcStack.Pop());
                    break;
                case EnmOperators.NtEq:
                    calcStack.Push(calcStack.Pop() != calcStack.Pop());
                    break;
                default:
                    throw(new CalcException("Operator " + op.ToString() + " is not supported yet"));
            }
        }
Exemplo n.º 14
0
        private EnmOperators IsOperator(string s, bool isFirstOperator, ref int pos)
        {
            EnmOperators curOperator = EnmOperators.Nop;

            switch (s[pos])
            {
            case ' ':
            case '\n':
            case '\t':
                pos++;
                curOperator = EnmOperators.Blank;
                break;

            case '+':
                if (isFirstOperator)
                {
                    curOperator = EnmOperators.UnPlus;
                }
                else
                {
                    curOperator = EnmOperators.Plus;
                }
                pos++;
                break;

            case '-':
                if (isFirstOperator)
                {
                    curOperator = EnmOperators.UnMinus;
                }
                else
                {
                    curOperator = EnmOperators.Minus;
                }
                pos++;
                break;

            case '*':
                curOperator = EnmOperators.Mul;
                pos++;
                break;

            case '/':
                curOperator = EnmOperators.Div;
                pos++;
                break;

            case '=':
                curOperator = EnmOperators.Eq;
                pos++;
                break;

            case '(':
                curOperator = EnmOperators.LeftPar;
                pos++;
                break;

            case ')':
                curOperator = EnmOperators.RightPar;
                pos++;
                break;

            case '&':
                curOperator = EnmOperators.And;
                pos++;
                break;

            case '|':
                curOperator = EnmOperators.Or;
                pos++;
                break;

            case '!':
                if ((s.Length > (pos + 1)) && (s[pos + 1] == '='))
                {
                    curOperator = EnmOperators.NtEq;
                    pos        += 2;
                }
                else
                {
                    curOperator = EnmOperators.Not;
                    pos++;
                };
                break;

            case '>':
                if ((s.Length > (pos + 1)) && (s[pos + 1] == '='))
                {
                    curOperator = EnmOperators.GrEq;
                    pos        += 2;
                }
                else
                {
                    curOperator = EnmOperators.Gr;
                    pos++;
                };
                break;

            case '<':
                if ((s.Length > (pos + 1)) && (s[pos + 1] == '='))
                {
                    curOperator = EnmOperators.LsEq;
                    pos        += 2;
                }
                else
                if ((s.Length > (pos + 1)) && (s[pos + 1] == '>'))
                {
                    curOperator = EnmOperators.NtEq;
                    pos        += 2;
                }
                else
                {
                    curOperator = EnmOperators.Ls;
                    pos++;
                };
                break;
            }
            return(curOperator);
        }
Exemplo n.º 15
0
        private void OperatorStackManager(EnmOperators op)
        {
            if(scOp.Count == 0)
            {
                scOp.Push(op);
                return;
            };
            if(op == EnmOperators.LeftPar)
            {
                scOp.Push(op);
                return;
            };
            if(op == EnmOperators.RightPar)
            {
                while(scOp.Count>0)
                {
                    EnmOperators opStack = scOp.Pop();
                    if(opStack != EnmOperators.LeftPar)
                        eqResult.Enqueue(new ExecutionItem(opStack));
                    else
                        return;
                };
                return;
            };

            while(scOp.Count>0)
            {
                EnmOperators opStack = scOp.Peek();
                if(GetPrivelege(op) <= GetPrivelege(opStack))
                    eqResult.Enqueue(new ExecutionItem(scOp.Pop()));
                else
                    break;
            }
            scOp.Push(op);
        }
Exemplo n.º 16
0
 private int GetPrivelege(EnmOperators op)
 {
     switch(op)
     {
         case EnmOperators.LeftPar:
             return 0;
         case EnmOperators.RightPar:
             return 1;
         case EnmOperators.Eq:
         case EnmOperators.NtEq:
         case EnmOperators.GrEq:
         case EnmOperators.LsEq:
         case EnmOperators.Gr:
         case EnmOperators.Ls:
             return 2;
         case EnmOperators.Plus:
         case EnmOperators.Minus:
         case EnmOperators.Or:
             return 3;
         case EnmOperators.Mul:
         case EnmOperators.Div:
         case EnmOperators.And:
             return 4;
         case EnmOperators.UnMinus:
         case EnmOperators.UnPlus:
         case EnmOperators.Not:
             return 5;
         default :
             return 5;
     }
 }
Exemplo n.º 17
0
 public void Push(EnmOperators op)
 {
     base.Push(op);
 }
Exemplo n.º 18
0
 public void Push(EnmOperators op)
 {
     base.Push(op);
 }
Exemplo n.º 19
0
        private void DoOperator(EnmOperators op, ExecutionQueue eq)
        {
            switch (op)
            {
            case EnmOperators.UnMinus:
            case EnmOperators.Nop:
            case EnmOperators.Not:
            case EnmOperators.UnPlus:
                if (calcStack.Count < 1)
                {
                    throw(new CalcException("Stack is empty on " + op.ToString()));
                }
                break;

            default:
                if (calcStack.Count < 2)
                {
                    throw(new CalcException("Stack is empty on " + op.ToString()));
                }
                break;
            }

            switch (op)
            {
            case EnmOperators.UnMinus:
            case EnmOperators.Not:
                calcStack.Push(-calcStack.Pop());
                break;

            case EnmOperators.UnPlus:
                break;

            case EnmOperators.Plus:
                calcStack.Push(calcStack.Pop() + calcStack.Pop());
                break;

            case EnmOperators.Minus:
                calcStack.Push(calcStack.Pop() - calcStack.Pop());
                break;

            case EnmOperators.Mul:
                calcStack.Push(calcStack.Pop() * calcStack.Pop());
                break;

            case EnmOperators.Div:
                calcStack.Push(calcStack.Pop() / calcStack.Pop());
                break;

            case EnmOperators.Gr:
                calcStack.Push(calcStack.Pop() > calcStack.Pop());
                break;

            case EnmOperators.Ls:
                calcStack.Push(calcStack.Pop() < calcStack.Pop());
                break;

            case EnmOperators.GrEq:
                calcStack.Push(calcStack.Pop() >= calcStack.Pop());
                break;

            case EnmOperators.LsEq:
                calcStack.Push(calcStack.Pop() <= calcStack.Pop());
                break;

            case EnmOperators.Eq:
                calcStack.Push(calcStack.Pop() == calcStack.Pop());
                break;

            case EnmOperators.NtEq:
                calcStack.Push(calcStack.Pop() != calcStack.Pop());
                break;

            default:
                throw(new CalcException("Operator " + op.ToString() + " is not supported yet"));
            }
        }