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()); }