let rec token lexbuf =
  lexbuf.Lexing.lex_mem <- Array.create 3 (-1) ;   __ocaml_lex_token_rec lexbuf 0
and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
  match Lexing.new_engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 256 "cil/src/logic/logic_lexer.mll"
           ( token lexbuf )
# 864 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 257 "cil/src/logic/logic_lexer.mll"
         ( update_newline_loc lexbuf; token lexbuf )
# 869 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 258 "cil/src/logic/logic_lexer.mll"
                      ( update_newline_loc lexbuf; token lexbuf )
# 874 "cil/src/logic/logic_lexer.ml"

  | 3 ->
# 259 "cil/src/logic/logic_lexer.mll"
                     ( token lexbuf )
# 879 "cil/src/logic/logic_lexer.ml"

  | 4 ->
# 261 "cil/src/logic/logic_lexer.mll"
                       ( bs_identifier lexbuf )
# 884 "cil/src/logic/logic_lexer.ml"

  | 5 ->
# 262 "cil/src/logic/logic_lexer.mll"
                        ( let s = lexeme lexbuf in identifier s )
# 889 "cil/src/logic/logic_lexer.ml"

  | 6 ->
# 264 "cil/src/logic/logic_lexer.mll"
                            ( CONSTANT (IntConstant (lexeme lexbuf)) )
# 894 "cil/src/logic/logic_lexer.ml"

  | 7 ->
# 265 "cil/src/logic/logic_lexer.mll"
                            ( CONSTANT (IntConstant (lexeme lexbuf)) )
# 899 "cil/src/logic/logic_lexer.ml"

  | 8 ->
# 266 "cil/src/logic/logic_lexer.mll"
                            ( CONSTANT10 (lexeme lexbuf) )
# 904 "cil/src/logic/logic_lexer.ml"

  | 9 ->
# 267 "cil/src/logic/logic_lexer.mll"
                            ( CONSTANT (IntConstant (lexeme lexbuf)) )
# 909 "cil/src/logic/logic_lexer.ml"

  | 10 ->
let
# 268 "cil/src/logic/logic_lexer.mll"
                 prelude
# 915 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
and
# 268 "cil/src/logic/logic_lexer.mll"
                                                                   content
# 920 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) (lexbuf.Lexing.lex_curr_pos + -1) in
# 269 "cil/src/logic/logic_lexer.mll"
      (
        let b = Buffer.create 5 in
        Buffer.add_string b prelude;
        let lbf = Lexing.from_string content in
        CONSTANT (IntConstant (chr b lbf ^ "'"))
      )
# 929 "cil/src/logic/logic_lexer.ml"

  | 11 ->
# 282 "cil/src/logic/logic_lexer.mll"
      ( CONSTANT (FloatConstant (lexeme lexbuf)) )
# 934 "cil/src/logic/logic_lexer.ml"

  | 12 ->
let
# 285 "cil/src/logic/logic_lexer.mll"
            n
# 940 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos (lexbuf.Lexing.lex_curr_pos + -2) in
# 285 "cil/src/logic/logic_lexer.mll"
                            ( lexbuf.lex_curr_pos <- lexbuf.lex_curr_pos - 2;
                              CONSTANT (IntConstant n) )
# 945 "cil/src/logic/logic_lexer.ml"

  | 13 ->
let
# 288 "cil/src/logic/logic_lexer.mll"
                prelude
# 951 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
and
# 288 "cil/src/logic/logic_lexer.mll"
                                                                content
# 956 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) (lexbuf.Lexing.lex_curr_pos + -1) in
# 289 "cil/src/logic/logic_lexer.mll"
      ( STRING_LITERAL (prelude.[0] = 'L',content) )
# 960 "cil/src/logic/logic_lexer.ml"

  | 14 ->
# 290 "cil/src/logic/logic_lexer.mll"
                            ( hash lexbuf )
# 965 "cil/src/logic/logic_lexer.ml"

  | 15 ->
# 291 "cil/src/logic/logic_lexer.mll"
                            ( IMPLIES )
# 970 "cil/src/logic/logic_lexer.ml"

  | 16 ->
# 292 "cil/src/logic/logic_lexer.mll"
                            ( IFF )
