sig
  type location = {
    start_pos : int;
    end_pos : int;
    start_line : int;
    start_col : int;
  }
  type regular_expression =
      Epsilon
    | Characters of Inria_cset.t
    | Eof
    | Sequence of Inria_syntax.regular_expression *
        Inria_syntax.regular_expression
    | Alternative of Inria_syntax.regular_expression *
        Inria_syntax.regular_expression
    | Repetition of Inria_syntax.regular_expression
    | Bind of Inria_syntax.regular_expression * string
  type ('a, 'b) entry = {
    name : string;
    shortest : bool;
    args : 'a;
    clauses : (Inria_syntax.regular_expression * 'b) list;
  }
  type lexer_definition = {
    header : Inria_syntax.location;
    entrypoints :
      (string list, Inria_syntax.location) Inria_syntax.entry list;
    trailer : Inria_syntax.location;
  }
end