private static bool TryParseExpressionUnit(string expressionItem, OperationType operationType, IMathOperationsContainer mathOperationsContainer, out ExpressionUnit expressionUnit) { var keyword = mathOperationsContainer.GetKeywordOrDefault(new OperationCharacteristics(expressionItem, operationType)); if (!string.IsNullOrEmpty(keyword)) { expressionUnit = new OperationExpressionUnit(expressionItem, keyword); return(true); } var leftBracketExpressionUnit = new LeftBracketExpressionUnit(); if (expressionItem == leftBracketExpressionUnit.Keyword) { expressionUnit = leftBracketExpressionUnit; return(true); } var rightBracketExpressionUnit = new RightBracketExpressionUnit(); if (expressionItem == rightBracketExpressionUnit.Keyword) { expressionUnit = rightBracketExpressionUnit; return(true); } expressionUnit = default(ExpressionUnit); return(false); }
private void AddOperation(OperationExpressionUnit expressionUnit, List <IExpressionUnit> result) { var weight = expressionUnitChecker.GetWeight(expressionUnit.Operation); while (stack.Count > 0 && expressionUnitChecker.GetWeight(stack.First().Operation) >= weight) { result.Add(stack.Pop()); } stack.Push(expressionUnit); }
private void ReadUnderBrackets(List <IExpressionUnit> result) { OperationExpressionUnit op = null; while (stack.Count > 0 && (op = stack.Pop()).Operation != '(') { result.Add(op); } if (op != null && !op.IsOpenBracket()) { throw new NotCorrectBracketsCountException(); } }
private double Calck(double a, double b, OperationExpressionUnit operation) { switch (operation.Operation) { case '*': return(b * a); case '/': return(b / a); case '+': return(b + a); case '-': return(b - a); case '^': return(Math.Pow(b, a)); default: throw new NotSupportedException(); } }