{ open Parser } let space = [' ' '\t' '\r'] let digit = ['0'-'9'] let lower = ['a' - 'z'] let upper = ['A' -'Z'] let alpha = lower | upper rule token = parse | space+ { token lexbuf } | "(" { LPAREN } | ")" { RPAREN } | "<" { LANGLE } | ">" { RANGLE } | "int" { INT } | "fun" { FUN } | "shift" { SHIFT } | "->" { ARROW } | "=>" { DARROW } | "|-" { DARROW } | ":" { COLON } | "," { COMMA } | "/" { SLASH } | ";;" { EOI } | upper(alpha|digit)* { LVAR (Lexing.lexeme lexbuf) } | alpha(alpha|digit)* { VAR (Lexing.lexeme lexbuf) } | _ { failwith ("unknown token" ^ Lexing.lexeme lexbuf) }