Pg:
Statements ;
Statements: Statement+ ;
Statement:
Edge
| Node ;
Node: "(" NodeId LabelsRecord ")" ;
Edge:
// directed
// | undirected
// ;
// directed:
"(" source=IDENTIFIER ")" "-" "(" EdgeId? LabelsRecord ")" "->" "(" target=IDENTIFIER ")" ;
NodeId:
Id ;
EdgeId:
Id ;
Id:
IDENTIFIER {shift};
LabelsRecord:
Labels? Record? ;
Labels:
OPEN_CURLY identifier+[COMMA] CLOSE_CURLY;
Record:
OPENSQUAREBRACKET Properties CLOSESQUAREBRACKET ;
Properties: Property+[COMMA];
Property:
key ":" Values ;
key:
identifier ;
Values: SingleValue
| OPENSQUAREBRACKET ListValues CLOSESQUAREBRACKET {ListValue}
;
ListValues: SingleValue*[COMMA] ;
SingleValue:
QUOTED_STRING {StringValue}
| NUMBER {NumberValue}
| DATE QUOTED_STRING {DateValue}
| BOOL {BooleanValue}
;
BOOL:
TRUE | FALSE ;
identifier:
IDENTIFIER
| QUOTED_STRING
;
// Productions for comments
Layout: LayoutItem*;
LayoutItem: WS | Comment;
Comment: '/*' Corncs '*/' | CommentLine;
Corncs: Cornc*;
Cornc: Comment | NotComment | WS;
terminals
// Terminals for comments
WS: /\s+/;
CommentLine: /\/\/.*/;
NotComment: /((\*[^\/])|[^\s*\/]|\/[^\*])+/;
START_COMMENT: '/*';
END_COMMENT: '*/';
QUOTED_STRING: /"((\\")|[^"])*"/ ;
IDENTIFIER:
/\w+/ ;
SEMICOLON:
";" ;
CREATE:
"CREATE" ;
NODE:
"NODE" ;
EDGE:
"EDGE" ;
GRAPH:
"GRAPH" ;
TYPE:
"TYPE" ;
OPEN_PAREN:
"(" ;
CLOSE_PAREN:
")" ;
OPEN_ARROW:
"-[" ;
CLOSE_ARROW:
"]->" ;
OPEN_CURLY:
"{" ;
CLOSE_CURLY:
"}" ;
COLON:
":" ;
COMMA:
"," ;
BAR:
"|" ;
PLUS:
"+" ;
STAR:
"*" ;
QUESTION:
"?" ;
INTEGER_NAME:
"INTEGER" ;
STRING_NAME:
"STRING" ;
DATE_NAME:
"DATE" ;
NUMBER:
/\d+/ ;
OPTIONAL:
"OPTIONAL" ;
QUOTE:
'\"' ;
AMPERSAND:
"&" ;
OPENSQUAREBRACKET:
"[" ;
CLOSESQUAREBRACKET:
"]" ;
START_ARROW:
"-" ;
END_ARROW:
"->" ;
TRUE:
"TRUE" ;
FALSE:
"FALSE" ;
DATE:
"DATE" ;