Esempio n. 1
0
        public override IExpression <T> VisitMethod([NotNull] ExpressionParser.MethodContext context)
        {
            var name           = context.GetChild(0).GetText();
            var methodArgsNode = Visit(context.GetChild(1));

            return(new Method <T>(name, methodArgsNode, methodProvider));
        }
Esempio n. 2
0
        public override Result VisitMethod([NotNull] ExpressionParser.MethodContext context)
        {
            Result tmp = Visit(context.arguments());
            object obj = FunctionProvider.Invoke(context.ID().GetText(), tmp.Value as object[]);

            return(new Result {
                Value = obj
            });
        }
Esempio n. 3
0
        public override Result VisitMethod([NotNull] ExpressionParser.MethodContext context)
        {
            Result tmp = Visit(context.arguments());

            if (OnFunc != null)
            {
                OnFunc(context.ID().GetText(), tmp.Value as string[]);
            }

            return(base.VisitMethod(context));
        }
        public override object VisitMethod(ExpressionParser.MethodContext context)
        {
            var method    = context.method.Text;
            var paramList = context.e().Select(c => Visit(c)).ToList();

            switch (method.ToLowerInvariant())
            {
            case "abs": return(GetNumeric(paramList[0]).Abs());

            case "acos": return(GetNumeric(paramList[0]).Acos());

            case "asin": return(GetNumeric(paramList[0]).Asin());

            case "atan": return(paramList.Count == 2 ? NumericValue.Atan2(GetNumeric(paramList[1]), GetNumeric(paramList[0])) : GetNumeric(paramList[0]).Atan());

            case "cos": return(GetNumeric(paramList[0]).Cos());

            case "date": return(new NumericValue(new DateTimeOffset(DateTime.Now.Date, DateTimeOffset.Now.Offset).UtcTicks, "ticks"));

            case "directoryname": return(GetDirectoryName(GetString(paramList[0])));

            case "eval": return(new NEExpression(GetString(paramList[0])).InternalEvaluate(variables, row, unit));

            case "extension": return(GetExtension(GetString(paramList[0])));

            case "factor": return(GetNumeric(paramList[0]).Factor());

            case "filename": return(GetFileName(GetString(paramList[0])));

            case "filenamewithoutextension": return(GetFileNameWithoutExtension(GetString(paramList[0])));

            case "fromdate": return(FromDate(GetString(paramList[0])));

            case "fromwords": return(NumericValue.FromWords(GetString(paramList[0])));

            case "gcf": return(NumericValue.GCF(paramList.Select(val => GetNumeric(val)).ToList()));

            case "lcm": return(NumericValue.LCM(paramList.Select(val => GetNumeric(val)).ToList()));

            case "len": return(GetString(paramList[0]).Length);

            case "ln": return(GetNumeric(paramList[0]).Ln());

            case "log": return(paramList.Count == 1 ? GetNumeric(paramList[0]).Log() : GetNumeric(paramList[0]).Log(GetNumeric(paramList[2])));

            case "max": return(paramList.Select(param => GetNumeric(param)).Max());

            case "min": return(paramList.Select(param => GetNumeric(param)).Min());

            case "multiple": return(NumericValue.Multiple(GetNumeric(paramList[0]), GetNumeric(paramList[1])));

            case "now": return(new NumericValue(DateTimeOffset.Now.UtcTicks, "ticks"));

            case "random": return(NumericValue.Random(GetNumeric(paramList[0]), GetNumeric(paramList[1])));

            case "reciprocal": return(GetNumeric(paramList[0]).Reciprocal());

            case "reduce": return(NumericValue.Reduce(GetNumeric(paramList[0]), GetNumeric(paramList[1])));

            case "root": return(GetNumeric(paramList[0]).Root(GetNumeric(paramList[1])));

            case "sin": return(GetNumeric(paramList[0]).Sin());

            case "sqrt": return(GetNumeric(paramList[0]).Root(GetNumeric(2)));

            case "strformat": return(string.Format(GetString(paramList[0]), paramList.Skip(1).Select(param => Simplify(param)).ToArray()));

            case "tan": return(GetNumeric(paramList[0]).Tan());

            case "tmax": return(paramList.Select(param => GetString(param)).Max());

            case "tmin": return(paramList.Select(param => GetString(param)).Min());

            case "todate": return(ToDate(GetNumeric(paramList[0]), paramList.Count > 1 ? GetNumeric(paramList[1]) : null));

            case "toutcdate": return(ToDate(GetNumeric(paramList[0]), new NumericValue(0, "ticks")));

            case "towords": return(GetNumeric(paramList[0]).ToWords());

            case "type": return(paramList[0].GetType());

            case "utcdate": return(new NumericValue(DateTimeOffset.Now.UtcDateTime.Date.Ticks, "ticks"));

            case "valideval": try { new NEExpression(GetString(paramList[0])).InternalEvaluate(variables, row, unit); return(true); } catch { return(false); }

            case "validre": return(ValidRE(GetString(paramList[0])));

            default: throw new ArgumentException($"Invalid method: {method}");
            }
        }
Esempio n. 5
0
 /// <summary>
 /// Exit a parse tree produced by the <c>Method</c>
 /// labeled alternative in <see cref="ExpressionParser.literal"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitMethod([NotNull] ExpressionParser.MethodContext context)
 {
 }
Esempio n. 6
0
 /// <summary>
 /// Visit a parse tree produced by the <c>Method</c>
 /// labeled alternative in <see cref="ExpressionParser.literal"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitMethod([NotNull] ExpressionParser.MethodContext context)
 {
     return(VisitChildren(context));
 }