{ 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)) }