Exemple #1
0
        public Input Evaluate(ParsedInput parsedInput)
        {
            input = parsedInput;

            if (IsInputNullOrEmpty())
            {
                return(Input.BuildUnrecognised(input));
            }

            PrepareTokenStack();

            wrongInput         = false;
            result             = Input.Empty.ToBuilder();
            result.ParsedInput = input.ToBuilder();
            AnalysedToken firstToken = tokenStack.Peek();

            if (firstToken.IsParameter || firstToken.IsExplicitOption)
            {
                if (tree.Root.DefaultQuery == null)
                {
                    AddWrongTokenToResult(firstToken.RawInput);
                }
                else
                {
                    result.Context.Key = tree.Root.DefaultQuery.Query.Key;
                    EvaluateQueueBody(tree.Root.DefaultQuery);
                }
            }
            else if (tree.Root.Queries.TryGetValue(firstToken.NormalisedValue, out QueryNode command))
            {
                result.Context.Key = command.Query.Key;
                EvaluateExplicitQueue(command);
            }
            else
            {
                AddWrongTokenToResult(firstToken.RawInput);
            }

            FinishEvaluation();
            return(result.ToImmutable());
        }