public void EncapsulateNoValue(string convertMethod, LogicalExpression logicalExpression)
 {
     //Result.AppendFormat("{0}(", convertMethod);
     if (logicalExpression != null)
         logicalExpression.Accept(this);
     //EncapsulateNoValue(logicalExpression);
     //Result.Append(")");
 }
Пример #2
0
        public Expression(LogicalExpression expression, EvaluateOptions options)
        {
            if (expression == null)
                throw new
                    ArgumentException("Expression can't be null", "expression");

            ParsedExpression = expression;
            Options = options;
        }
Пример #3
0
        protected void EncapsulateNoValue(LogicalExpression expression)
        {
            if (expression is ValueExpression)
            {
                expression.Accept(this);
            }
            else
            {
                Result.Append("(");
                expression.Accept(this);

                // trim spaces before adding a closing paren
                while (Result[Result.Length - 1] == ' ')
                {
                    Result.Remove(Result.Length - 1, 1);
                }

                Result.Append(") ");
            }
        }
Пример #4
0
        protected async Task EncapsulateNoValueAsync(LogicalExpression expression)
        {
            //value expressions are syncronous
            if (expression is ValueExpression)
            {
                expression.Accept(this);
            }
            else
            {
                Result.Append("(");
                await expression.AcceptAsync(this);

                // trim spaces before adding a closing paren
                while (Result[Result.Length - 1] == ' ')
                {
                    Result.Remove(Result.Length - 1, 1);
                }

                Result.Append(") ");
            }
        }
Пример #5
0
 public BinaryExpression RightShift(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.RightShift, this, operand);
 }
Пример #6
0
 public BinaryExpression NotEqual(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.NotEqual, this, operand);
 }
Пример #7
0
 public BinaryExpression Modulo(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Modulo, this, operand);
 }
Пример #8
0
 public BinaryExpression GreaterOrEqualThan(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.GreaterOrEqual, this, operand));
 }
Пример #9
0
 public BinaryExpression DividedBy(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Div, this, operand));
 }
Пример #10
0
 public BinaryExpression(BinaryExpressionType type, LogicalExpression leftExpression, LogicalExpression rightExpression)
 {
     Type            = type;
     LeftExpression  = leftExpression;
     RightExpression = rightExpression;
 }
Пример #11
0
        /// <summary>
        /// Pre-compiles the expression in order to check syntax errors.
        /// If errors are detected, the Error property contains the message.
        /// </summary>
        /// <returns>True if the expression syntax is correct, otherwiser False</returns>
        public bool HasErrors()
        {
            try
            {
                if (ParsedExpression == null)
                {
                    ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache);
                }

                // In case HasErrors() is called multiple times for the same expression
                return ParsedExpression != null && Error != null;
            }
            catch(Exception e)
            {
                Error = e.Message;
                return true;
            }
        }
Пример #12
0
        public object Evaluate()
        {
            if (HasErrors())
            {
                throw new EvaluationException(Error);
            }

            if (ParsedExpression == null)
            {
                ParsedExpression = Compile(OriginalExpression, (Options & EvaluateOptions.NoCache) == EvaluateOptions.NoCache);
            }

            var visitor = new EvaluationVisitor(Options);
            visitor.EvaluateFunction += EvaluateFunction;
            visitor.EvaluateParameter += EvaluateParameter;
            visitor.Parameters = Parameters;

            // if array evaluation, execute the same expression multiple times
            if ((Options & EvaluateOptions.IterateParameters) == EvaluateOptions.IterateParameters)
            {
                int size = -1;
                ParametersBackup = new Dictionary<string, object>();
                foreach (string key in Parameters.Keys)
                {
                    ParametersBackup.Add(key, Parameters[key]);
                }

                ParameterEnumerators = new Dictionary<string, IEnumerator>();

                foreach (object parameter in Parameters.Values)
                {
                    if (parameter is IEnumerable)
                    {
                        int localsize = 0;
                        foreach (object o in (IEnumerable)parameter)
                        {
                            localsize++;
                        }

                        if (size == -1)
                        {
                            size = localsize;
                        }
                        else if (localsize != size)
                        {
                            throw new EvaluationException("When IterateParameters option is used, IEnumerable parameters must have the same number of items");
                        }
                    }
                }

                foreach (string key in Parameters.Keys)
                {
                    var parameter = Parameters[key] as IEnumerable;
                    if (parameter != null)
                    {
                        ParameterEnumerators.Add(key, parameter.GetEnumerator());
                    }
                }

                var results = new List<object>();
                for (int i = 0; i < size; i++)
                {
                    foreach (string key in ParameterEnumerators.Keys)
                    {
                        IEnumerator enumerator = ParameterEnumerators[key];
                        enumerator.MoveNext();
                        Parameters[key] = enumerator.Current;
                    }

                    ParsedExpression.Accept(visitor);
                    results.Add(visitor.Result);
                }

                return results;
            }

            ParsedExpression.Accept(visitor);
            return visitor.Result;
        }
