/// <summary>
 /// Recupera o container condicional.
 /// </summary>
 /// <param name="enumerator"></param>
 /// <param name="containerInfo"></param>
 /// <returns></returns>
 public static ConditionalTerm GetContainer(ref IEnumerator <Text.InterpreterExpression.Expression> enumerator, Text.InterpreterExpression.ContainerChars containerInfo)
 {
     return(GetContainer(ref enumerator, ConditionalLexer.Configuration, containerInfo));
 }
        /// <summary>
        /// Recupera container condicional.
        /// </summary>
        /// <param name="enumerator">Enumerador dos items que serĂ£o analizados.</param>
        /// <param name="configuration"></param>
        /// <param name="containerInfo"></param>
        /// <returns></returns>
        private static ConditionalTerm GetContainer(ref IEnumerator <Text.InterpreterExpression.Expression> enumerator, Text.InterpreterExpression.ILexerConfiguration configuration, Text.InterpreterExpression.ContainerChars containerInfo)
        {
            ConditionalContainer container = null;
            var logical = Text.InterpreterExpression.TokenID.And;

            while (containerInfo == null || (string.IsNullOrEmpty(enumerator.Current.Text) || enumerator.Current.Text[0] != containerInfo.Stop))
            {
                var conditional = GetConditional(ref enumerator, configuration, containerInfo != null ? (char?)containerInfo.Stop : null);
                if (((conditional is ValuesArray) || (conditional is FunctionCall)) && container == null)
                {
                    return(conditional);
                }
                else if (container == null)
                {
                    container = new ConditionalContainer(conditional);
                }
                else if (logical == Text.InterpreterExpression.TokenID.And)
                {
                    container.And(conditional);
                }
                else if (logical == Text.InterpreterExpression.TokenID.Plus || logical == Text.InterpreterExpression.TokenID.Minus || logical == Text.InterpreterExpression.TokenID.Star || logical == Text.InterpreterExpression.TokenID.Slash)
                {
                    Operator oper = null;
                    switch (logical)
                    {
                    case Text.InterpreterExpression.TokenID.Plus:
                        oper = new Operator("+");
                        break;

                    case Text.InterpreterExpression.TokenID.Minus:
                        oper = new Operator("-");
                        break;

                    case Text.InterpreterExpression.TokenID.Star:
                        oper = new Operator("*");
                        break;

                    case Text.InterpreterExpression.TokenID.Slash:
                        oper = new Operator("/");
                        break;
                    }
                    ConditionalTerm left = container;
                    if (container.ConditionalsCount == 1)
                    {
                        left = container.Conditionals.First();
                    }
                    container = new ConditionalContainer(new Conditional(left, oper, conditional));
                }
                else
                {
                    container.Or(conditional);
                }
                if (enumerator.Current == null || (containerInfo != null && enumerator.Current.Text[0] == containerInfo.Stop))
                {
                    return(container);
                }
                else if (enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.And || enumerator.Current.Token == (int)Query.Parser.SqlTokenID.kAnd)
                {
                    logical = Text.InterpreterExpression.TokenID.And;
                }
                else if (enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.Or || enumerator.Current.Token == (int)Query.Parser.SqlTokenID.kOr)
                {
                    logical = Text.InterpreterExpression.TokenID.Or;
                }
                else if (enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.Plus || enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.Minus || enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.Star || enumerator.Current.Token == (int)Text.InterpreterExpression.TokenID.Slash)
                {
                    logical = (Text.InterpreterExpression.TokenID)enumerator.Current.Token;
                }
                if (!enumerator.MoveNext())
                {
                    break;
                }
            }
            return(container);
        }