Esempio n. 1
0
        public override CompileResult Compile()
        {
            var prevIsAddress = Prev.GetType() == typeof(ExcelAddressExpression);
            var prevIsOffset  = Prev.GetType() == typeof(FunctionExpression) && ((FunctionExpression)Prev).ExpressionString.ToLower() == "offset";
            var nextIsAddress = Next.GetType() == typeof(ExcelAddressExpression);
            var nextIsOffset  = Next.GetType() == typeof(FunctionExpression) && ((FunctionExpression)Next).ExpressionString.ToLower() == "offset";

            if (!prevIsAddress && !prevIsOffset)
            {
                return(new CompileResult(eErrorType.Value));
            }
            if (!nextIsAddress && !nextIsOffset)
            {
                return(new CompileResult(eErrorType.Value));
            }

            if (prevIsAddress && nextIsOffset)
            {
                return(InternalCompile(Prev.Compile().Result.ToString(), Next.Compile().Result as ExcelDataProvider.IRangeInfo));
            }
            else if (prevIsOffset && nextIsAddress)
            {
                return(InternalCompile(Prev.Compile().Result as ExcelDataProvider.IRangeInfo, Next.Compile().Result.ToString()));
            }
            else if (prevIsOffset && nextIsOffset)
            {
                return(InternalCompile(Prev.Compile().Result as ExcelDataProvider.IRangeInfo, Next.Compile().Result as ExcelDataProvider.IRangeInfo));
            }

            return(new CompileResult(eErrorType.Value));
        }
        public virtual Expression MergeWithNext()
        {
            var expression = this;

            if (Next != null && Operator != null)
            {
                var result = Operator.Apply(Compile(), Next.Compile());
                expression = ExpressionConverter.Instance.FromCompileResult(result);
                if (Next != null)
                {
                    expression.Operator = Next.Operator;
                }
                else
                {
                    expression.Operator = null;
                }
                expression.Next = Next.Next;
                if (expression.Next != null)
                {
                    expression.Next.Prev = expression;
                }
                expression.Prev = Prev;
            }
            if (Prev != null)
            {
                Prev.Next = expression;
            }
            return(expression);
        }
        public virtual Expression MergeWithNext()
        {
            var expression = this;

            if (Next != null && Operator != null)
            {
                var result = Operator.Apply(Compile(), Next.Compile());
                expression = ExpressionConverter.Instance.FromCompileResult(result);
                if (Next != null)
                {
                    expression.Operator = Next.Operator;
                }
                else
                {
                    expression.Operator = null;
                }
                expression.Next = Next.Next;
                if (expression.Next != null)
                {
                    expression.Next.Prev = expression;
                }
                expression.Prev = Prev;
            }
            else
            {
                throw (new FormatException("Invalid formula syntax. Operator missing expression."));
            }
            if (Prev != null)
            {
                Prev.Next = expression;
            }
            return(expression);
        }
Esempio n. 4
0
            public override Expression Compile()
            {
                var block = new BlockExpression(new List <Expression>
                {
                    Next.Compile()
                });

                return(new ForeachExpression(_token, _identifier, _list, block));
            }
Esempio n. 5
0
            public override Expression Compile()
            {
                var block = new BlockExpression(new List <Expression>
                {
                    Next.Compile()
                });

                var branches = new List <IfExpression.Branch>
                {
                    new IfExpression.Branch(_filter, block)
                };

                return(new IfExpression(_token, branches, null));
            }
Esempio n. 6
0
        public override Expression MergeWithNext()
        {
            Expression returnValue = null;

            if (Next != null && Operator != null)
            {
                var result           = Operator.Apply(Compile(), Next.Compile());
                var expressionString = result.Result.ToString();
                var converter        = new ExpressionConverter();
                returnValue = converter.FromCompileResult(result);
                if (Next != null)
                {
                    Operator = Next.Operator;
                }
                else
                {
                    Operator = null;
                }
                Next = Next.Next;
            }
            return(returnValue);
        }