# 975 "cil/src/logic/logic_lexer.ml"

  | 17 ->
# 293 "cil/src/logic/logic_lexer.mll"
                            ( BIMPLIES )
# 980 "cil/src/logic/logic_lexer.ml"

  | 18 ->
# 294 "cil/src/logic/logic_lexer.mll"
                            ( BIFF )
# 985 "cil/src/logic/logic_lexer.ml"

  | 19 ->
# 295 "cil/src/logic/logic_lexer.mll"
                            ( AND )
# 990 "cil/src/logic/logic_lexer.ml"

  | 20 ->
# 296 "cil/src/logic/logic_lexer.mll"
                            ( OR )
# 995 "cil/src/logic/logic_lexer.ml"

  | 21 ->
# 297 "cil/src/logic/logic_lexer.mll"
                            ( NOT )
# 1000 "cil/src/logic/logic_lexer.ml"

  | 22 ->
# 298 "cil/src/logic/logic_lexer.mll"
                            ( DOLLAR )
# 1005 "cil/src/logic/logic_lexer.ml"

  | 23 ->
# 299 "cil/src/logic/logic_lexer.mll"
                            ( COMMA )
# 1010 "cil/src/logic/logic_lexer.ml"

  | 24 ->
# 300 "cil/src/logic/logic_lexer.mll"
                            ( ARROW )
# 1015 "cil/src/logic/logic_lexer.ml"

  | 25 ->
# 301 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Test state_stack; QUESTION )
# 1020 "cil/src/logic/logic_lexer.ml"

  | 26 ->
# 302 "cil/src/logic/logic_lexer.mll"
                            ( SEMICOLON )
# 1025 "cil/src/logic/logic_lexer.ml"

  | 27 ->
# 303 "cil/src/logic/logic_lexer.mll"
                            ( match get_state() with
                                  Normal  -> COLON
                                | Test -> pop_state(); COLON2
                            )
# 1033 "cil/src/logic/logic_lexer.ml"

  | 28 ->
# 307 "cil/src/logic/logic_lexer.mll"
                            ( COLONCOLON )
# 1038 "cil/src/logic/logic_lexer.ml"

  | 29 ->
# 308 "cil/src/logic/logic_lexer.mll"
                            ( DOT )
# 1043 "cil/src/logic/logic_lexer.ml"

  | 30 ->
# 309 "cil/src/logic/logic_lexer.mll"
                            ( DOTDOT )
# 1048 "cil/src/logic/logic_lexer.ml"

  | 31 ->
# 310 "cil/src/logic/logic_lexer.mll"
                            ( DOTDOTDOT )
# 1053 "cil/src/logic/logic_lexer.ml"

  | 32 ->
# 311 "cil/src/logic/logic_lexer.mll"
                            ( MINUS )
# 1058 "cil/src/logic/logic_lexer.ml"

  | 33 ->
# 312 "cil/src/logic/logic_lexer.mll"
                            ( PLUS )
# 1063 "cil/src/logic/logic_lexer.ml"

  | 34 ->
# 313 "cil/src/logic/logic_lexer.mll"
                            ( STAR )
# 1068 "cil/src/logic/logic_lexer.ml"

  | 35 ->
# 314 "cil/src/logic/logic_lexer.mll"
                            ( AMP )
# 1073 "cil/src/logic/logic_lexer.ml"

  | 36 ->
# 315 "cil/src/logic/logic_lexer.mll"
                            ( HATHAT )
# 1078 "cil/src/logic/logic_lexer.ml"

  | 37 ->
# 316 "cil/src/logic/logic_lexer.mll"
                            ( HAT )
# 1083 "cil/src/logic/logic_lexer.ml"

  | 38 ->
# 317 "cil/src/logic/logic_lexer.mll"
                            ( PIPE )
# 1088 "cil/src/logic/logic_lexer.ml"

  | 39 ->
# 318 "cil/src/logic/logic_lexer.mll"
                            ( TILDE )
# 1093 "cil/src/logic/logic_lexer.ml"

  | 40 ->
# 319 "cil/src/logic/logic_lexer.mll"
                            ( SLASH )
# 1098 "cil/src/logic/logic_lexer.ml"

  | 41 ->
