/// <summary> /// Evaluates the parsed expression with a given evaluator. /// </summary> /// <param name="options">Specifies the used evaluation options.</param> /// <typeparam name="T">The type of the evaluation result.</typeparam> /// <typeparam name="U">The type of the evaluator to be used.</typeparam> /// <returns>The evaluated value of type T.</returns> public T Evaluate <T, U>(EvaluationOptions options = null) where U : Evaluator <T> { var context = new EvaluationContext(options ?? new EvaluationOptions(), null); Evaluator <T> eval = (Evaluator <T>)Activator.CreateInstance(typeof(U), parser, context); return(treeToken.Evaluate(eval)); }
public static Func <double, double> CreateDelegate(TreeToken token, string variable, Parser parser, EvaluationOptions options) { var paramColl = new ParameterCollection <double>(variable); var context = new EvaluationContext(options, paramColl); var eval = new ExpressionTreeEvaluator(parser, context); var expr = token.Evaluate(eval); var parameters = paramColl.GetParameters(); return(Expression.Lambda <Func <double, double> >(expr, parameters).Compile()); }
private string evalOperatorSubToken(int precedence, TreeToken subToken) { bool brackets = precedence > OperatorProperties.GetPrecedence(subToken); string expr = subToken.Evaluate(this); if (brackets) { expr = $"{ParserSymbols.LBracket}{expr}{ParserSymbols.RBracket}"; } return(expr); }
private string evalSub(StructToken token, int subIndex) { TreeToken subToken = token.SubTokens[subIndex]; int precedence = OperatorProperties.GetPrecedence(token); bool brackets = precedence > OperatorProperties.GetPrecedence(subToken); string expr = subToken.Evaluate(this); if (brackets) { expr = $"<mo>(</mo>{expr}<mo>)</mo>"; } return(expr); }
private double eval(TreeToken token) => token.Evaluate(this);
private Expression eval(TreeToken token) => token.Evaluate(this);
private BigDecimal eval(TreeToken token) => token.Evaluate(this);