コード例 #1
0
        public decimal Calculated(string expression)
        {
            Lexem[] lexem = _parser.Parse(expression);
            if (lexem.Length == 0)
            {
                throw new CalculateException("Пустое выражение");
            }

            ICommand[] commands = _resolve.Compile(lexem);

            var stack = new Stack <decimal>();

            foreach (var c in commands)
            {
                c.Calculate(stack);
            }

            if (stack.Count == 0)
            {
                throw new CalculateException("В выражении не хватает чисел");
            }

            if (stack.Count > 1)
            {
                throw new CalculateException("В выражении не хватает операторов");
            }

            return(stack.Pop());
        }