public IState <IReadOnlySet <object> > Next(string param)
        {
            if (EndState.IsValidState(param))
            {
                return(new EndState(State));
            }

            if (OperatorState.IsValidState(param))
            {
                return(new ErrorState(State, new InvalidOperationException($"Unexpected operator: \"{param}\".")));
            }

            return(parser.TryParse(param, out var set, out var errors)
                ? new OperatorState(parser, set)
                : new ErrorState(State, errors));
        }
Esempio n. 2
0
        public IState <IReadOnlySet <object> > Next(string param)
        {
            if (EndState.IsValidState(param))
            {
                return(new EndState(State));
            }

            if (TryParse(param, out var op))
            {
                return(new RightArgumentState(argumentParser, State, op));
            }

            if (argumentParser.TryParse(param, out _, out _))
            {
                return(new ErrorState(State, new InvalidOperationException("Infix operator missing.")));
            }

            return(new ErrorState(State, new InvalidOperationException($"Unknown operator: \"{param}\".")));
        }
        public IState <IReadOnlySet <object> > Next(string param)
        {
            if (EndState.IsValidState(param))
            {
                return(new ErrorState(State, new InvalidOperationException("Unexpected EOF.")));
            }

            if (parser.TryParse(param, out var set, out var errors))
            {
                var next = Calculator.Apply(op, State, set);
                return(new OperatorState(parser, next));
            }

            if (OperatorState.IsValidState(param))
            {
                return(new ErrorState(State, new InvalidOperationException($"Unexpected operator: \"{param}\".")));
            }

            return(new ErrorState(State, errors));
        }