-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpocql.lark
39 lines (33 loc) · 1.13 KB
/
pocql.lark
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
?start: or_expr "."?
or_expr: and_expr (("OR"i | "UNION"i) and_expr)*
and_expr: expr (("AND"i | ";") expr)*
expr: group | fact | not_fact | some_fact
group: "(" or_expr ")"
fact: predicate compound_object
not_fact: ("NOT"i | "!") ((predicate unary_object) | unary_object)
some_fact: TERM | STRING
predicate: TERM
compound_object: unary_object | object_group
unary_object: negated_object | operator_object | TERM | STRING
operator_object: operator compound_object
operator: GTE | LTE | NEQ | GT | LT | EQ | LIKE
object_group: "(" (object_and_group | object_or_group | objects | unary_object) ")"
object_and_group: unary_object (("AND"i | ",") (object_and_group | unary_object))
object_or_group: unary_object (("OR"i | "|") (object_or_group | unary_object))
objects: unary_object (objects | unary_object)
negated_object: ("NOT"i | "!") unary_object
GTE: ">="
LTE: "<="
NEQ: "!="
GT: ">"
LT: "<"
EQ: "="
LIKE: "~"
TERM: (/[^"'();, \n\r\t]/)+
STRING: "\"" (ESC | SAFECODEPOINT)* "\""
ESC: "\\" (/["\\\/bfnrt]/ | UNICODE)
UNICODE: "u" HEX HEX HEX HEX
HEX: /[0-9a-fA-F]/
SAFECODEPOINT: /[^"\\\n\r]/
WS: "\u0020" | "\u0009" | "\u000A" | "\u000D"
%ignore WS