public void Visit(PlusOperator op) { op.LeftOperand.Accept(this); op.RightOperand.Accept(this); _stack.Push(_stack.Pop() + _stack.Pop()); }
public void Visit(PlusOperator op) { op.LeftOperand.Accept(this); _resultBuilder.Append(" "); op.RightOperand.Accept(this); _resultBuilder.Append("+"); }
private void CreateChild(ref AbstractTreeElement node, string expression, ref int curNumber) { if (curNumber >= expression.Length) return; while (expression[curNumber] == ' ' || expression[curNumber] == ')') ++curNumber; if (expression[curNumber] == '(') { Operator newOpertator; switch (expression[curNumber + 1]) { case '+': newOpertator = new PlusOperator(); break; case '-': newOpertator = new MinusOperator(); break; case '*': newOpertator = new MultiplicationOperator(); break; case '/': newOpertator = new DivisionOperator(); break; default: throw new System.Exception(); } curNumber += 2; var newNode = newOpertator.LeftChild; CreateChild(ref newNode, expression, ref curNumber); newOpertator.LeftChild = newNode; if (expression[curNumber] == ')') { ++curNumber; } newNode = newOpertator.RightChild; CreateChild(ref newNode, expression, ref curNumber); newOpertator.RightChild = newNode; node = newOpertator; } else { Operand newOperand = new Operand(); newOperand.Element = 0; while (expression[curNumber] != ' ') { if (expression[curNumber] == ')') break; newOperand.Element = newOperand.Element * 10 + (expression[curNumber] - '0'); ++curNumber; } node = newOperand; } }
public void Visit(PlusOperator op) { List<Type> parenthesisOperators = new List<Type> { typeof(MultiplicationOperator), typeof(DivisionOperator) }; FormatBinaryOperator(op, ParenthesisNeeded(parenthesisOperators)); }
public void Visit(PlusOperator op) { Visit((BinaryOperator)op); }