packages feed

qudb-0.0.0: Database/QUDB/Scanner.x

{
module Database.QUDB.Scanner (
    scan,
    Token(
        Symb, Str, Int, LParen, RParen, Comma, Select, Insert, Delete, Update,
        From, Into, Asterisk, Values, Create, Table, Drop, Equals, Where,
        Greater, Lesser, Set, And, Or, OrderBy, Asc, Desc, Limit, Semicolon
        )
    ) where
}

%wrapper "basic"

$digit  = 0-9
$special = [\.\;\,\$\|\*\+\?\#\~\-\{\}\(\)\[\]\^\/]
$symbolic = $printable # [$special$white]
$quotable = $printable # \'

tokens :-

  $white+                     ;
  "--".*                      ;
  \' $quotable* \'            { \s -> Str $ init $ tail s }
  \-?$digit+                  { \s -> Int (read s) }
  \(                          { \s -> LParen }
  \)                          { \s -> RParen }
  \,                          { \s -> Comma }
  \=                          { \s -> Equals }
  \>                          { \s -> Greater }
  \<                          { \s -> Lesser }
  \;                          { \s -> Semicolon }
  "select"                    { \s -> Select }
  "insert"                    { \s -> Insert }
  "delete"                    { \s -> Delete }
  "update"                    { \s -> Update }
  "from"                      { \s -> From }
  "into"                      { \s -> Into }
  "values"                    { \s -> Values }
  "create"                    { \s -> Create }
  "table"                     { \s -> Table }
  "drop"                      { \s -> Drop }
  "where"                     { \s -> Where }
  "set"                       { \s -> Set }
  "and"                       { \s -> And }
  "or"                        { \s -> Or}
  "asc"                       { \s -> Asc}
  "desc"                      { \s -> Desc}
  "limit"                     { \s -> Limit }
  "order by"                  { \s -> OrderBy}
  \*                          { \s -> Asterisk }
  $symbolic+                  { \s -> Symb s }

{
-- Each action has type :: String -> Token

-- The token type:
data Token =
  Symb String |
  Str String  |
  Int Int     |
  LParen      |
  RParen      |
  Comma       |
  Select      |
  Insert      |
  Delete      |
  Update      |
  From        |
  Into        |
  Values      |
  Create      |
  Table       |
  Drop        |
  Where       |
  Equals      |
  Lesser      |
  Greater     |
  Set         |
  And         |
  Or          |
  OrderBy     |
  Asc         |
  Desc        |
  Limit       |
  Semicolon   |
  Asterisk
  deriving (Eq,Show)

scan = alexScanTokens
}