sig
  type token =
      SPACE of int
    | COLON
    | NEWLINE
    | LPAREN
    | RPAREN
    | LBRACKET
    | RBRACKET
    | COMMA
    | LBRACE
    | RBRACE
    | PLUS
    | MINUS
    | TIMES
    | DIVIDE
    | MOD
    | POWER
    | PLUSA
    | MINUSA
    | TIMESA
    | DIVIDEA
    | MODA
    | POWERA
    | EQ
    | NEQ
    | GT
    | LT
    | GEQ
    | LEQ
    | AND
    | OR
    | NAND
    | NOR
    | XOR
    | NOT
    | IF
    | ELSE
    | ELSIF
    | WHILE
    | ASSIGN
    | RETURN
    | CLASS
    | EXTEND
    | SUPER
    | INIT
    | PRIVATE
    | PROTECTED
    | PUBLIC
    | NULL
    | VOID
    | THIS
    | NEW
    | MAIN
    | ARRAY
    | REFINABLE
    | REFINE
    | REFINES
    | TO
    | SEMI
    | DOT
    | EOF
    | TYPE of string
    | ILIT of int
    | FLIT of float
    | BLIT of bool
    | SLIT of string
    | ID of string
  val cdecls :
    (Lexing.lexbuf -> Parser.token) -> Lexing.lexbuf -> Ast.program
end