28 lines
650 B
OCaml
28 lines
650 B
OCaml
{
|
|
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 }
|
|
| "DISTINCT" { DISTINCT }
|
|
| "FROM" { FROM }
|
|
| "LEFT" { LEFT }
|
|
| "RIGHT" { RIGHT }
|
|
| "CROSS" { CROSS }
|
|
| "UNION" { UNION }
|
|
| "JOIN" { JOIN }
|
|
| "ON" { ON }
|
|
| "*" { ASTERISK }
|
|
| "." { DOT }
|
|
| "=" { EQUALS_OPERATOR }
|
|
| whitespace { read_token lexbuf }
|
|
| "WHERE" { WHERE }
|
|
| alpha alphanumeric* as ident { IDENT ident }
|
|
| "," { COMMA }
|
|
| eof { EOF }
|