sig
  type token =
      COMMA
    | SEMICOLON
    | COLON
    | DOT
    | LBRACE
    | RBRACE
    | LBRACKET
    | RBRACKET
    | LPAREN
    | RPAREN
    | AUTO
    | REGISTER
    | STATIC
    | EXTERN
    | TYPEDEF
    | VOID
    | CHAR
    | SHORT
    | INT
    | LONG
    | FLOAT
    | DOUBLE
    | SIGNED
    | UNSIGNED
    | CONST
    | VOLATILE
    | INLINE
    | STRUCT
    | UNION
    | ENUM
    | DOTDOTDOT
    | CASE
    | DEFAULT
    | IF
    | ELSE
    | SWITCH
    | WHILE
    | DO
    | FOR
    | GOTO
    | CONTINUE
    | BREAK
    | RETURN
    | SIZEOF
    | EQUAL
    | STAREQUAL
    | SLASHEQUAL
    | PERCENTEQUAL
    | PLUSEQUAL
    | MINUSEQUAL
    | LSHIFTEQUAL
    | RSHIFTEQUAL
    | AMPERSANDEQUAL
    | HATEQUAL
    | VBAREQUAL
    | QUESTION
    | VBARVBAR
    | AMPERSANDAMPERSAND
    | VBAR
    | HAT
    | AMPERSAND
    | EQUALEQUAL
    | EXCLEQUAL
    | LANGLE
    | RANGLE
    | LANGLEEQUAL
    | RANGLEEQUAL
    | LSHIFT
    | RSHIFT
    | PLUS
    | MINUS
    | STAR
    | SLASH
    | PERCENT
    | TILDE
    | EXCL
    | PLUSPLUS
    | MINUSMINUS
    | RARROW
    | INTEGER_CONSTANT of string
    | CHARACTER_CONSTANT of string
    | FLOATING_CONSTANT of string
    | STRING of string
    | IDENTIFIER of C_abstree.identifier
    | ENUMERATION_CONSTANT of C_abstree.identifier
    | TYPEDEF_NAME of C_abstree.identifier
    | EOF
  val translation_unit :
    (Lexing.lexbuf -> C_parser.token) -> Lexing.lexbuf -> C_abstree.program
end