let rec token lexbuf = __ocaml_lex_token_rec lexbuf 0
and __ocaml_lex_token_rec lexbuf state =
  match Lexing.engine lex_tables state lexbuf with
    0 -> (
# 97 "c_lexer.mll"
      parse_sharp_position_directive lexbuf; token lexbuf )
  | 1 -> (
# 99 "c_lexer.mll"
      if Lexing.lexeme_start lexbuf = 0 then
      (parse_sharp_position_directive lexbuf; token lexbuf) else failwith "bad # directive" )
  | 2 -> (
# 101 "c_lexer.mll"
         parse_newline lexbuf; token lexbuf )
  | 3 -> (
# 102 "c_lexer.mll"
                 token lexbuf )
  | 4 -> (
# 105 "c_lexer.mll"
      STRING(remove_quotes '"' (Lexing.lexeme lexbuf)) )
  | 5 -> (
# 108 "c_lexer.mll"
      CHARACTER_CONSTANT(remove_quotes '\'' (Lexing.lexeme lexbuf)) )
  | 6 -> (
# 109 "c_lexer.mll"
                                    INTEGER_CONSTANT(Lexing.lexeme lexbuf) )
  | 7 -> (
# 110 "c_lexer.mll"
                                       INTEGER_CONSTANT(Lexing.lexeme lexbuf) )
  | 8 -> (
# 111 "c_lexer.mll"
                                 INTEGER_CONSTANT(Lexing.lexeme lexbuf) )
  | 9 -> (
# 113 "c_lexer.mll"
                      FLOATING_CONSTANT(Lexing.lexeme lexbuf) )
  | 10 -> (
# 115 "c_lexer.mll"
                      FLOATING_CONSTANT(Lexing.lexeme lexbuf) )
  | 11 -> (
# 116 "c_lexer.mll"
                                                          FLOATING_CONSTANT(Lexing.lexeme lexbuf) )
  | 12 -> (
# 118 "c_lexer.mll"
      let s = Lexing.lexeme lexbuf in
    try identifier_of(s) with _ -> 
      if is_typedef_name s then
        TYPEDEF_NAME(s)
      else
        IDENTIFIER(s)
    )
  | 13 -> (
# 125 "c_lexer.mll"
          DOTDOTDOT )
  | 14 -> (
# 126 "c_lexer.mll"
         STAREQUAL )
  | 15 -> (
# 127 "c_lexer.mll"
         SLASHEQUAL )
  | 16 -> (
# 128 "c_lexer.mll"
         PERCENTEQUAL )
  | 17 -> (
# 129 "c_lexer.mll"
         PLUSEQUAL )
  | 18 -> (
# 130 "c_lexer.mll"
         MINUSEQUAL )
  | 19 -> (
# 131 "c_lexer.mll"
          LSHIFTEQUAL )
  | 20 -> (
# 132 "c_lexer.mll"
          RSHIFTEQUAL )
  | 21 -> (
# 133 "c_lexer.mll"
         AMPERSANDEQUAL )
  | 22 -> (
# 134 "c_lexer.mll"
         HATEQUAL )
  | 23 -> (
# 135 "c_lexer.mll"
         VBAREQUAL )
  | 24 -> (
# 136 "c_lexer.mll"
         VBARVBAR )
  | 25 -> (
# 137 "c_lexer.mll"
         AMPERSANDAMPERSAND )
  | 26 -> (
# 138 "c_lexer.mll"
         EQUALEQUAL )
  | 27 -> (
# 139 "c_lexer.mll"
         EXCLEQUAL )
  | 28 -> (
# 140 "c_lexer.mll"
         LANGLEEQUAL )
  | 29 -> (
# 141 "c_lexer.mll"
         RANGLEEQUAL )
  | 30 -> (
# 142 "c_lexer.mll"
         LSHIFT )
  | 31 -> (
# 143 "c_lexer.mll"
         RSHIFT )
  | 32 -> (
# 144 "c_lexer.mll"
         RARROW )
  | 33 -> (
# 145 "c_lexer.mll"
         PLUSPLUS )
  | 34 -> (
# 146 "c_lexer.mll"
         MINUSMINUS )
  | 35 -> (
# 147 "c_lexer.mll"
               let s = Lexing.lexeme lexbuf in
  try symbol_of(s) with _ -> IDENTIFIER(s)
             )
  | 36 -> (
# 150 "c_lexer.mll"
        EOF )
  | 37 -> (
# 151 "c_lexer.mll"
      failwith ("unknown token : " ^ Lexing.lexeme lexbuf) )
  | n -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf n