package query type QueryParser Peg { } e <- '\"' condition ( ' '+ and ' '+ condition )* '\"' !. condition <- tag ' '* (le ' '* (number / time / date) / ge ' '* (number / time / date) / l ' '* (number / time / date) / g ' '* (number / time / date) / equal ' '* (number / time / date / value) / contains ' '* value / exists ) tag <- < (![ \t\n\r\\()"'=><] .)+ > value <- < '\'' (!["'] .)* '\''> number <- < ('0' / [1-9] digit* ('.' digit*)?) > digit <- [0-9] time <- "TIME " < year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit (('-' / '+') digit digit ':' digit digit / 'Z') > date <- "DATE " < year '-' month '-' day > year <- ('1' / '2') digit digit digit month <- ('0' / '1') digit day <- ('0' / '1' / '2' / '3') digit and <- "AND" equal <- "=" contains <- "CONTAINS" exists <- "EXISTS" le <- "<=" ge <- ">=" l <- "<" g <- ">"