-
Notifications
You must be signed in to change notification settings - Fork 25
/
grammar.ebnf
98 lines (91 loc) · 2.23 KB
/
grammar.ebnf
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
Pipeline ::=
(
(
PropertyName |
"#" ElementId |
"@" ComponentLabel |
ArrayExpression |
ObjectExpression |
"(" Expression ")"
)
(
"." Transform |
"[" Expression "]"
)*
(
".*" |
"[*]" |
)
)?
Transform ::=
(
PropertyName
) |
(
"(" Expression ")" |
ArrayExpression |
ObjectExpression
) |
(
(
"flatten" |
"reversed" |
"enumerate" |
"sum" |
"average"
)
(
"()" |
"{" Expression "}"
)
) |
(
(
"map" |
"filter" |
"some" |
"every" |
"sorted"
)
(
"(" Expression ")" |
"{" Expression ")"
)
) |
"has(" Expression ")" |
"view(" Expression ", " Expression ")"
ArrayExpression ::=
"[" ( Expression (", " Expression )* )? "]"
ObjectExpression ::=
"{"
(
( PropertyName ": " Expression )
( ", " PropertyName ": " Expression )*
)?
"}"
UnaryExpression ::=
( "+" | "-" | "!" )? Pipeline
ExponentialExpression ::=
UnaryExpression ( ( "**" | "//" | "%%" ) UnaryExpression )*
MultiplicativeExpression ::=
ExponentialExpression
( ( "*" | "/" | "%" | "rem" ) ExponentialExpression )*
ArithmeticExpression ::=
MultiplicativeExpression
( ( "+" | "-" ) MultiplicativeExpression )*
RelationalExpression ::=
ArithmeticExpression
( ( "==" | "<" | "<=" | ">" | ">=" ) ArithmeticExpression )?
LogicalIntersectionExpression ::=
RelationalExpression ( "&&" LogicalIntersectionExpression )?
LogicalUnionExpression ::=
LogicalIntersectionExpression ( "||" LogicalUnionExpression )?
ConditionalExpression ::=
LogicalUnionExpression ( "?" Expression ":" Expression )?
Expression ::= ConditionalExpression
Literal ::= NumberLiteral | StringLiteral
NumberLiteral ::= [0-9][1-9]* ( '.' [0-9]+ )?
StringLiteral ::= "'" ( NonQuoteChar | "\" QuoteChar )* "'"
PropertyName ::= [a-zA-Z0-9]+
ElementId ::= [a-zA-Z0-9]+
ComponentLabel ::= [a-zA-Z0-9]+