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)); }
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 }); }
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}"); } }
/// <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) { }
/// <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)); }