/* token is first stage of parsing */ token ::= insert | select | meta-command | int | string | semicolon | end-of-file /* command is second stage of parsing */ command ::= cmd-insert semicolon | cmd-select semicolon cmd-insert ::= insert int string string cmd-select ::= select insert ::= "insert" select ::= "select" semicolon ::= ";" meta-command ::= meta-command-verb end-of-file meta-command-verb ::= ".exit" | ".about" | ".version" int ::= sign? digit+ sign ::= "+" | "-" digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" string ::= '"' string-char* '"' string-char ::= '\' utf8-char | utf8-char-not-dbl-quote