private void AddToStack(Tokens.IPrioritable token) { bool isAdded = false; while (!isAdded) { EParserState state = Automat.GetState(token, _Stack.Peek()); switch (state) { case EParserState.ToStack: _Stack.Push(token); isAdded = true; break; case EParserState.StackToResult: _Result.Add(_Stack.Pop()); break; case EParserState.RemoveBrackets: _Stack.Pop(); isAdded = true; break; case EParserState.End: isAdded = true; IsFinish = true; break; case EParserState.Error: throw new Exceptions.InvalidExpression("Incorrectly placed brackets"); } } }
public EParserState GetState(Tokens.IPrioritable currentToken, Tokens.IPrioritable stackToken) { Dictionary <Tokens.ETokenPriority, EParserState> stateMap = AutomatStates[stackToken.Priority]; return(stateMap[currentToken.Priority]); }