Пример #13
0
 public TernaryExpression(LogicalExpression leftExpression, LogicalExpression middleExpression, LogicalExpression rightExpression)
 {
     this.LeftExpression   = leftExpression;
     this.MiddleExpression = middleExpression;
     this.RightExpression  = rightExpression;
 }
Пример #14
0
 public override void Visit(LogicalExpression expression)
 {
     throw new NotImplementedException();
 }
Пример #15
0
 public void EncapsulateNoValue(string convertMethod, LogicalExpression logicalExpression)
 {
     Result.AppendFormat("{0}(", convertMethod);
     EncapsulateNoValue(logicalExpression);
     Result.Append(")");
 }
Пример #16
0
 public BinaryExpression BitwiseXOr(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.BitwiseXOr, this, operand);
 }
Пример #17
0
        protected void EncapsulateNoValue(LogicalExpression expression)
        {
            if (expression is ValueExpression)
            {
                expression.Accept(this);
            }
            else
            {
                Result.Append("(");
                expression.Accept(this);

                // trim spaces before adding a closing paren
                while(Result[Result.Length - 1] == ' ')
                    Result.Remove(Result.Length - 1, 1);

                Result.Append(") ");
            }
        }
Пример #18
0
 public BinaryExpression EqualsTo(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Equal, this, operand);
 }
Пример #19
0
 public abstract Task VisitAsync(LogicalExpression expression);
Пример #20
0
        private async Task <object> EvaluateAsync(LogicalExpression expression)
        {
            await expression.AcceptAsync(this);

            return(Result);
        }
 public override void Visit(LogicalExpression expression)
 {
     //base.Visit(expression);
 }
Пример #22
0
 private object Evaluate(LogicalExpression expression)
 {
     expression.Accept(this);
     return(Result);
 }
Пример #23
0
 private void Compile()
 {
     try
     {
         _parsedExpression = Compile(OriginalExpression, true);
     } catch (EvaluationException ex)
     {
         ErrorException = ex;
     }
 }
Пример #24
0
 public BinaryExpression And(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.And, this, operand));
 }
Пример #25
0
 public Expression(LogicalExpression expression)
     : this(expression, EvaluateOptions.None)
 {
 }
Пример #26
0
 public BinaryExpression EqualsTo(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Equal, this, operand));
 }
Пример #27
0
 public UnaryExpression(UnaryExpressionType type, LogicalExpression expression)
 {
     Type       = type;
     Expression = expression;
 }
Пример #28
0
 public BinaryExpression LesserOrEqualThan(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.LesserOrEqual, this, operand);
 }
Пример #29
0
 public override void Visit(LogicalExpression expression)
 {
     throw new NotImplementedException();
 }
Пример #30
0
 public BinaryExpression Mult(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Times, this, operand);
 }
Пример #31
0
 public override void Visit(LogicalExpression expression)
 {
     expression.Accept(this);
 }
Пример #32
0
 public BinaryExpression Plus(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Plus, this, operand);
 }
Пример #33
0
 public BinaryExpression LesserThan(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Lesser, this, operand));
 }
Пример #34
0
 public BinaryExpression And(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.And, this, operand);
 }
Пример #35
0
 public BinaryExpression Modulo(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Modulo, this, operand));
 }
Пример #36
0
 public BinaryExpression DividedBy(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Div, this, operand);
 }
Пример #37
0
 public BinaryExpression NotEqual(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.NotEqual, this, operand));
 }
Пример #38
0
 public BinaryExpression GreaterThan(LogicalExpression operand)
 {
     return new BinaryExpression(BinaryExpressionType.Greater, this, operand);
 }
Пример #39
0
 public BinaryExpression Plus(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Plus, this, operand));
 }
Пример #40
0
 private object Evaluate(LogicalExpression expression)
 {
     expression.Accept(this);
     return Result;
 }
Пример #41
0
 public BinaryExpression Mult(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.Times, this, operand));
 }
Пример #42
0
 public override Task VisitAsync(LogicalExpression expression)
 {
     throw new NotImplementedException();
 }
Пример #43
0
 public BinaryExpression BitwiseXOr(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.BitwiseXOr, this, operand));
 }
Пример #44
0
 public override void Visit(LogicalExpression expression)
 {
     throw new Exception("The method or operation is not implemented.");
 }
Пример #45
0
 public BinaryExpression RightShift(LogicalExpression operand)
 {
     return(new BinaryExpression(BinaryExpressionType.RightShift, this, operand));
 }
Пример #46
0
 public override void Visit(LogicalExpression expression)
 {
     throw new Exception("The method or operation is not implemented.");
 }
Пример #47
0
 public abstract void Visit(LogicalExpression expression);