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.

35 lines
1019 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. / exists
  12. )
  13. tag <- < (![ \t\n\r\\()"'=><] .)+ >
  14. value <- < '\'' (!["'] .)* '\''>
  15. number <- < ('0'
  16. / [1-9] digit* ('.' digit*)?) >
  17. digit <- [0-9]
  18. time <- "TIME " < year '-' month '-' day 'T' digit digit ':' digit digit ':' digit digit (('-' / '+') digit digit ':' digit digit / 'Z') >
  19. date <- "DATE " < year '-' month '-' day >
  20. year <- ('1' / '2') digit digit digit
  21. month <- ('0' / '1') digit
  22. day <- ('0' / '1' / '2' / '3') digit
  23. and <- "AND"
  24. equal <- "="
  25. contains <- "CONTAINS"
  26. exists <- "EXISTS"
  27. le <- "<="
  28. ge <- ">="
  29. l <- "<"
  30. g <- ">"