コード例 #1
0
        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]));
        }
コード例 #2
0
 public virtual LessNode VisitExpression(LessParser.ExpressionContext context)
 {
     throw new System.NotImplementedException();
 }
コード例 #3
0
 public override LessNode VisitExpression(LessParser.ExpressionContext context)
 {
     return(GetExpression(context));
 }