# 320 "cil/src/logic/logic_lexer.mll"
                            ( PERCENT )
# 1103 "cil/src/logic/logic_lexer.ml"

  | 42 ->
# 321 "cil/src/logic/logic_lexer.mll"
                            ( LT )
# 1108 "cil/src/logic/logic_lexer.ml"

  | 43 ->
# 322 "cil/src/logic/logic_lexer.mll"
                            ( GT )
# 1113 "cil/src/logic/logic_lexer.ml"

  | 44 ->
# 323 "cil/src/logic/logic_lexer.mll"
                            ( LE )
# 1118 "cil/src/logic/logic_lexer.ml"

  | 45 ->
# 324 "cil/src/logic/logic_lexer.mll"
                            ( GE )
# 1123 "cil/src/logic/logic_lexer.ml"

  | 46 ->
# 325 "cil/src/logic/logic_lexer.mll"
                            ( EQ )
# 1128 "cil/src/logic/logic_lexer.ml"

  | 47 ->
# 326 "cil/src/logic/logic_lexer.mll"
                            ( EQUAL )
# 1133 "cil/src/logic/logic_lexer.ml"

  | 48 ->
# 327 "cil/src/logic/logic_lexer.mll"
                            ( NE )
# 1138 "cil/src/logic/logic_lexer.ml"

  | 49 ->
# 328 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LPAR )
# 1143 "cil/src/logic/logic_lexer.ml"

  | 50 ->
# 329 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RPAR )
# 1148 "cil/src/logic/logic_lexer.ml"

  | 51 ->
# 330 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LBRACE )
# 1153 "cil/src/logic/logic_lexer.ml"

  | 52 ->
# 331 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RBRACE )
# 1158 "cil/src/logic/logic_lexer.ml"

  | 53 ->
# 332 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LSQUARE )
# 1163 "cil/src/logic/logic_lexer.ml"

  | 54 ->
# 333 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RSQUARE )
# 1168 "cil/src/logic/logic_lexer.ml"

  | 55 ->
# 334 "cil/src/logic/logic_lexer.mll"
                            ( LTCOLON )
# 1173 "cil/src/logic/logic_lexer.ml"

  | 56 ->
# 335 "cil/src/logic/logic_lexer.mll"
                            ( COLONGT )
# 1178 "cil/src/logic/logic_lexer.ml"

  | 57 ->
# 336 "cil/src/logic/logic_lexer.mll"
                            ( LTLT )
# 1183 "cil/src/logic/logic_lexer.ml"

  | 58 ->
# 337 "cil/src/logic/logic_lexer.mll"
                            ( GTGT )
# 1188 "cil/src/logic/logic_lexer.ml"

  | 59 ->
let
# 338 "cil/src/logic/logic_lexer.mll"
                 c
# 1194 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 338 "cil/src/logic/logic_lexer.mll"
                            ( find_utf8 c )
# 1198 "cil/src/logic/logic_lexer.ml"

  | 60 ->
# 339 "cil/src/logic/logic_lexer.mll"
                            ( EOF )
# 1203 "cil/src/logic/logic_lexer.ml"

  | 61 ->
# 340 "cil/src/logic/logic_lexer.mll"
        ( lex_error lexbuf ("illegal character " ^ lexeme lexbuf) )
# 1208 "cil/src/logic/logic_lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state

and chr buffer lexbuf =
    __ocaml_lex_chr_rec buffer lexbuf 112
and __ocaml_lex_chr_rec buffer lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 344 "cil/src/logic/logic_lexer.mll"
      ( let s = lexeme lexbuf in
        let real_s = String.sub s 2 (String.length s - 2) in
        let rec add_one_char s =
          let l = String.length s in
          if l = 0 then ()
          else
          let h = int_of_digit s.[0] in
          let c,s =
            if l = 1 then (h,"")
            else
              (16*h + int_of_digit s.[1],
               String.sub s 2 (String.length s - 2))
          in
          Buffer.add_char buffer (Char.chr c); add_one_char s
        in add_one_char real_s; chr buffer lexbuf
      )
