{
open Lexing
open Parser
exception Lexing_error of string
let kwd_tbl = ["let",LET ;"in",IN ;"set",SET;"print",PRINT]
let id_or_kwd s = try List.assoc s kwd_tbl with _ -> IDENT(s)
}
let letter = ['a'-'z' 'A'-'Z']
let digit = ['0'-'9']
let ident = letter (letter | digit)*
let integer = ['0'-'9']+
let space = [' ' '\t' '\n']
rule nexttoken = parse
space+ { nexttoken lexbuf }
| ident { id_or_kwd (lexeme lexbuf) }
| '+' { PLUS }
| '-' { MINUS }
| '*' { TIMES }
| '/' { DIV }
| '=' { EQ }
| '(' { LP }
| ')' { RP }
| integer { CST (int_of_string (lexeme lexbuf)) }
| eof { EOF }
| _ { raise (Lexing_error (lexeme lexbuf)) }