-
Notifications
You must be signed in to change notification settings - Fork 19
/
CCL.g4
100 lines (76 loc) · 1.58 KB
/
CCL.g4
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
98
99
100
grammar CCL;
condition: assetType 'has' expression EOF;
assetType :
simpleAssetType |
filteredAssetType;
simpleAssetType: field;
filteredAssetType: field 'with' expression;
field : Identifier;
expression:
simpleExpression |
notExpression |
inExpression;
simpleExpression:
emptyExpression |
withinExpression |
comparison |
'(' expression ')' ;
notExpression: 'not' expression;
emptyExpression: 'empty' field;
comparison: binaryComparison | timeComparison;
binaryComparison: field operator value;
timeComparison: field timeOperator (time unit | nowOperator);
timeOperator:
BeforeOperator |
AfterOperator |
YoungerOperator |
OlderOperator;
nowOperator: 'now';
time: Number;
unit:
'seconds' |
'days' |
'months';
inExpression: simpleExpression 'in' scope field;
scope:
'any' |
'all';
withinExpression: field 'within' (value ','?)+;
value:
StringLiteral |
BooleanLiteral |
Number;
operator:
EqualsOperator |
NotEqualsOperator |
LessOrEqualsThanOperator |
LessThanOperator |
MoreThanOperator |
MoreOrEqualsThanOperator |
ContainsOperator;
EqualsOperator: '==';
NotEqualsOperator: '!=';
LessOrEqualsThanOperator: '<=';
LessThanOperator: '<';
MoreThanOperator: '>';
MoreOrEqualsThanOperator: '>=';
ContainsOperator: 'contains';
BeforeOperator: 'before';
AfterOperator: 'after';
YoungerOperator: 'younger';
OlderOperator: 'older';
BooleanLiteral:
True |
False;
True: 'true';
False: 'false';
Identifier
: [a-zA-Z][a-zA-Z0-9.]*
;
Number: [0-9]+;
StringLiteral
: '"' ~('"')* '"'
;
Whitespace
: [ \t\u000C\r\n]+ -> skip
;