{
open Parser
}
(* Omission of regular expression *)
let space = [' ' '\t' '\n' '\r']
let digit = ['0'-'9']
let lower = ['a'-'z']
let upper = ['A'-'Z']
let alpha = lower | upper
rule token = parse
| space+ { token lexbuf } (* Skip spaces *)
| "(*" [^ '\n']* "\n" (* comment from '( *' *)
{ token lexbuf }
| "(" { LPAREN }
| ")" { RPAREN }
| "+" { PLUS }
| "-" { MINUS }
| "*" { TIMES }
| "/" { DIVIDE }
| "fun" { FUN }
| "->" { ARROW }
| "shift" { SHIFT }
| "control" { CONTROL }
| "shift0" { SHIFT0 }
| "control0" { CONTROL0 }
| "reset" { RESET }
| digit +
{ NUMBER (int_of_string (Lexing.lexeme lexbuf)) }
| lower (alpha | digit) *
{ VAR (Lexing.lexeme lexbuf) }
| eof { EOF } (* End of file *)
| _ { failwith ("unknown token: " ^ Lexing.lexeme lexbuf) }