/// <summary> /// Performs range syntactical analysis over collection of <see cref="Token"/> objects using <see cref="IStatedTwoWayEnumerator{T}"/>. /// </summary> /// <param name="enumerator">Extended enumerator of collection of <see cref="Token"/> objects.</param> /// <param name="expression">Output parsed range if syntactic analysis was succeeded.</param> /// <returns><value>True</value> if succeeded. <value>False</value> if failed.</returns> internal static bool TryParseRange(IStatedTwoWayEnumerator <Token> enumerator, out MdxExpressionBase expression) { enumerator.SavePosition(); expression = null; var range = new MdxRange(); MdxExpressionBase fromMember; if (!TryParseMember(enumerator, out fromMember)) { enumerator.RestoreLastSavedPosition(); return(false); } if (!IsNextTokenValid(enumerator, TokenType.RangeSeparator)) { enumerator.RestoreLastSavedPosition(); return(false); } range.From((MdxMember)fromMember); MdxExpressionBase toMember; if (!TryParseMember(enumerator, out toMember)) { enumerator.RestoreLastSavedPosition(); return(false); } range.To((MdxMember)toMember); expression = range; enumerator.RemoveLastSavedState(); return(true); }
/// <summary> /// Performs range syntactical analysis over collection of <see cref="Token"/> objects using <see cref="IStatedTwoWayEnumerator{T}"/>. /// </summary> /// <param name="enumerator">Extended enumerator of collection of <see cref="Token"/> objects.</param> /// <param name="expression">Output parsed range if syntactic analysis was succeeded.</param> /// <returns><value>True</value> if succeeded. <value>False</value> if failed.</returns> internal static bool TryParseRange(IStatedTwoWayEnumerator<Token> enumerator, out MdxExpressionBase expression) { enumerator.SavePosition(); expression = null; var range = new MdxRange(); MdxExpressionBase fromMember; if (!TryParseMember(enumerator, out fromMember)) { enumerator.RestoreLastSavedPosition(); return false; } if (!IsNextTokenValid(enumerator, TokenType.RangeSeparator)) { enumerator.RestoreLastSavedPosition(); return false; } range.From((MdxMember)fromMember); MdxExpressionBase toMember; if (!TryParseMember(enumerator, out toMember)) { enumerator.RestoreLastSavedPosition(); return false; } range.To((MdxMember) toMember); expression = range; enumerator.RemoveLastSavedState(); return true; }