{ open Parser } let whitespace = [' ' '\t']+ let digit = ['0'-'9'] let alpha = ['a'-'z' 'A'-'Z' '_'] let alphanumeric = (alpha|digit) rule read_token = parse | "SELECT" { SELECT } | "AVG" { AVG } | "MAX" { MAX } | "MIN" { MIN } | "SUM" { SUM } | "COUNT" { COUNT } | "DISTINCT" { DISTINCT } | "FROM" { FROM } | "LEFT" { LEFT } | "RIGHT" { RIGHT } | "CROSS" { CROSS } | "UNION" { UNION } | "JOIN" { JOIN } | "ON" { ON } | "WHERE" { WHERE } | "HAVING" { HAVING } | "BETWEEN" { BETWEEN } | "IN" { IN } | "LIKE" { LIKE } | "GROUP" { GROUP } | "BY" { BY } | "*" { ASTERISK } | "." { DOT } | "=" { EQUALS_OPERATOR } | "(" { LEFT_PAREN } | ")" { RIGHT_PAREN } | "," { COMMA } | "|" { PIPE } | whitespace { read_token lexbuf } | alpha alphanumeric* as ident { IDENT ident } | eof { EOF }