Example #1
0
        private void CreateAndAppendExpression(ref Expression parent, Token token)
        {
            if (IsWaste(token))
            {
                return;
            }
            if (parent != null &&
                (token.TokenType == TokenType.Comma || token.TokenType == TokenType.SemiColon))
            {
                parent = parent.PrepareForNextChild();
                return;
            }
            if (_negateNextExpression)
            {
                token.Negate();
                _negateNextExpression = false;
            }
            var expression = _expressionFactory.Create(token);

            if (parent == null)
            {
                _graph.Add(expression);
            }
            else
            {
                parent.AddChild(expression);
            }
        }
Example #2
0
 private void BuildUp(Token[] tokens, Expression parent)
 {
     while (_tokenIndex < tokens.Length)
     {
         var       token = tokens[_tokenIndex];
         IOperator op    = null;
         if (token.TokenType == TokenType.Operator && OperatorsDict.Instance.TryGetValue(token.Value, out op))
         {
             SetOperatorOnExpression(parent, op);
         }
         else if (token.TokenType == TokenType.Function)
         {
             BuildFunctionExpression(tokens, parent, token.Value);
         }
         else if (token.TokenType == TokenType.OpeningEnumerable)
         {
             _tokenIndex++;
             BuildEnumerableExpression(tokens, parent);
         }
         else if (token.TokenType == TokenType.OpeningParenthesis)
         {
             _tokenIndex++;
             BuildGroupExpression(tokens, parent);
             //if (parent is FunctionExpression)
             //{
             //    return;
             //}
         }
         else if (token.TokenType == TokenType.ClosingParenthesis || token.TokenType == TokenType.ClosingEnumerable)
         {
             break;
         }
         else if (token.TokenType == TokenType.Negator)
         {
             _negateNextExpression = true;
         }
         else if (token.TokenType == TokenType.Percent)
         {
             SetOperatorOnExpression(parent, Operator.Percent);
             if (parent == null)
             {
                 _graph.Add(ConstantExpressions.Percent);
             }
             else
             {
                 parent.AddChild(ConstantExpressions.Percent);
             }
         }
         else
         {
             CreateAndAppendExpression(ref parent, token);
         }
         _tokenIndex++;
     }
 }
Example #3
0
 private void BuildEnumerableExpression(Token[] tokens, Expression parent)
 {
     if (parent == null)
     {
         _graph.Add(new EnumerableExpression());
         BuildUp(tokens, _graph.Current);
     }
     else
     {
         var enumerableExpression = new EnumerableExpression();
         parent.AddChild(enumerableExpression);
         BuildUp(tokens, enumerableExpression);
     }
 }
Example #4
0
 private void BuildFunctionExpression(Token[] tokens, Expression parent, string funcName)
 {
     if (parent == null)
     {
         _graph.Add(new FunctionExpression(funcName, _parsingContext, _negateNextExpression));
         _negateNextExpression = false;
         HandleFunctionArguments(tokens, _graph.Current);
     }
     else
     {
         var func = new FunctionExpression(funcName, _parsingContext, _negateNextExpression);
         _negateNextExpression = false;
         parent.AddChild(func);
         HandleFunctionArguments(tokens, func);
     }
 }
Example #5
0
 private void BuildGroupExpression(Token[] tokens, Expression parent)
 {
     if (parent == null)
     {
         _graph.Add(new GroupExpression());
         BuildUp(tokens, _graph.Current);
     }
     else
     {
         if (parent.IsGroupedExpression || parent is FunctionArgumentExpression)
         {
             var newGroupExpression = new GroupExpression();
             parent.AddChild(newGroupExpression);
             BuildUp(tokens, newGroupExpression);
         }
         BuildUp(tokens, parent);
     }
 }
Example #6
0
 private void BuildRangeOffsetExpression(Token[] tokens, Expression parent, Token token)
 {
     if (_nRangeOffsetTokens++ % 2 == 0)
     {
         _rangeOffsetExpression = new RangeOffsetExpression(_parsingContext);
         if (token.TokenTypeIsSet(TokenType.Function) && token.Value.ToLower() == "offset")
         {
             _rangeOffsetExpression.OffsetExpression1 = new FunctionExpression("offset", _parsingContext, false);
             HandleFunctionArguments(tokens, _rangeOffsetExpression.OffsetExpression1);
         }
         else if (token.TokenTypeIsSet(TokenType.ExcelAddress))
         {
             _rangeOffsetExpression.AddressExpression2 = _expressionFactory.Create(token) as ExcelAddressExpression;
         }
     }
     else
     {
         if (parent == null)
         {
             _graph.Add(_rangeOffsetExpression);
         }
         else
         {
             parent.AddChild(_rangeOffsetExpression);
         }
         if (token.TokenTypeIsSet(TokenType.Function) && token.Value.ToLower() == "offset")
         {
             _rangeOffsetExpression.OffsetExpression2 = new FunctionExpression("offset", _parsingContext, _negateNextExpression);
             HandleFunctionArguments(tokens, _rangeOffsetExpression.OffsetExpression2);
         }
         else if (token.TokenTypeIsSet(TokenType.ExcelAddress))
         {
             _rangeOffsetExpression.AddressExpression2 = _expressionFactory.Create(token) as ExcelAddressExpression;
         }
     }
 }
