Expression
EBNF
Expression = OrExpression ;
OrExpression = XorExpression, { SP, (O,R), SP, XorExpression } ;
XorExpression = AndExpression, { SP, (X,O,R), SP, AndExpression } ;
AndExpression = NotExpression, { SP, (A,N,D), SP, NotExpression } ;
NotExpression = { (N,O,T), [SP] }, ComparisonExpression ;
ComparisonExpression = AddOrSubtractExpression, { [SP], PartialComparisonExpression } ;
AddOrSubtractExpression = MultiplyDivideModuloExpression, { ([SP], '+', [SP], MultiplyDivideModuloExpression) | ([SP], '-', [SP], MultiplyDivideModuloExpression) } ;
MultiplyDivideModuloExpression = PowerOfExpression, { ([SP], '*', [SP], PowerOfExpression) | ([SP], '/', [SP], PowerOfExpression) | ([SP], '%', [SP], PowerOfExpression) } ;
PowerOfExpression = UnaryAddOrSubtractExpression, { [SP], '^', [SP], UnaryAddOrSubtractExpression } ;
UnaryAddOrSubtractExpression = { ('+' | '-'), [SP] }, StringListNullOperatorExpression ;
StringListNullOperatorExpression = PropertyOrLabelsExpression, { ([SP], '[', Expression, ']') | ([SP], '[', [Expression], '..', [Expression], ']') | ((([SP], '=~') | (SP, (I,N)) | (SP, (S,T,A,R,T,S), SP, (W,I,T,H)) | (SP, (E,N,D,S), SP, (W,I,T,H)) | (SP, (C,O,N,T,A,I,N,S))), [SP], PropertyOrLabelsExpression) | (SP, (I,S), SP, (N,U,L,L)) | (SP, (I,S), SP, (N,O,T), SP, (N,U,L,L)) } ;
PropertyOrLabelsExpression = Atom, { [SP], (PropertyLookup | NodeLabels) } ;
NodeLabels = NodeLabel, { [SP], NodeLabel } ;
NodeLabel = ':', [SP], LabelName ;
LabelName = SchemaName ;
PartialComparisonExpression = ('=', [SP], AddOrSubtractExpression)
| ('<>', [SP], AddOrSubtractExpression)
| ('<', [SP], AddOrSubtractExpression)
| ('>', [SP], AddOrSubtractExpression)
| ('<=', [SP], AddOrSubtractExpression)
| ('>=', [SP], AddOrSubtractExpression)
;
Referenced from