Example #1
0
        /// <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());
        }
Example #3
0
        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);
        }
Example #4
0
        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);
        }
Example #5
0
 private double eval(TreeToken token) => token.Evaluate(this);
 private Expression eval(TreeToken token) => token.Evaluate(this);
Example #7
0
 private BigDecimal eval(TreeToken token) => token.Evaluate(this);