let rec token lexbuf =
    __ocaml_lex_token_rec lexbuf 0
and __ocaml_lex_token_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 48 "lexer.mll"
              ( PROGRAM )
# 2504 "lexer.ml"

  | 1 ->
# 49 "lexer.mll"
            ( CONST )
# 2509 "lexer.ml"

  | 2 ->
# 50 "lexer.mll"
           ( TYPE )
# 2514 "lexer.ml"

  | 3 ->
# 51 "lexer.mll"
            ( ARRAY )
# 2519 "lexer.ml"

  | 4 ->
# 52 "lexer.mll"
         ( OF )
# 2524 "lexer.ml"

  | 5 ->
# 53 "lexer.mll"
             ( RECORD )
# 2529 "lexer.ml"

  | 6 ->
# 54 "lexer.mll"
          ( END )
# 2534 "lexer.ml"

  | 7 ->
# 55 "lexer.mll"
          ( VAR )
# 2539 "lexer.ml"

  | 8 ->
# 56 "lexer.mll"
         ( IF )
# 2544 "lexer.ml"

  | 9 ->
# 57 "lexer.mll"
           ( THEN )
# 2549 "lexer.ml"

  | 10 ->
# 58 "lexer.mll"
           ( ELSE )
# 2554 "lexer.ml"

  | 11 ->
# 59 "lexer.mll"
            ( WHILE )
# 2559 "lexer.ml"

  | 12 ->
# 60 "lexer.mll"
         ( DO )
# 2564 "lexer.ml"

  | 13 ->
# 61 "lexer.mll"
            ( BEGIN )
# 2569 "lexer.ml"

  | 14 ->
# 62 "lexer.mll"
          ( END )
# 2574 "lexer.ml"

  | 15 ->
# 63 "lexer.mll"
                ( PROCEDURE )
# 2579 "lexer.ml"

  | 16 ->
# 64 "lexer.mll"
               ( FUNCTION )
# 2584 "lexer.ml"

  | 17 ->
# 65 "lexer.mll"
             ( RETURN )
# 2589 "lexer.ml"

  | 18 ->
# 66 "lexer.mll"
          ( NEW )
# 2594 "lexer.ml"

  | 19 ->
# 67 "lexer.mll"
             ( DELETE )
# 2599 "lexer.ml"

  | 20 ->
# 69 "lexer.mll"
           ( TRUE )
# 2604 "lexer.ml"

  | 21 ->
# 70 "lexer.mll"
            ( FALSE )
# 2609 "lexer.ml"

  | 22 ->
# 71 "lexer.mll"
          ( NOT )
# 2614 "lexer.ml"

  | 23 ->
# 73 "lexer.mll"
              ( INTEGER )
# 2619 "lexer.ml"

  | 24 ->
# 74 "lexer.mll"
              ( BOOLEAN )
# 2624 "lexer.ml"

  | 25 ->
# 75 "lexer.mll"
        ( POINTER )
# 2629 "lexer.ml"

  | 26 ->
# 76 "lexer.mll"
        ( ADDRESS_OF )
# 2634 "lexer.ml"

  | 27 ->
# 78 "lexer.mll"
        ( LBRACK )
# 2639 "lexer.ml"

  | 28 ->
# 79 "lexer.mll"
        ( RBRACK )
# 2644 "lexer.ml"

  | 29 ->
# 80 "lexer.mll"
         ( INTERV )
# 2649 "lexer.ml"

  | 30 ->
# 81 "lexer.mll"
        ( SEMICOL )
# 2654 "lexer.ml"

  | 31 ->
# 82 "lexer.mll"
        ( COMMA )
# 2659 "lexer.ml"

  | 32 ->
# 83 "lexer.mll"
        ( COLON )
# 2664 "lexer.ml"

  | 33 ->
# 84 "lexer.mll"
        ( DOT )
# 2669 "lexer.ml"

  | 34 ->
# 85 "lexer.mll"
        ( LPAR )
# 2674 "lexer.ml"

  | 35 ->
# 86 "lexer.mll"
        ( RPAR )
# 2679 "lexer.ml"

  | 36 ->
# 87 "lexer.mll"
         ( ASSIGN )
# 2684 "lexer.ml"

  | 37 ->
# 89 "lexer.mll"
        ( EQ )
# 2689 "lexer.ml"

  | 38 ->
# 90 "lexer.mll"
         ( NEQ )
# 2694 "lexer.ml"

  | 39 ->
# 91 "lexer.mll"
         ( LE )
# 2699 "lexer.ml"

  | 40 ->
# 92 "lexer.mll"
        ( LT )
# 2704 "lexer.ml"

  | 41 ->
# 93 "lexer.mll"
         ( GE )
# 2709 "lexer.ml"

  | 42 ->
# 94 "lexer.mll"
        ( GT )
# 2714 "lexer.ml"

  | 43 ->
# 96 "lexer.mll"
        ( PLUS )
# 2719 "lexer.ml"

  | 44 ->
# 97 "lexer.mll"
        ( MINUS )
# 2724 "lexer.ml"

  | 45 ->
# 98 "lexer.mll"
         ( OR )
# 2729 "lexer.ml"

  | 46 ->
# 99 "lexer.mll"
        ( MULT )
# 2734 "lexer.ml"

  | 47 ->
# 100 "lexer.mll"
        ( DIV )
# 2739 "lexer.ml"

  | 48 ->
# 101 "lexer.mll"
          ( MOD )
# 2744 "lexer.ml"

  | 49 ->
# 102 "lexer.mll"
          ( AND )
# 2749 "lexer.ml"

  | 50 ->
# 104 "lexer.mll"
               ( NUMERAL (int_of_string (lexeme lexbuf)) )
# 2754 "lexer.ml"

  | 51 ->
# 105 "lexer.mll"
                                                              ( NAME (lexeme lexbuf) )
# 2759 "lexer.ml"

  | 52 ->
# 107 "lexer.mll"
           ( token lexbuf )
# 2764 "lexer.ml"

  | 53 ->
# 110 "lexer.mll"
         ( on_newline lexbuf; token lexbuf )
# 2769 "lexer.ml"

  | 54 ->
# 112 "lexer.mll"
        ( comment_depth := 1; in_comment lexbuf )
# 2774 "lexer.ml"

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

and in_comment lexbuf =
    __ocaml_lex_in_comment_rec lexbuf 137
and __ocaml_lex_in_comment_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 115 "lexer.mll"
        ( incr comment_depth; in_comment lexbuf )
# 2785 "lexer.ml"

  | 1 ->
# 116 "lexer.mll"
        ( decr comment_depth; (if !comment_depth = 0 then token else in_comment) lexbuf )
# 2790 "lexer.ml"

  | 2 ->
# 117 "lexer.mll"
         ( on_newline lexbuf; in_comment lexbuf )
# 2795 "lexer.ml"

  | 3 ->
# 118 "lexer.mll"
                   ( in_comment lexbuf )
# 2800 "lexer.ml"

  | n -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_in_comment_rec lexbuf n