コード例 #1
0
ファイル: Parser.cs プロジェクト: NurDeveloper/ByndyusoftTask
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
            }
        }
コード例 #4
0
ファイル: Calculator.cs プロジェクト: mrkvinter/TargemTest
        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();
            }
        }