Example #1
0
    /// <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);
    }
Example #2
0
 /// <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);