let rec lex lexbuf =
    __ocaml_lex_lex_rec lexbuf 0
and __ocaml_lex_lex_rec lexbuf __ocaml_lex_state =
  match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with
      | 0 ->
# 21 "lexer.mll"
                        ( NUM (int_of_string (Lexing.lexeme lexbuf)) )
# 1872 "lexer.ml"

  | 1 ->
# 22 "lexer.mll"
                        ( REAL (float_of_string (Lexing.lexeme lexbuf)) )
# 1877 "lexer.ml"

  | 2 ->
# 24 "lexer.mll"
                        ( TRUE )
# 1882 "lexer.ml"

  | 3 ->
# 25 "lexer.mll"
                        ( FALSE )
# 1887 "lexer.ml"

  | 4 ->
# 27 "lexer.mll"
                        ( PROGRAM )
# 1892 "lexer.ml"

  | 5 ->
# 28 "lexer.mll"
                        ( VAR )
# 1897 "lexer.ml"

  | 6 ->
# 29 "lexer.mll"
                        ( ARRAY )
# 1902 "lexer.ml"

  | 7 ->
# 30 "lexer.mll"
                        ( OF )
# 1907 "lexer.ml"

  | 8 ->
# 31 "lexer.mll"
                        ( INT )
# 1912 "lexer.ml"

  | 9 ->
# 32 "lexer.mll"
                        ( FLOAT )
# 1917 "lexer.ml"

  | 10 ->
# 33 "lexer.mll"
                        ( PROCEDURE )
# 1922 "lexer.ml"

  | 11 ->
# 34 "lexer.mll"
                        ( FUNCTION )
# 1927 "lexer.ml"

  | 12 ->
# 35 "lexer.mll"
                        ( BEGIN )
# 1932 "lexer.ml"

  | 13 ->
# 36 "lexer.mll"
                        ( END )
# 1937 "lexer.ml"

  | 14 ->
# 37 "lexer.mll"
                        ( IF )
# 1942 "lexer.ml"

  | 15 ->
# 38 "lexer.mll"
                        ( THEN )
# 1947 "lexer.ml"

  | 16 ->
# 39 "lexer.mll"
                        ( ELSE )
# 1952 "lexer.ml"

  | 17 ->
# 40 "lexer.mll"
                        ( WHILE )
# 1957 "lexer.ml"

  | 18 ->
# 41 "lexer.mll"
                        ( DO )
# 1962 "lexer.ml"

  | 19 ->
# 42 "lexer.mll"
                        ( REPEAT )
# 1967 "lexer.ml"

  | 20 ->
# 43 "lexer.mll"
                        ( UNTIL )
# 1972 "lexer.ml"

  | 21 ->
# 44 "lexer.mll"
                        ( FOR )
# 1977 "lexer.ml"

  | 22 ->
# 45 "lexer.mll"
                        ( TO )
# 1982 "lexer.ml"

  | 23 ->
# 46 "lexer.mll"
                        ( WRITE )
# 1987 "lexer.ml"

  | 24 ->
# 47 "lexer.mll"
                        ( CALL )
# 1992 "lexer.ml"

  | 25 ->
# 49 "lexer.mll"
                        ( IDE (Lexing.lexeme lexbuf) )
# 1997 "lexer.ml"

  | 26 ->
# 51 "lexer.mll"
                        ( PLUS )
# 2002 "lexer.ml"

  | 27 ->
# 52 "lexer.mll"
                        ( MINUS )
# 2007 "lexer.ml"

  | 28 ->
# 53 "lexer.mll"
                        ( TIMES )
# 2012 "lexer.ml"

  | 29 ->
# 54 "lexer.mll"
                        ( DIVISION )
# 2017 "lexer.ml"

  | 30 ->
# 55 "lexer.mll"
                        ( EQUAL )
# 2022 "lexer.ml"

  | 31 ->
# 56 "lexer.mll"
                        ( LESSEQUAL )
# 2027 "lexer.ml"

  | 32 ->
# 57 "lexer.mll"
                        ( LESS )
# 2032 "lexer.ml"

  | 33 ->
# 58 "lexer.mll"
                        ( AND )
# 2037 "lexer.ml"

  | 34 ->
# 59 "lexer.mll"
                        ( OR )
# 2042 "lexer.ml"

  | 35 ->
# 60 "lexer.mll"
                        ( NOT )
# 2047 "lexer.ml"

  | 36 ->
# 61 "lexer.mll"
                        ( ASSIGN )
# 2052 "lexer.ml"

  | 37 ->
# 64 "lexer.mll"
                        ( SEMICOLON )
# 2057 "lexer.ml"

  | 38 ->
# 65 "lexer.mll"
                        ( COLON )
# 2062 "lexer.ml"

  | 39 ->
# 66 "lexer.mll"
                        ( COMMA )
# 2067 "lexer.ml"

  | 40 ->
# 68 "lexer.mll"
                        ( LP )
# 2072 "lexer.ml"

  | 41 ->
# 69 "lexer.mll"
                        ( RP )
# 2077 "lexer.ml"

  | 42 ->
# 70 "lexer.mll"
                        ( LS )
# 2082 "lexer.ml"

  | 43 ->
# 71 "lexer.mll"
                        ( RS )
# 2087 "lexer.ml"

  | 44 ->
# 73 "lexer.mll"
                        ( lex lexbuf )
# 2092 "lexer.ml"

  | 45 ->
# 74 "lexer.mll"
                        ( lexbuf.lex_curr_p <- {lexbuf.lex_curr_p with pos_lnum = lexbuf.lex_curr_p.pos_lnum + 1}; lex lexbuf )
# 2097 "lexer.ml"

  | 46 ->
# 75 "lexer.mll"
                        ( EOF )
# 2102 "lexer.ml"

  | 47 ->
# 77 "lexer.mll"
                        ( raise UnknownChar )
# 2107 "lexer.ml"

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