Добавить скобки к калькулятору
Ребята у меня вот такой алгоритм чтоб решить математические примеры(+, -, /, *),но мой алгоритм не может решить пример со скобками я хочу добавить к алгоритму логику который будет решать примеры со скобками. можете мне помочь?
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
}