public static List <Parameter> ParseHeading(IList <string> queue, ref int start) { var parameters = new List <Parameter>(); string verb = null, complement = null; try { switch (Regex.Match(queue[start], Patterns.punctuation).Value) { case ":": { bool isOutParameter; try { Verbs.SplitSentence(queue[start + 1], ref verb, ref complement); isOutParameter = ParameterOrientation(verb); while (Operators.parameterOrientations.Contains(verb)) { start = start + 1; foreach (string declaration in complement.Split(',')) { if (!String.IsNullOrWhiteSpace(declaration)) { parameters.Add(new Parameter(isOutParameter, declaration)); } } if (Regex.IsMatch(queue[start], ",\\s*$")) { complement = queue[start + 1]; } else { Verbs.SplitSentence(queue[start + 1], ref verb, ref complement); isOutParameter = ParameterOrientation(verb); } } } catch (ArgumentOutOfRangeException) { throw new Exception("Bug: Attempting to parse an unfinished definition."); } } break; case "(": { foreach (string declaration in Regex.Match(queue[start], Patterns.getdefparams).Value.Split(',')) { if (!String.IsNullOrWhiteSpace(declaration)) { Verbs.SplitSentence(declaration, ref verb, ref complement); if (Operators.parameterOrientations.Contains(verb)) { parameters.Add(new Parameter(verb, complement)); } else { parameters.Add(new Parameter(false, declaration)); } } } } break; } } catch (Exception e) { throw new Exception(CommandLineInterface.GetErrorMessageWithLineNumberAndHeading(start, "Syntax Error", e)); } start = start + 1; return(parameters); }