56 lines
1.1 KiB
EBNF
56 lines
1.1 KiB
EBNF
|
Policy ::=
|
||
|
RepStmt, [RepStmt],
|
||
|
CbtStmt?,
|
||
|
[SelectStmt],
|
||
|
[FilterStmt],
|
||
|
;
|
||
|
|
||
|
RepStmt ::=
|
||
|
'REP', Number1, (* number of object replicas *)
|
||
|
('AS', Ident)? (* optional selector name *)
|
||
|
;
|
||
|
|
||
|
CbtStmt ::= 'CBF', Number1 (* container backup factor *)
|
||
|
;
|
||
|
|
||
|
SelectStmt ::=
|
||
|
'SELECT', Number1, (* number of nodes to select without container backup factor *)
|
||
|
('IN', Clause?, Ident)?, (* bucket name *)
|
||
|
FROM, (Ident | '*'), (* filter reference or whole netmap *)
|
||
|
('AS', Ident)? (* optional selector name *)
|
||
|
;
|
||
|
|
||
|
Clause ::=
|
||
|
'SAME' (* nodes from the same bucket *)
|
||
|
| 'DISTINCT' (* nodes from distinct buckets *)
|
||
|
;
|
||
|
|
||
|
FilterStmt ::=
|
||
|
'FILTER', AndChain, ['OR', AndChain],
|
||
|
'AS', Ident (* obligatory filter name *)
|
||
|
;
|
||
|
|
||
|
AndChain ::=
|
||
|
Expr, ['AND', Expr]
|
||
|
;
|
||
|
|
||
|
Expr ::=
|
||
|
'@' Ident (* filter reference *)
|
||
|
| Key, Op, Value (* attribute filter *)
|
||
|
;
|
||
|
|
||
|
Op ::= 'EQ' | 'NE' | 'GE' | 'GT' | 'LT' | 'LE'
|
||
|
;
|
||
|
|
||
|
Key ::= Ident | String
|
||
|
;
|
||
|
|
||
|
Value ::= Ident | Number | String
|
||
|
;
|
||
|
|
||
|
Number1 ::= Digit1 [Digit];
|
||
|
Number ::= Digit [Digit];
|
||
|
|
||
|
Digit1 ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ;
|
||
|
Digit ::= '0' | Digit1;
|