/// <summary> /// Convenience method for parsers which act on character sequences. Attempts a parse but /// does not consume any input. Returns true if the parse would succeed, false otherwise. /// </summary> /// <param name="parser"></param> /// <param name="input"></param> /// <param name="options"></param> /// <returns></returns> public static bool CanMatch(this IMultiParser <char> parser, string input, StringCharacterSequence.Options options = default) { // Don't need to .Checkpoint()/.Rewind() because the sequence is private and we don't // reuse it var sequence = new StringCharacterSequence(input, options); var state = new ParseState <char>(sequence, Defaults.LogMethod); var result = parser.Parse(state); return(result.Success); }
/// <summary> /// Convenience method for parsers which act on character sequences. Parse the given input string /// and return the first value or failure. Creates a character sequence from the string /// and the ParseState object. /// </summary> /// <typeparam name="TOutput"></typeparam> /// <param name="parser"></param> /// <param name="s"></param> /// <param name="options"></param> /// <param name="log"></param> /// <returns></returns> public static IResult <TOutput> Parse <TOutput>(this IParser <char, TOutput> parser, string s, StringCharacterSequence.Options options = default, Action <string>?log = null) => parser.Parse(new ParseState <char>(new StringCharacterSequence(s, options), log ?? Defaults.LogMethod));
/// <summary> /// Wrap the string as a sequence of characters. /// </summary> /// <param name="str"></param> /// <param name="options"></param> /// <returns></returns> public static ISequence <char> ToCharacterSequence(this string str, StringCharacterSequence.Options options = default) => new StringCharacterSequence(str, options);