internal static ParseResult MakeParseResult(List <Token> tokens, ArgumentModel model) { var result = new ParseResult(); var queue = new Queue <Token>(tokens); while (queue.Count > 0) { var token = queue.Peek(); if (token.IsOption) { queue.Dequeue(); bool takesParameter = model.FindOptionByToken(token).TakesParameter; Token argument = null; if (takesParameter) { AssertParameterExists(token, queue); argument = queue.Dequeue(); } result.TokenGroups.Add(new TokenGroup() { Option = token, TakesParameter = takesParameter, Parameter = argument }); } else { // If we hit a non-option, it must be an operand break; } } result.Operands.AddRange(queue); return(result); }