let gen_input_sexp my_parse ?parse_pos ic =
let buf = String.create 1 in
let rec loop this_parse =
let c = input_char ic in
buf.[0] <- c;
match this_parse ~pos:0 ~len:1 buf with
| Done (sexp, _) -> sexp
| Cont (_, this_parse) -> loop this_parse
in
loop (mk_this_parse ?parse_pos my_parse)