Skip to content

Commit 10a9683

Browse files
committed
Add example of MATCH grammar snippet and railroad diagram
1 parent 6b780b6 commit 10a9683

File tree

3 files changed

+786
-0
lines changed

3 files changed

+786
-0
lines changed

modules/ROOT/examples/MATCH.bnf

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
# MATCH clause
2+
3+
<simple match statement> ::=
4+
"MATCH" <graph pattern>
5+
6+
<graph pattern> ::=
7+
[ <match mode> ] <path pattern> [ { "," <path pattern> }... ] [ <graph pattern where clause> ]
8+
9+
<path pattern> ::=
10+
[ <binding variable> "=" ] [ <path pattern prefix> ] <path pattern expression>
11+
12+
<path pattern prefix> ::=
13+
"ALL" [ "PATH" | "PATHS" ]
14+
| "ANY" [ <unsigned decimal integer> | "$" <parameter name> ] [ "PATH" | "PATHS" ]
15+
| "ALL" "SHORTEST" [ "PATH" | "PATHS" ]
16+
| "ANY" "SHORTEST" [ "PATH" | "PATHS" ]
17+
| "SHORTEST" { <unsigned decimal integer> | "$" <parameter name> } [ "PATH" | "PATHS" ]
18+
| "SHORTEST" [ <unsigned decimal integer> | "$" <parameter name> ] [ "PATH" | "PATHS" ] { "GROUP" | "GROUPS" }
19+
20+
<path pattern expression> ::=
21+
<path term>
22+
| <legacy shortest path pattern>
23+
24+
<path term> ::=
25+
<path factor>
26+
| <path term> <path factor>
27+
28+
<path factor> ::=
29+
<path primary>
30+
| <path primary> <graph pattern quantifier>
31+
| <path primary> "?"
32+
33+
<path primary> ::=
34+
<node pattern>
35+
| <relationship pattern>
36+
| "(" [ <binding variable> "=" ] <path pattern expression> [ "WHERE" <value expression> ] ")"
37+
38+
<node pattern> ::=
39+
"(" [ <binding variable> [ <is node label expression> ] [ <element pattern predicate> ] | <is node label expression> [ <element pattern predicate> ] | <element pattern predicate> ] ")"
40+
41+
<element pattern predicate> ::=
42+
"WHERE" <value expression>
43+
| <element property specification>
44+
| "$" <parameter name>
45+
46+
<element property specification> ::=
47+
"{" <property key value pair list> "}"
48+
49+
<property key value pair list> ::=
50+
<property key value pair> [ { "," <property key value pair> }... ]
51+
52+
<property key value pair> ::=
53+
<property name> ":" <value expression>
54+
55+
<relationship pattern> ::=
56+
"<" "-" [ "[" [ <relationship pattern filler> ] "]" ] "-"
57+
| "-" [ "[" [ <relationship pattern filler> ] "]" ] "-" ">"
58+
| "<" "-" [ "[" [ <relationship pattern filler> ] "]" ] "-" ">"
59+
| "-" [ "[" [ <relationship pattern filler> ] "]" ] "-"
60+
61+
<relationship pattern filler> ::=
62+
<binding variable> [ <is relationship label expression> ] [ <path length> ] [ <element pattern predicate> ]
63+
| <is relationship label expression> [ <path length> ] [ <element pattern predicate> ]
64+
| <path length> [ <element pattern predicate> ]
65+
| <element pattern predicate>
66+
67+
<path length> ::=
68+
"*" [ [ <unsigned decimal integer> ] ".." [ <unsigned decimal integer> ] | <unsigned decimal integer> ]
69+
70+
<graph pattern quantifier> ::=
71+
"*"
72+
| "+"
73+
| "{" <unsigned integer> "}"
74+
| "{" [ <unsigned decimal integer> ] "," [ <unsigned decimal integer> ] "}"
75+
76+
<is node label expression> ::=
77+
":" <node label expression legacy>
78+
| { ":" | "IS" } <label expression>
79+
80+
<is relationship label expression> ::=
81+
":" <relationship label expression legacy>
82+
| { ":" | "IS" } <label expression>
83+
84+
<label expression> ::=
85+
<label term>
86+
| <label expression> "|" <label term>
87+
88+
<label term> ::=
89+
<label factor>
90+
| <label term> "&" <label factor>
91+
92+
<label factor> ::=
93+
<label primary>
94+
| <label negation>
95+
96+
<label negation> ::=
97+
"!" <label primary>
98+
99+
<label primary> ::=
100+
<label name>
101+
| "(" <label expression> ")"
102+
| "%"
103+
| "$" [ "ALL" | "ANY" ] "(" <value expression> ")"
104+
105+
<value expression> ::=
106+
<boolean value expression>
107+
108+
<boolean value expression> ::=
109+
<boolean term xor>
110+
| <boolean value expression> "OR" <boolean term xor>
111+
112+
<boolean term xor> ::=
113+
<boolean term>
114+
| <boolean term xor> "XOR" <boolean term>
115+
116+
<boolean term> ::=
117+
<boolean factor>
118+
| <boolean term> "AND" <boolean factor>
119+
120+
<boolean factor> ::=
121+
[ { "NOT" }... ] <boolean primary>
122+
123+
<boolean primary> ::=
124+
<pattern expression>
125+
| <predicate>
126+
127+
<pattern expression> ::=
128+
<node pattern> { <relationship pattern> <node pattern> }...
129+
130+
<label name> ::=
131+
link:/cypher-manual/25/syntax/naming/[<identifier>]
132+
133+
<property name> ::=
134+
link:/cypher-manual/25/syntax/naming/[<identifier>]
135+
136+
<binding variable> ::=
137+
link:/cypher-manual/25/syntax/naming/[<identifier>]

0 commit comments

Comments
 (0)