Добавить скобки к калькулятору

Ребята у меня вот такой алгоритм чтоб решить математические примеры(+, -, /, *),но мой алгоритм не может решить пример со скобками я хочу добавить к алгоритму логику который будет решать примеры со скобками. можете мне помочь?

public void DoEvaluate()
        {
            Stack<Token> operatorStack = new Stack<Token>();
            Stack<Token> numberStack = new Stack<Token>();
            Stack<Token> operatorStack2 = new Stack<Token>();
            Stack<Token> numberStack2= new Stack<Token>();
            Token currentToken, topOperatorTok;

            if (CurrentToken().IsOperator())
            {
                RemoveCurrentToken();
            }

            // Eval

            while ((currentToken = FetchToken()).Type != Token.TokenType.Nil)
            {
                if (currentToken.IsNumber())
                {
                    numberStack.Push(currentToken);
                }
                else if (currentToken.IsOperator())
                {
                    if (operatorStack.Count > 0)
                    {
                        topOperatorTok = operatorStack.Peek();

                        if (currentToken.IsLessThanOrEqualTo(topOperatorTok))
                        {
                            DoBinaryEval(operatorStack, numberStack);
                        }
                    }

                    operatorStack.Push(currentToken);
                }
            }
            
            if ((operatorStack.Peek().Type == Token.TokenType.Divide) |
                (operatorStack.Peek().Type == Token.TokenType.Multiply))
            {
                DoBinaryEval(operatorStack, numberStack);
            }
              
            while (numberStack.Count > 0)
            {
                numberStack2.Push(numberStack.Pop());
            }
            while (operatorStack.Count > 0)
            {
                operatorStack2.Push(operatorStack.Pop());
            }
           
            // Empty the stack

            while (operatorStack2.Count > 0)
            {
                DoBinaryEval2(operatorStack2, numberStack2);
            }

            // Update token list

            currentToken = numberStack2.Pop();
            Reset();
            RemoveCurrentToken();
            AddNumberToken(currentToken.TokenNumber);
            CurrentToken().IsSealed = true;

            // We're done
        }

Ответы (0 шт):