sig
  type token =
      Directive of string
    | Attribute of string
    | Label of Utils.UTF8.t
    | Int of int64
    | Float of float
    | String of Utils.UTF8.t
    | Class_name of Name.for_class
    | Array_type of Utils.UTF8.t
    | Primitive_type of Descriptor.java_type
    | Field of Name.for_class * Name.for_field * Descriptor.for_field
    | Dynamic_method of Name.for_method * Descriptor.for_method
    | Method of Name.for_class * Name.for_method * Descriptor.for_method
    | Array_method of Descriptor.array_type * Name.for_method *
        Descriptor.for_method
    | Method_signature of Name.for_method * Descriptor.for_parameter list
    | Method_type of Descriptor.for_method
    | Method_handle of Bootstrap.method_handle
    | Identifier of Utils.UTF8.t
    | Arrow
    | Tilde
  type error =
      Invalid_label of Utils.UTF8.t
    | Invalid_directive of Utils.UTF8.t
    | Invalid_attribute of Utils.UTF8.t
    | Invalid_string of Utils.UTF8.t
    | Invalid_character of Utils.UChar.t
    | Invalid_float of string
    | Invalid_integer of string
    | Invalid_method_handle of Utils.UTF8.t
    | Invalid_token
    | Name_error of Name.error
    | Descriptor_error of Descriptor.error
    | UChar_error of Utils.UChar.error
    | UTF8_error of Utils.UTF8.error
  exception Exception of Lexer.error
  val string_of_error : Lexer.error -> string
  val tokens_of_line : Utils.UTF8.t -> Lexer.token list
  val equal : Lexer.token -> Lexer.token -> bool
end