sig
  module Loc : Loc
  module Action : Action
  module Token :
    sig
      module Loc :
        sig
          type t = Loc.t
          val mk : string -> t
          val ghost : t
          val of_lexing_position : Lexing.position -> t
          val to_ocaml_location : t -> Camlp4_import.Location.t
          val of_ocaml_location : Camlp4_import.Location.t -> t
          val of_lexbuf : Lexing.lexbuf -> t
          val of_tuple :
            string * int * int * int * int * int * int * bool -> t
          val to_tuple :
            t -> string * int * int * int * int * int * int * bool
          val merge : t -> t -> t
          val join : t -> t
          val move : [ `both | `start | `stop ] -> int -> t -> t
          val shift : int -> t -> t
          val move_line : int -> t -> t
          val file_name : t -> string
          val start_line : t -> int
          val stop_line : t -> int
          val start_bol : t -> int
          val stop_bol : t -> int
          val start_off : t -> int
          val stop_off : t -> int
          val start_pos : t -> Lexing.position
          val stop_pos : t -> Lexing.position
          val is_ghost : t -> bool
          val ghostify : t -> t
          val set_file_name : string -> t -> t
          val strictly_before : t -> t -> bool
          val make_absolute : t -> t
          val print : Format.formatter -> t -> unit
          val dump : Format.formatter -> t -> unit
          val to_string : t -> string
          exception Exc_located of t * exn
          val raise : t -> exn -> 'a
          val name : string ref
        end
      type t
      val to_string : t -> string
      val print : Format.formatter -> t -> unit
      val match_keyword : string -> t -> bool
      val extract_string : t -> string
      module Filter :
        sig
          type token_filter = (t, Loc.t) stream_filter
          type t
          val mk : (string -> bool) -> t
          val define_filter : t -> (token_filter -> token_filter) -> unit
          val filter : t -> token_filter
          val keyword_added : t -> string -> bool -> unit
          val keyword_removed : t -> string -> unit
        end
      module Error : Error
    end
  type gram
  type internal_entry
  type tree
  type token_pattern = (Token.t -> bool) * string
  type token_info
  type token_stream = (Token.t * token_info) Stream.t
  val token_location : token_info -> Loc.t
  type symbol =
      Smeta of string * symbol list * Action.t
    | Snterm of internal_entry
    | Snterml of internal_entry * string
    | Slist0 of symbol
    | Slist0sep of symbol * symbol
    | Slist1 of symbol
    | Slist1sep of symbol * symbol
    | Sopt of symbol
    | Stry of symbol
    | Sself
    | Snext
    | Stoken of token_pattern
    | Skeyword of string
    | Stree of tree
  type production_rule = symbol list * Action.t
  type single_extend_statment =
      string option * assoc option * production_rule list
  type extend_statment = position option * single_extend_statment list
  type delete_statment = symbol list
  type ('a, 'b, 'c) fold =
      internal_entry ->
      symbol list -> ('Stream.t -> 'b) -> 'Stream.t -> 'c
  type ('a, 'b, 'c) foldsep =
      internal_entry ->
      symbol list ->
      ('Stream.t -> 'b) -> ('Stream.t -> unit) -> 'Stream.t -> 'c
  module Entry :
    sig
      type 'a t
      val mk : string -> 'Camlp4.Sig.Grammar.Static.Entry.t
      val of_parser :
        string ->
        (token_stream -> 'a) -> 'Camlp4.Sig.Grammar.Static.Entry.t
      val setup_parser :
        'Camlp4.Sig.Grammar.Static.Entry.t -> (token_stream -> 'a) -> unit
      val name : 'Camlp4.Sig.Grammar.Static.Entry.t -> string
      val print :
        Format.formatter -> 'Camlp4.Sig.Grammar.Static.Entry.t -> unit
      val dump :
        Format.formatter -> 'Camlp4.Sig.Grammar.Static.Entry.t -> unit
      val obj : 'Camlp4.Sig.Grammar.Static.Entry.t -> internal_entry
      val clear : 'Camlp4.Sig.Grammar.Static.Entry.t -> unit
    end
  val get_filter : unit -> Camlp4.Sig.Token.Filter.t
  type 'a not_filtered
  val extend :
    'Camlp4.Sig.Grammar.Static.Entry.t -> extend_statment -> unit
  val delete_rule :
    'Camlp4.Sig.Grammar.Static.Entry.t -> delete_statment -> unit
  val srules :
    'Camlp4.Sig.Grammar.Static.Entry.t ->
    (symbol list * Camlp4.Sig.Grammar.Action.t) list -> symbol
  val sfold0 : ('-> '-> 'b) -> '-> ('c, 'a, 'b) fold
  val sfold1 : ('-> '-> 'b) -> '-> ('c, 'a, 'b) fold
  val sfold0sep : ('-> '-> 'b) -> '-> ('c, 'a, 'b) foldsep
  val lex :
    Camlp4.Sig.Loc.t ->
    char Stream.t ->
    (Camlp4.Sig.Token.t * Camlp4.Sig.Loc.t) Stream.t
    Camlp4.Sig.Grammar.Static.not_filtered
  val lex_string :
    Camlp4.Sig.Loc.t ->
    string ->
    (Camlp4.Sig.Token.t * Camlp4.Sig.Loc.t) Stream.t
    Camlp4.Sig.Grammar.Static.not_filtered
  val filter :
    (Camlp4.Sig.Token.t * Camlp4.Sig.Loc.t) Stream.t
    Camlp4.Sig.Grammar.Static.not_filtered -> token_stream
  val parse :
    'Camlp4.Sig.Grammar.Static.Entry.t ->
    Camlp4.Sig.Loc.t -> char Stream.t -> 'a
  val parse_string :
    'Camlp4.Sig.Grammar.Static.Entry.t -> Camlp4.Sig.Loc.t -> string -> 'a
  val parse_tokens_before_filter :
    'Camlp4.Sig.Grammar.Static.Entry.t ->
    (Camlp4.Sig.Token.t * Camlp4.Sig.Loc.t) Stream.t
    Camlp4.Sig.Grammar.Static.not_filtered -> 'a
  val parse_tokens_after_filter :
    'Camlp4.Sig.Grammar.Static.Entry.t -> token_stream -> 'a
end