aboutsummaryrefslogtreecommitdiffstats
path: root/aai-traversal/src/main/resources/antlr4/org/onap/aai/AAIDsl.g4
blob: 3ba370c6104c1549e0e58cdacaa95a752ca48cf3 (plain)
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
/**
 * Define a parser grammar called AAIDsl
 */
grammar AAIDsl;

aaiquery: startStatement limit?;

startStatement: (vertex ) (traversal)* ;
nestedStatement: (vertex|unionVertex ) (traversal)* ;

vertex: label store? (filter)?;

traversal:  (edge (vertex|unionVertex));

filter:  (propertyFilter)* whereFilter?;
propertyFilter: (not? '(' key (',' (key | num | bool))* ')');
bool: BOOL;

whereFilter: (not? '(' edge nestedStatement ')' );

unionVertex: '[' ( (edgeFilter)* nestedStatement ( comma ( (edgeFilter)* nestedStatement))*) ']' store?;

comma: ',';
edge: TRAVERSE (edgeFilter)*;
edgeFilter: '(' key (',' key )* ')';

num: NUM;
limit: LIMIT num;
label: (ID | NUM )+;
key: KEY;

store: STORE;
not: NOT;

BOOL: 'true'|'TRUE'|'false'|'FALSE';
LIMIT: 'LIMIT'|'limit';
NUM: (DIGIT)+;

/*NODE: (ID | NUM )+;*/
fragment ESCAPED_QUOTE : '\\' '\'';
KEY : '\'' (ESCAPED_QUOTE | ~[\r\n] )*? '\'';

AND: [&];

STORE: [*];

OR: [|];

TRAVERSE: [>] ;

EQUAL: [=];

NOT: [!];

fragment LOWERCASE  : [a-z] ;
fragment UPPERCASE  : [A-Z] ;
fragment DIGIT      : [0-9] ;
fragment  ESC : '\\' . ;
fragment ID_SPECIALS: [-:_];

ID
   :  ( LOWERCASE | UPPERCASE  | DIGIT | ID_SPECIALS)
   ;

WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines