Exemplo n.º 1
0
        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");
                }
            }
        }
Exemplo n.º 2
0
        public EParserState GetState(Tokens.IPrioritable currentToken, Tokens.IPrioritable stackToken)
        {
            Dictionary <Tokens.ETokenPriority, EParserState> stateMap = AutomatStates[stackToken.Priority];

            return(stateMap[currentToken.Priority]);
        }