sig
  type error = CannotRun of string | WrongMagic of string
  exception Error of Pparse.error
  val preprocess : string -> string
  val remove_preprocessed : string -> unit
  type 'a ast_kind =
      Structure : Parsetree.structure Pparse.ast_kind
    | Signature : Parsetree.signature Pparse.ast_kind
  val read_ast : 'Pparse.ast_kind -> string -> 'a
  val write_ast : 'Pparse.ast_kind -> string -> '-> unit
  val file :
    Format.formatter ->
    tool_name:string ->
    string -> (Lexing.lexbuf -> 'a) -> 'Pparse.ast_kind -> 'a
  val apply_rewriters :
    ?restore:bool -> tool_name:string -> 'Pparse.ast_kind -> '-> 'a
  val apply_rewriters_str :
    ?restore:bool ->
    tool_name:string -> Parsetree.structure -> Parsetree.structure
  val apply_rewriters_sig :
    ?restore:bool ->
    tool_name:string -> Parsetree.signature -> Parsetree.signature
  val report_error : Format.formatter -> Pparse.error -> unit
  val parse_implementation :
    Format.formatter -> tool_name:string -> string -> Parsetree.structure
  val parse_interface :
    Format.formatter -> tool_name:string -> string -> Parsetree.signature
  val call_external_preprocessor : string -> string -> string
  val open_and_check_magic : string -> string -> Pervasives.in_channel * bool
  module ImplementationHooks :
    sig
      type t = Parsetree.structure
      val add_hook : string -> (Misc.hook_info -> t -> t) -> unit
      val apply_hooks : Misc.hook_info -> t -> t
    end
  module InterfaceHooks :
    sig
      type t = Parsetree.signature
      val add_hook : string -> (Misc.hook_info -> t -> t) -> unit
      val apply_hooks : Misc.hook_info -> t -> t
    end
end