{ open Grammar exception IllegalCharacter of char } let whitespace = [' ' '\t' '\r' '\n']+ let letter = ['a'-'z' 'A'-'Z'] let ident = letter+ rule token = parse | whitespace { token lexbuf } | "(" { LPR } | ")" { RPR } | "[" { LBR } | "]" { RBR } | "->" { ARROW } | ":=" { ASSIGN } | "*" { ASTERISK } | "\\" { BACKSLASH } | "::" { DOUBLE_COLON } | ":" { COLON } | "," { COMMA } | "." { DOT } | "=>" { FATARROW } | "_" { UNDERSCORE } | "def" { DEF } | "fst" { FST } | "snd" { SND } | "type" { TYPE } | "bool" { BOOL } | "true" { TRUE } | "false" { FALSE } | "bool-elim" { BOOL_ELIM } | "at" { AT } | ident { IDENT (Lexing.lexeme lexbuf) } | eof { EOF } | (_ as illegal_char) { raise (IllegalCharacter illegal_char) }