private Expression GetExpression(LessParser.ExpressionContext context) { Expression GetExpressionOrList(int start, int end) { int itemCount = end - start; if (itemCount == 1) { return(GetSingleValuedExpression((LessParser.SingleValuedExpressionContext)context.GetChild(start))); } var childExpressions = context.children .Skip(start) .Take(itemCount) .Select(c => GetSingleValuedExpression((LessParser.SingleValuedExpressionContext)c)); return(new ExpressionList(childExpressions, ' ')); } IEnumerable <Expression> GetCommaSeparatedExpressions() { var commaStops = context.children .Select((t, i) => (Node: t, Index: i)) .Where(p => p.Node is ITerminalNode) .Select(p => p.Index); int current = 0; foreach (var commaStop in commaStops) { yield return(GetExpressionOrList(current, commaStop)); current = commaStop + 1; } yield return(GetExpressionOrList(current, context.children.Count)); } if (context == null) { return(null); } var commas = context.COMMA(); if (commas.Length > 0) { return(new ExpressionList(GetCommaSeparatedExpressions(), ',')); } var expressions = context.singleValuedExpression(); if (expressions.Length > 1) { return(new ExpressionList(expressions.Select(GetSingleValuedExpression), ' ')); } return(GetSingleValuedExpression(expressions[0])); }
public virtual LessNode VisitExpression(LessParser.ExpressionContext context) { throw new System.NotImplementedException(); }
public override LessNode VisitExpression(LessParser.ExpressionContext context) { return(GetExpression(context)); }