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); }
public override Expression Compile() { var block = new BlockExpression(new List <Expression> { Next.Compile() }); return(new ForeachExpression(_token, _identifier, _list, block)); }
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)); }
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); }