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 ->
# 253 "cil/src/logic/logic_lexer.mll"
           ( token lexbuf )
# 875 "cil/src/logic/logic_lexer.ml"

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

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

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

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

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

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

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

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

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

  | 10 ->
let
# 265 "cil/src/logic/logic_lexer.mll"
                 prelude
# 926 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
and
# 265 "cil/src/logic/logic_lexer.mll"
                                                   content
# 931 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) (lexbuf.Lexing.lex_curr_pos + -1) in
# 266 "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 ^ "'"))
      )
# 940 "cil/src/logic/logic_lexer.ml"

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

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

  | 13 ->
let
# 285 "cil/src/logic/logic_lexer.mll"
                prelude
# 962 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_mem.(0)
and
# 285 "cil/src/logic/logic_lexer.mll"
                                                 content
# 967 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_mem.(0) (lexbuf.Lexing.lex_curr_pos + -1) in
# 286 "cil/src/logic/logic_lexer.mll"
      ( STRING_LITERAL (prelude.[0] = 'L',content) )
# 971 "cil/src/logic/logic_lexer.ml"

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

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

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

  | 17 ->
# 290 "cil/src/logic/logic_lexer.mll"
                            ( AND )
# 991 "cil/src/logic/logic_lexer.ml"

  | 18 ->
# 291 "cil/src/logic/logic_lexer.mll"
                            ( OR )
# 996 "cil/src/logic/logic_lexer.ml"

  | 19 ->
# 292 "cil/src/logic/logic_lexer.mll"
                            ( NOT )
# 1001 "cil/src/logic/logic_lexer.ml"

  | 20 ->
# 293 "cil/src/logic/logic_lexer.mll"
                            ( DOLLAR )
# 1006 "cil/src/logic/logic_lexer.ml"

  | 21 ->
# 294 "cil/src/logic/logic_lexer.mll"
                            ( COMMA )
# 1011 "cil/src/logic/logic_lexer.ml"

  | 22 ->
# 295 "cil/src/logic/logic_lexer.mll"
                            ( ARROW )
# 1016 "cil/src/logic/logic_lexer.ml"

  | 23 ->
# 296 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Test state_stack; QUESTION )
# 1021 "cil/src/logic/logic_lexer.ml"

  | 24 ->
# 297 "cil/src/logic/logic_lexer.mll"
                            ( SEMICOLON )
# 1026 "cil/src/logic/logic_lexer.ml"

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

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

  | 27 ->
# 303 "cil/src/logic/logic_lexer.mll"
                            ( DOT )
# 1044 "cil/src/logic/logic_lexer.ml"

  | 28 ->
# 304 "cil/src/logic/logic_lexer.mll"
                            ( DOTDOT )
# 1049 "cil/src/logic/logic_lexer.ml"

  | 29 ->
# 305 "cil/src/logic/logic_lexer.mll"
                            ( DOTDOTDOT )
# 1054 "cil/src/logic/logic_lexer.ml"

  | 30 ->
# 306 "cil/src/logic/logic_lexer.mll"
                            ( MINUS )
# 1059 "cil/src/logic/logic_lexer.ml"

  | 31 ->
# 307 "cil/src/logic/logic_lexer.mll"
                            ( PLUS )
# 1064 "cil/src/logic/logic_lexer.ml"

  | 32 ->
# 308 "cil/src/logic/logic_lexer.mll"
                            ( STAR )
# 1069 "cil/src/logic/logic_lexer.ml"

  | 33 ->
# 309 "cil/src/logic/logic_lexer.mll"
                            ( AMP )
# 1074 "cil/src/logic/logic_lexer.ml"

  | 34 ->
# 310 "cil/src/logic/logic_lexer.mll"
                            ( HATHAT )
# 1079 "cil/src/logic/logic_lexer.ml"

  | 35 ->
# 311 "cil/src/logic/logic_lexer.mll"
                            ( HAT )
# 1084 "cil/src/logic/logic_lexer.ml"

  | 36 ->
# 312 "cil/src/logic/logic_lexer.mll"
                            ( PIPE )
# 1089 "cil/src/logic/logic_lexer.ml"

  | 37 ->
# 313 "cil/src/logic/logic_lexer.mll"
                            ( TILDE )
# 1094 "cil/src/logic/logic_lexer.ml"

  | 38 ->
# 314 "cil/src/logic/logic_lexer.mll"
                            ( SLASH )
# 1099 "cil/src/logic/logic_lexer.ml"

  | 39 ->
# 315 "cil/src/logic/logic_lexer.mll"
                            ( PERCENT )
# 1104 "cil/src/logic/logic_lexer.ml"

  | 40 ->
# 316 "cil/src/logic/logic_lexer.mll"
                            ( LT )
# 1109 "cil/src/logic/logic_lexer.ml"

  | 41 ->
# 317 "cil/src/logic/logic_lexer.mll"
                            ( GT )
# 1114 "cil/src/logic/logic_lexer.ml"

  | 42 ->
