BalticAmadeus.FluentMdx.MdxParser.TryParseTuple C# (CSharp) Метод

TryParseTuple() статический приватный Метод

Performs tuple syntactical analysis over collection of Token objects using IStatedTwoWayEnumerator{T}.
static private TryParseTuple ( IStatedTwoWayEnumerator enumerator, MdxExpressionBase &expression ) : bool
enumerator IStatedTwoWayEnumerator Extended enumerator of collection of objects.
expression MdxExpressionBase Output parsed tuple if syntactic analysis was succeeded.
Результат bool
        internal static bool TryParseTuple(IStatedTwoWayEnumerator<Token> enumerator, out MdxExpressionBase expression)
        {
            enumerator.SavePosition();
            expression = null;

            if (!IsNextTokenValid(enumerator, TokenType.LeftCurlyBracket))
            {
                enumerator.RestoreLastSavedPosition();
                return false;
            }

            var tuple = Mdx.Tuple();

            if (IsNextTokenValid(enumerator, TokenType.RightCurlyBracket))
            {
                expression = tuple;

                enumerator.RemoveLastSavedState();
                return true;
            }

            do
            {
                MdxExpressionBase childExpression;
                if (TryParseRange(enumerator, out childExpression))
                {
                    tuple.With((MdxRange)childExpression);
                }
                else if (TryParseMember(enumerator, out childExpression))
                {
                    tuple.With((MdxMember)childExpression);
                }
                else if (TryParseTuple(enumerator, out childExpression))
                {
                    tuple.With((MdxTuple)childExpression);
                }
                else if (TryParseSet(enumerator, out childExpression))
                {
                    tuple.With((MdxSet)childExpression);
                }
                else if (TryParseFunction(enumerator, out childExpression))
                {
                    tuple.With((MdxFunction) childExpression);
                }
                else
                {
                    enumerator.RestoreLastSavedPosition();
                    return false;
                }

            } while (IsNextTokenValid(enumerator, TokenType.MemberSeparator));

            if (!IsNextTokenValid(enumerator, TokenType.RightCurlyBracket))
            {
                enumerator.RestoreLastSavedPosition();
                return false;
            }

            expression = tuple;

            enumerator.RemoveLastSavedState();
            return true;
        }