sig
  type g
  val gcreate : Token.t Token.glexer -> Grammar.g
  val tokens : Grammar.g -> string -> (string * int) list
  val glexer : Grammar.g -> Token.t Token.glexer
  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_token : 'Grammar.Entry.e -> Token.t Stream.t -> 'a
      val name : 'Grammar.Entry.e -> string
      val of_parser :
        Grammar.g -> string -> (Token.t 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 -> Token.t Gramext.g_entry
        = "%identity"
    end
  val of_entry : 'Grammar.Entry.e -> Grammar.g
  module Unsafe :
    sig
      val gram_reinit : Grammar.g -> Token.t Token.glexer -> unit
      val clear_entry : 'Grammar.Entry.e -> unit
    end
  module type GLexerType =
    sig type te val lexer : Grammar.GLexerType.te Token.glexer end
  module type S =
    sig
      type te
      and parsable
      val parsable : char Stream.t -> Grammar.S.parsable
      val tokens : string -> (string * int) list
      val glexer : Grammar.S.te Token.glexer
      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 Token.glexer -> 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
        and parsable
        val parsable : char Stream.t -> Grammar.S.parsable
        val tokens : string -> (string * int) list
        val glexer : Grammar.S.te Token.glexer
        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 Token.glexer -> 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
  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
end