# 318 "cil/src/logic/logic_lexer.mll"
                            ( LE )
# 1119 "cil/src/logic/logic_lexer.ml"

  | 43 ->
# 319 "cil/src/logic/logic_lexer.mll"
                            ( GE )
# 1124 "cil/src/logic/logic_lexer.ml"

  | 44 ->
# 320 "cil/src/logic/logic_lexer.mll"
                            ( EQ )
# 1129 "cil/src/logic/logic_lexer.ml"

  | 45 ->
# 321 "cil/src/logic/logic_lexer.mll"
                            ( EQUAL )
# 1134 "cil/src/logic/logic_lexer.ml"

  | 46 ->
# 322 "cil/src/logic/logic_lexer.mll"
                            ( NE )
# 1139 "cil/src/logic/logic_lexer.ml"

  | 47 ->
# 323 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LPAR )
# 1144 "cil/src/logic/logic_lexer.ml"

  | 48 ->
# 324 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RPAR )
# 1149 "cil/src/logic/logic_lexer.ml"

  | 49 ->
# 325 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LBRACE )
# 1154 "cil/src/logic/logic_lexer.ml"

  | 50 ->
# 326 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RBRACE )
# 1159 "cil/src/logic/logic_lexer.ml"

  | 51 ->
# 327 "cil/src/logic/logic_lexer.mll"
                            ( Stack.push Normal state_stack; LSQUARE )
# 1164 "cil/src/logic/logic_lexer.ml"

  | 52 ->
# 328 "cil/src/logic/logic_lexer.mll"
                            ( pop_state(); RSQUARE )
# 1169 "cil/src/logic/logic_lexer.ml"

  | 53 ->
# 329 "cil/src/logic/logic_lexer.mll"
                            ( LTCOLON )
# 1174 "cil/src/logic/logic_lexer.ml"

  | 54 ->
# 330 "cil/src/logic/logic_lexer.mll"
                            ( COLONGT )
# 1179 "cil/src/logic/logic_lexer.ml"

  | 55 ->
# 331 "cil/src/logic/logic_lexer.mll"
                            ( LTLT )
# 1184 "cil/src/logic/logic_lexer.ml"

  | 56 ->
# 332 "cil/src/logic/logic_lexer.mll"
                            ( GTGT )
# 1189 "cil/src/logic/logic_lexer.ml"

  | 57 ->
let
# 333 "cil/src/logic/logic_lexer.mll"
                 c
# 1195 "cil/src/logic/logic_lexer.ml"
Lexing.sub_lexeme lexbuf lexbuf.Lexing.lex_start_pos lexbuf.Lexing.lex_curr_pos in
# 333 "cil/src/logic/logic_lexer.mll"
                            ( find_utf8 c )
# 1199 "cil/src/logic/logic_lexer.ml"

  | 58 ->
# 334 "cil/src/logic/logic_lexer.mll"
                            ( EOF )
# 1204 "cil/src/logic/logic_lexer.ml"

  | 59 ->
# 335 "cil/src/logic/logic_lexer.mll"
        ( lex_error lexbuf ("illegal character " ^ lexeme lexbuf) )
# 1209 "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 110
and __ocaml_lex_chr_rec buffer lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 339 "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
      )
# 1235 "cil/src/logic/logic_lexer.ml"

  | 1 ->
# 356 "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
      )
# 1248 "cil/src/logic/logic_lexer.ml"

  | 2 ->
# 366 "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)
# 1266 "cil/src/logic/logic_lexer.ml"

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

  | 4 ->
# 381 "cil/src/logic/logic_lexer.mll"
       ( Buffer.add_string buffer (lexeme lexbuf); chr buffer lexbuf )
# 1276 "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 120
and __ocaml_lex_hash_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 384 "cil/src/logic/logic_lexer.mll"
        ( update_newline_loc lexbuf; token lexbuf)
# 1287 "cil/src/logic/logic_lexer.ml"

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

  | 2 ->
# 386 "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. *)
                   let src = Cil.source (lexbuf.lex_start_p, lexbuf.lex_curr_p) in
                   Cilmsg.warning ~source:src
                     "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 )
# 1311 "cil/src/logic/logic_lexer.ml"

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

  | 4 ->
# 402 "cil/src/logic/logic_lexer.mll"
            ( endline lexbuf)
# 1321 "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 129
and __ocaml_lex_file_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 405 "cil/src/logic/logic_lexer.mll"
                      ( update_newline_loc lexbuf; token lexbuf)
# 1332 "cil/src/logic/logic_lexer.ml"

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

  | 2 ->
# 408 "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
            )
# 1348 "cil/src/logic/logic_lexer.ml"

  | 3 ->
# 416 "cil/src/logic/logic_lexer.mll"
      ( endline lexbuf)
# 1353 "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 136
and __ocaml_lex_endline_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 419 "cil/src/logic/logic_lexer.mll"
                ( update_newline_loc lexbuf; token lexbuf)
# 1364 "cil/src/logic/logic_lexer.ml"

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

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

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