sig
  type g
  type token = string * string
  val gcreate : Grammar.token Plexing.lexer -> Grammar.g
  val tokens : Grammar.g -> string -> (string * int) list
  val glexer : Grammar.g -> Grammar.token Plexing.lexer
  type parsable
  val parsable : Grammar.g -> char Stream.t -> Grammar.parsable
  module Entry :
    sig
      type 'a e
      val create : Grammar.g -> string -> 'Grammar.Entry.e
      val parse : 'Grammar.Entry.e -> char Stream.t -> 'a
      val parse_all : 'Grammar.Entry.e -> char Stream.t -> 'a list
      val parse_token : 'Grammar.Entry.e -> Grammar.token Stream.t -> 'a
      val parse_parsable : 'Grammar.Entry.e -> Grammar.parsable -> 'a
      val name : 'Grammar.Entry.e -> string
      val of_parser :
        Grammar.g ->
        string -> (Grammar.token Stream.t -> 'a) -> 'Grammar.Entry.e
      val print : 'Grammar.Entry.e -> unit
      val find : 'Grammar.Entry.e -> string -> Obj.t Grammar.Entry.e
      external obj : 'Grammar.Entry.e -> Grammar.token Gramext.g_entry
        = "%identity"
    end
  val of_entry : 'Grammar.Entry.e -> Grammar.g
  module Unsafe :
    sig
      val gram_reinit : Grammar.g -> Grammar.token Plexing.lexer -> unit
      val clear_entry : 'Grammar.Entry.e -> unit
    end
  type parse_algorithm =
    Gramext.parse_algorithm =
      Predictive
    | Backtracking
    | DefaultAlgorithm
  val set_algorithm : Grammar.g -> Grammar.parse_algorithm -> unit
  val backtrack_parse : bool Pervasives.ref
  val backtrack_stalling_limit : int Pervasives.ref
  module type GLexerType =
    sig type te val lexer : Grammar.GLexerType.te Plexing.lexer end
  module type S =
    sig
      type te
      type parsable
      val parsable : char Stream.t -> Grammar.S.parsable
      val tokens : string -> (string * int) list
      val glexer : Grammar.S.te Plexing.lexer
      val set_algorithm : Grammar.parse_algorithm -> unit
      module Entry :
        sig
          type 'a e
          val create : string -> 'Grammar.S.Entry.e
          val parse : 'Grammar.S.Entry.e -> Grammar.S.parsable -> 'a
          val parse_token :
            'Grammar.S.Entry.e -> Grammar.S.te Stream.t -> 'a
          val name : 'Grammar.S.Entry.e -> string
          val of_parser :
            string -> (Grammar.S.te Stream.t -> 'a) -> 'Grammar.S.Entry.e
          val print : 'Grammar.S.Entry.e -> unit
          external obj : 'Grammar.S.Entry.e -> Grammar.S.te Gramext.g_entry
            = "%identity"
        end
      module Unsafe :
        sig
          val gram_reinit : Grammar.S.te Plexing.lexer -> unit
          val clear_entry : 'Grammar.S.Entry.e -> unit
        end
      val extend :
        'Grammar.S.Entry.e ->
        Gramext.position option ->
        (string option * Gramext.g_assoc option *
         (Grammar.S.te Gramext.g_symbol list * Gramext.g_action) list)
        list -> unit
      val delete_rule :
        'Grammar.S.Entry.e -> Grammar.S.te Gramext.g_symbol list -> unit
    end
  module GMake :
    functor (L : GLexerType->
      sig
        type te = L.te
        type parsable
        val parsable : char Stream.t -> parsable
        val tokens : string -> (string * int) list
        val glexer : te Plexing.lexer
        val set_algorithm : parse_algorithm -> unit
        module Entry :
          sig
            type 'a e
            val create : string -> 'a e
            val parse : 'a e -> parsable -> 'a
            val parse_token : 'a e -> te Stream.t -> 'a
            val name : 'a e -> string
            val of_parser : string -> (te Stream.t -> 'a) -> 'a e
            val print : 'a e -> unit
            external obj : 'a e -> te Gramext.g_entry = "%identity"
          end
        module Unsafe :
          sig
            val gram_reinit : te Plexing.lexer -> unit
            val clear_entry : 'Entry.e -> unit
          end
        val extend :
          'Entry.e ->
          Gramext.position option ->
          (string option * Gramext.g_assoc option *
           (te Gramext.g_symbol list * Gramext.g_action) list)
          list -> unit
        val delete_rule : 'Entry.e -> te Gramext.g_symbol list -> unit
      end
  val skip_item : '-> 'a
  val error_verbose : bool Pervasives.ref
  val warning_verbose : bool Pervasives.ref
  val strict_parsing : bool Pervasives.ref
  val print_entry : Format.formatter -> 'Gramext.g_entry -> unit
  val iter_entry : ('Gramext.g_entry -> unit) -> 'Gramext.g_entry -> unit
  val fold_entry :
    ('Gramext.g_entry -> '-> 'b) -> 'Gramext.g_entry -> '-> 'b
  val reinit_entry_functions : 'Gramext.g_entry -> unit
  val loc_of_token_interval : int -> int -> Ploc.t
  val extend :
    ('Gramext.g_entry * Gramext.position option *
     (string option * Gramext.g_assoc option *
      ('Gramext.g_symbol list * Gramext.g_action) list)
     list)
    list -> unit
  val delete_rule :
    'Grammar.Entry.e -> Grammar.token Gramext.g_symbol list -> unit
  val parse_top_symb :
    'Gramext.g_entry -> 'Gramext.g_symbol -> 'Stream.t -> Obj.t
  val symb_failed_txt :
    'Gramext.g_entry ->
    'Gramext.g_symbol -> 'Gramext.g_symbol -> string
  val create_local_entry : Grammar.g -> string -> 'Grammar.Entry.e
end