toql_query_parser 0.4.0

Library with parser for query parser for Toql
Documentation
// Like SQL strings 'Tim''s dog'
string = ${  "'" ~ ( "''" | (!"'" ~ ANY) )* ~  "'" }

num_u64 = @{ASCII_DIGIT+}
num_i64 = @{ "-" ~ ASCII_DIGIT+}


num_f64 = @{
    "-"?
    ~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)
    ~ ("." ~ ASCII_DIGIT*)
    ~ (^"e" ~ ("+" | "-")? ~ ASCII_DIGIT+)?
}
num_placeholder = @{"?"} // for use in query macro

value= { num_f64 | num_i64 | num_u64 |  string | num_placeholder }

filter0_name = {^"nen" | ^"eqn"}
filter1_name = {^"eq" | ^"ne" | ^"lt" | ^"gt" | ^"le" | ^"ge" | ^"lk" |^"re" }
filter2_name = {^"bw"}
filterx_name = {^"in" | ^"out" }
filterc_name = {^"fn" ~ name} 

filter0 = { filter0_name }
filter1 = { filter1_name ~ value }
filter2 = { filter2_name ~ value ~ value }
filterx = { filterx_name ~ value+ }
filterc = { filterc_name ~ value* }

field_filter = {filter0 | filter1 | filter2 | filterx |filterc }
sort = @{ ("+" | "-") ~ASCII_DIGIT* }
name =  @{ ASCII_ALPHA ~ ASCII_ALPHANUMERIC* }
field_path = @{ name ~ ("_" ~ name)* }
hidden = @{"."}
wildcard_path= @{field_path ~ "_"}
wildcard = @{ (field_path ~ "_")? ~ "*" }


field = { sort? ~ hidden? ~ field_path }
field_clause = { field ~ field_filter? }
predicate_arg =  { value+}
predicate_name = { "@" ~ field_path}
predicate_clause = { predicate_name ~ predicate_arg? }
selection_clause = { "$"  ~ selection_name? }
selection_name = { field_path }
query_placeholder = @{"{}"} // for use in query macro
clause = { field_clause | predicate_clause | selection_clause | query_placeholder |( lpar ~ expr ~ rpar) } 
separator = { "," | ";" }

lpar = @{"("}
rpar = @{")"}


expr = { (wildcard | clause ) ~ (separator ~ (wildcard | clause))*}
query = { SOI ~ expr? ~ EOI }

WHITESPACE = _{ " " }