public ExecutionItem(EnmOperators op) { itemString = op.ToString(); itemType = ItemType.itOperator; itemOperator = op; itemParams = null; }
public ExecutionItem(string s, StringCollection param) { itemString = s; itemType = ItemType.itFunction; itemOperator = EnmOperators.Blank; itemParams = param; }
public ExecutionItem(ItemType itType, string s) { itemString = s; itemType = itType; itemOperator = EnmOperators.Blank; itemParams = null; }
public ExecutionItem() { itemString = ""; itemType = ItemType.itUnknow; itemOperator = EnmOperators.Blank; itemParams = null; }
public ExecutionItem(bool b) { itemString = b.ToString(); itemType = ItemType.itBool; itemOperator = EnmOperators.Blank; itemParams = null; }
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); }
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); } }
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")); } }
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); }
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); }
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; } }
public void Push(EnmOperators op) { base.Push(op); }
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")); } }