public static bool ParseWhen(this IParsingContextStream source, Func <char, bool> predicate, bool accept = false) { if (source.HasNext && predicate.Invoke(source.Next)) { source.MoveNext(); if (accept) { source.Accept(); } return(true); } return(false); }
public static bool ParseChar(this IParsingContextStream source, char ch1, char ch2, bool accept = false) { if (source.HasNext && source.Next == ch1 || source.Next == ch2) { source.MoveNext(); if (accept) { source.Accept(); } return(true); } return(false); }
public static bool ParseOneOf(this IParsingContextStream source, ISet <char> charSet, bool accept = false, IEqualityComparer <char> charComparer = null) { if (source.HasNext && source.Next.IsContainedBy(charSet, charComparer)) { source.MoveNext(); if (accept) { source.Accept(); } return(true); } return(false); }
public static int ParseDigits(this IParsingContextStream source, bool accept = false) { var count = 0; while (source.HasNext && char.IsDigit(source.Next)) { count++; source.MoveNext(); } if (accept && count > 0) { source.Accept(); } return(count); }
public static int ParseWhileOneOf(this IParsingContextStream source, ISet <char> charSet, bool accept = false, IEqualityComparer <char> charComparer = null) { var count = 0; while (source.HasNext && source.Next.IsContainedBy(charSet, charComparer)) { count++; source.MoveNext(); } if (accept && count > 0) { source.Accept(); } return(count); }
public static int ParseWhile(this IParsingContextStream source, Func <char, bool> predicate, bool accept = false) { var count = 0; while (source.HasNext && predicate.Invoke(source.Next)) { count++; source.MoveNext(); } if (accept && count > 0) { source.Accept(); } return(count); }
public static bool ParseChar( this IParsingContextStream source, char ch, bool accept = false, IEqualityComparer <char> charComparer = null) { if (source.HasNext && Equals(source.Next, ch, charComparer)) { source.MoveNext(); if (accept) { source.Accept(); } return(true); } return(false); }
public static bool ParseText(this IParsingContextStream source, IEnumerable <char> text, IEqualityComparer <char> charComparer = null, bool accept = false) { foreach (var ch in text) { if (!source.MoveNext()) { return(false); } var cur = source.Current; if (!(charComparer?.Equals(ch, cur) ?? ch == cur)) { return(false); } } if (accept) { source.Accept(); } return(true); }
/// <inheritdoc /> protected override IParsingProduct TryParseInternal(IParsingContextStream ctx, ParsingOptions options) { return(ctx.MoveNext() && ctx.Current.IsAny(_range) ? ctx.Accept().CreateTermForAcceptedFragment(FXB.ExpressionTypes.CharTerm) : null); }