/// <summary> /// Parses a group by term. /// Expression (, Expression)* /// </summary> /// <returns> A group by term node. </returns> private static Node ParseGroupByTerm(ref int position, List <Token> tokens) { GroupByTermNode groupByTermNode = new GroupByTermNode(); // Expression var expression = ParseExpressionNode(ref position, tokens); if (expression == null) { ThrowError("Group by parser", "Expected expression.", position, tokens); } else { groupByTermNode.AddExpression(expression); } // Comma signals another group term. if (CheckToken(position, Token.TokenType.Comma, tokens)) { position++; groupByTermNode.AddNext(ParseGroupByTerm(ref position, tokens)); } return(groupByTermNode); }