let drop_eof program =
let rec eof_drop rtokens = function
| EOF::[] -> List.rev rtokens
| EOF::rest -> raise(Failure("Misplaced EOF"))
| [] -> raise(Failure("No EOF available."))
| tk::tks -> eof_drop (tk::rtokens) tks in
eof_drop [] program