Example #7
0
 private void BuildUp(Token[] tokens, Expression parent)
 {
     while (_tokenIndex < tokens.Length)
     {
         var       token = tokens[_tokenIndex];
         IOperator op    = null;
         if (token.TokenTypeIsSet(TokenType.Operator) && OperatorsDict.Instance.TryGetValue(token.Value, out op))
         {
             SetOperatorOnExpression(parent, op);
         }
         else if (token.TokenTypeIsSet(TokenType.RangeOffset))
         {
             BuildRangeOffsetExpression(tokens, parent, token);
         }
         else if (token.TokenTypeIsSet(TokenType.Function))
         {
             BuildFunctionExpression(tokens, parent, token.Value);
         }
         else if (token.TokenTypeIsSet(TokenType.OpeningEnumerable))
         {
             _tokenIndex++;
             BuildEnumerableExpression(tokens, parent);
         }
         else if (token.TokenTypeIsSet(TokenType.OpeningParenthesis))
         {
             _tokenIndex++;
             BuildGroupExpression(tokens, parent);
         }
         else if (token.TokenTypeIsSet(TokenType.ClosingParenthesis) || token.TokenTypeIsSet(TokenType.ClosingEnumerable))
         {
             break;
         }
         else if (token.TokenTypeIsSet(TokenType.WorksheetName))
         {
             var sb = new StringBuilder();
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex].Value);
             var t = new Token(sb.ToString(), TokenType.ExcelAddress);
             CreateAndAppendExpression(ref parent, ref t);
         }
         else if (token.TokenTypeIsSet(TokenType.Negator))
         {
             _negateNextExpression = !_negateNextExpression;
         }
         else if (token.TokenTypeIsSet(TokenType.Percent))
         {
             SetOperatorOnExpression(parent, Operator.Percent);
             if (parent == null)
             {
                 _graph.Add(ConstantExpressions.Percent);
             }
             else
             {
                 parent.AddChild(ConstantExpressions.Percent);
             }
         }
         else
         {
             CreateAndAppendExpression(ref parent, ref token);
         }
         _tokenIndex++;
     }
 }
Example #8
0
 private void BuildUp(Token[] tokens, Expression parent)
 {
     while (_tokenIndex < tokens.Length)
     {
         var token = tokens[_tokenIndex];
         IOperator op = null;
         if (token.TokenType == TokenType.Operator && OperatorsDict.Instance.TryGetValue(token.Value, out op))
         {
             SetOperatorOnExpression(parent, op);
         }
         else if (token.TokenType == TokenType.Function)
         {
             BuildFunctionExpression(tokens, parent, token.Value);
         }
         else if (token.TokenType == TokenType.OpeningEnumerable)
         {
             _tokenIndex++;
             BuildEnumerableExpression(tokens, parent);
         }
         else if (token.TokenType == TokenType.OpeningParenthesis)
         {
             _tokenIndex++;
             BuildGroupExpression(tokens, parent);
             //if (parent is FunctionExpression)
             //{
             //    return;
             //}
         }
         else if (token.TokenType == TokenType.ClosingParenthesis || token.TokenType == TokenType.ClosingEnumerable)
         {
             break;
         }
         else if(token.TokenType == TokenType.WorksheetName)
         {
             var sb = new StringBuilder();
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex++].Value);
             sb.Append(tokens[_tokenIndex].Value);
             var t = new Token(sb.ToString(), TokenType.ExcelAddress);
             CreateAndAppendExpression(ref parent, t);
         }
         else if (token.TokenType == TokenType.Negator)
         {
             _negateNextExpression = true;
         }
         else if(token.TokenType == TokenType.Percent)
         {
             SetOperatorOnExpression(parent, Operator.Percent);
             if (parent == null)
             {
                 _graph.Add(ConstantExpressions.Percent);
             }
             else
             {
                 parent.AddChild(ConstantExpressions.Percent);
             }
         }
         else
         {
             CreateAndAppendExpression(ref parent, token);
         }
         _tokenIndex++;
     }
 }
Example #9
0
 private void BuildGroupExpression(Token[] tokens, Expression parent)
 {
     if (parent == null)
     {
         _graph.Add(new GroupExpression(_negateNextExpression));
         _negateNextExpression = false;
         BuildUp(tokens, _graph.Current);
     }
     else
     {
         if (parent.IsGroupedExpression || parent is FunctionArgumentExpression)
         {
             var newGroupExpression = new GroupExpression(_negateNextExpression);
             _negateNextExpression = false;
             parent.AddChild(newGroupExpression);
             BuildUp(tokens, newGroupExpression);
         }
          BuildUp(tokens, parent);
     }
 }
Example #10
0
 private void BuildFunctionExpression(Token[] tokens, Expression parent, string funcName)
 {
     if (parent == null)
     {
         _graph.Add(new FunctionExpression(funcName, _parsingContext, _negateNextExpression));
         _negateNextExpression = false;
         HandleFunctionArguments(tokens, _graph.Current);
     }
     else
     {
         var func = new FunctionExpression(funcName, _parsingContext, _negateNextExpression);
         _negateNextExpression = false;
         parent.AddChild(func);
         HandleFunctionArguments(tokens, func);
     }
 }
Example #11
0
 private void CreateAndAppendExpression(ref Expression parent, Token token)
 {
     if (IsWaste(token)) return;
     if (parent != null && 
         (token.TokenType == TokenType.Comma || token.TokenType == TokenType.SemiColon))
     {
         parent = parent.PrepareForNextChild();
         return;
     }
     if (_negateNextExpression)
     {
         token.Negate();
         _negateNextExpression = false;
     }
     var expression = _expressionFactory.Create(token);
     if (parent == null)
     {
         _graph.Add(expression);
     }
     else
     {
         parent.AddChild(expression);
     }
 }
Example #12
0
 private void BuildEnumerableExpression(Token[] tokens, Expression parent)
 {
     if (parent == null)
     {
         _graph.Add(new EnumerableExpression());
         BuildUp(tokens, _graph.Current);
     }
     else
     {
         var enumerableExpression = new EnumerableExpression();
         parent.AddChild(enumerableExpression);
         BuildUp(tokens, enumerableExpression);
     }
 }