private static Matcher matchPredicate(TokenType tokenType, Func<Scanner, bool> predicate) { return match(tokenType, s => { while (predicate(s)) s.readChar(); } ); }