Files
tuliprox/src/filter.pest
T
2022-04-04 18:08:52 +02:00

20 lines
608 B
Plaintext

field = { "Group" | "Title" | "Name" | "Url" }
and = {"AND" | "and"}
or = {"OR" | "or"}
not = { "NOT" | "not" }
lparen = { "(" }
rparen = { ")" }
regexp_op = _{ "~" }
regexp = @{ "\"" ~ ( "\\\"" | (!"\"" ~ ANY) )* ~ "\"" }
value = _{ regexp }
operator = _{ regexp_op }
match_comparison = _{ field ~ operator ~ value }
predicate = _{ match_comparison }
bool_test = _{ predicate | lparen ~ condition ~ rparen }
bool_factor = _{ not? ~ bool_test }
bool_term = _{ bool_factor ~ (and ~ bool_factor)* }
condition = _{ bool_term ~ (or ~ bool_term)* }
main = _{ SOI ~ condition ~ EOI }
WHITESPACE = _{ " " | "\t" }