You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

33 lines
969 B

  1. package query
  2. type QueryParser Peg {
  3. }
  4. e <- '\"' condition ( ' '+ and ' '+ condition )* '\"' !.
  5. condition <- tag ' '* (le ' '* (number / time / date)
  6. / ge ' '* (number / time / date)
  7. / l ' '* (number / time / date)
  8. / g ' '* (number / time / date)
  9. / equal ' '* (number / time / date / value)
  10. / contains ' '* value
  11. )
  12. tag <- < (![ \t\n\r\\()"'=><] .)+ >
  13. value <- < '\'' (!["'] .)* '\''>
  14. number <- < ('0'
  15. / [1-9] digit* ('.' digit*)?) >
  16. digit <- [0-9]
  17. time <- "TIME " < year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit (('-' / '+') digit digit ':' digit digit / 'Z') >
  18. date <- "DATE " < year '-' month '-' day >
  19. year <- ('1' / '2') digit digit digit
  20. month <- ('0' / '1') digit
  21. day <- ('0' / '1' / '2' / '3') digit
  22. and <- "AND"
  23. equal <- "="
  24. contains <- "CONTAINS"
  25. le <- "<="
  26. ge <- ">="
  27. l <- "<"
  28. g <- ">"