# 1234 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 361 "cil/src/logic/logic_lexer.mll"
      ( let s = lexeme lexbuf in
        let real_s = String.sub s 1 (String.length s - 1) in
        let rec value i s =
          if s = "" then i
          else value (8*i+int_of_digit s.[0])
            (String.sub s 1 (String.length s -1))
        in let c = value 0 real_s in
        Buffer.add_char buffer (Char.chr c); chr buffer lexbuf
      )
# 1247 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 371 "cil/src/logic/logic_lexer.mll"
      ( Buffer.add_char buffer
          (match (lexeme lexbuf).[1] with
               'a' -> '\007'
             | 'b' -> '\b'
             | 'f' -> '\012'
             | 'n' -> '\n'
             | 'r' -> '\r'
             | 't' -> '\t'
             | '\'' -> '\''
             | '"' -> '"'
             | '?' -> '?'
             | '\\' -> '\\'
             | _ -> assert false
          ); chr buffer lexbuf)
# 1265 "cil/src/logic/logic_lexer.ml"

  | 3 ->
# 385 "cil/src/logic/logic_lexer.mll"
        ( Buffer.contents buffer )
# 1270 "cil/src/logic/logic_lexer.ml"

  | 4 ->
# 386 "cil/src/logic/logic_lexer.mll"
       ( Buffer.add_string buffer (lexeme lexbuf); chr buffer lexbuf )
# 1275 "cil/src/logic/logic_lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_chr_rec buffer lexbuf __ocaml_lex_state

and hash lexbuf =
    __ocaml_lex_hash_rec lexbuf 122
and __ocaml_lex_hash_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 389 "cil/src/logic/logic_lexer.mll"
        ( update_newline_loc lexbuf; token lexbuf)
# 1286 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 390 "cil/src/logic/logic_lexer.mll"
             ( hash lexbuf)
# 1291 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 391 "cil/src/logic/logic_lexer.mll"
              ( (* We are seeing a line number. This is the number for the
                   * next line *)

                 let s = Lexing.lexeme lexbuf in
                 let lineno = try
                   int_of_string s
                 with Failure ("int_of_string"->
                   (* the int is too big. *)
                   Kernel.warning ~source:lexbuf.lex_start_p
                     "Bad line number in preprocessed file: %s"  s;
                   (-1)
                 in
                 update_line_loc lexbuf (lineno - 1) true 0;
                  (* A file name may follow *)
                  file lexbuf )
# 1309 "cil/src/logic/logic_lexer.ml"

  | 3 ->
# 405 "cil/src/logic/logic_lexer.mll"
                ( hash lexbuf )
# 1314 "cil/src/logic/logic_lexer.ml"

  | 4 ->
# 406 "cil/src/logic/logic_lexer.mll"
            ( endline lexbuf)
# 1319 "cil/src/logic/logic_lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_hash_rec lexbuf __ocaml_lex_state

and file lexbuf =
    __ocaml_lex_file_rec lexbuf 131
and __ocaml_lex_file_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 409 "cil/src/logic/logic_lexer.mll"
                      ( update_newline_loc lexbuf; token lexbuf)
# 1330 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 410 "cil/src/logic/logic_lexer.mll"
                  ( file lexbuf)
# 1335 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 412 "cil/src/logic/logic_lexer.mll"
            (
              let n = Lexing.lexeme lexbuf in
              let n1 = String.sub n 1
                ((String.length n) - 2) in
              update_file_loc lexbuf n1;
              endline lexbuf
            )
# 1346 "cil/src/logic/logic_lexer.ml"

  | 3 ->
# 420 "cil/src/logic/logic_lexer.mll"
      ( endline lexbuf)
# 1351 "cil/src/logic/logic_lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_file_rec lexbuf __ocaml_lex_state

and endline lexbuf =
    __ocaml_lex_endline_rec lexbuf 138
and __ocaml_lex_endline_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 423 "cil/src/logic/logic_lexer.mll"
                ( update_newline_loc lexbuf; token lexbuf)
# 1362 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 424 "cil/src/logic/logic_lexer.mll"
                                ( EOF )
# 1367 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 425 "cil/src/logic/logic_lexer.mll"
      ( endline lexbuf)
# 1372 "cil/src/logic/logic_lexer.ml"

  | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_endline_rec lexbuf __ocaml_lex_state