public OptimizeOutput(
            IExpressionOutput <T> output, OptimizeModes mode, bool checks)
        {
            Debug.Assert(output != null);

            this.output = output;
            this.mode   = mode;

            this.interp = QuickInterpret <T> .Create(checks, null);
        }
Пример #2
0
        /// <summary>
        /// Evaluates the given <paramref name="expression"/>
        /// using quick interpretation mode.</summary>
        /// <param name="expression">Expression to evaluate.</param>
        /// <param name="arguments">Expression arguments values.</param>
        /// <exception cref="SyntaxException">
        /// <paramref name="expression"/> contains
        /// syntax error(s) and can't be evaluated.</exception>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="expression"/> is null.<br/>-or-<br/>
        /// <paramref name="arguments"/> is null.</exception>
        /// <exception cref="ArgumentException">
        /// Wrong arguments count was specified by the
        /// <paramref name="arguments"/> parameter.</exception>
        /// <exception cref="ArithmeticException">
        /// Expression evaluation thrown the
        /// <see cref="ArithmeticException"/>.</exception>
        /// <returns>Evaluated value.</returns>
        public T Evaluate(string expression, params T[] arguments)
        {
            if (expression == null)
            {
                throw new ArgumentNullException("expression");
            }
            if (arguments == null)
            {
                throw new ArgumentNullException("arguments");
            }

            if (arguments.Length != ArgsCount)
            {
                throw WrongArgsCount(arguments.Length, ArgsCount);
            }

            var interp = QuickInterpret <T>
                         .Create(OverflowCheck, arguments);

            ParseSimple(expression, interp);
            return(interp.Result);
        }