drivers/golang/parser/Age.g4 (103 lines of code) (raw):
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/* Apache AGE output data grammar */
grammar Age;
ageout
: value
| vertex
| edge
| path
;
vertex
: properties KW_VERTEX
;
edge
: properties KW_EDGE
;
path
: '[' vertex (',' edge ',' vertex)* ']' KW_PATH
;
//Keywords
KW_VERTEX : '::vertex';
KW_EDGE : '::edge';
KW_PATH : '::path';
KW_NUMERIC : '::numeric';
// Common Values Rule
value
: STRING
| NUMBER
| NUMERIC
| FLOAT_EXPR
| BOOL
| NULL
| properties
| arr
;
properties
: '{' pair (',' pair)* '}'
| '{' '}'
;
pair
: STRING ':' value
;
arr
: '[' value (',' value)* ']'
| '[' ']'
;
STRING
: '"' (ESC | SAFECODEPOINT)* '"'
;
BOOL
: 'true'|'false'
;
NULL
: 'null'
;
fragment ESC
: '\\' (["\\/bfnrt] | UNICODE)
;
fragment UNICODE
: 'u' HEX HEX HEX HEX
;
fragment HEX
: [0-9a-fA-F]
;
fragment SAFECODEPOINT
: ~ ["\\\u0000-\u001F]
;
NUMBER
: '-'? INT ('.' [0-9] +)? EXP?
;
FLOAT_EXPR
: 'NaN' | '-Infinity' | 'Infinity'
;
NUMERIC
: '-'? INT ('.' [0-9] +)? EXP? KW_NUMERIC
;
fragment INT
: '0' | [1-9] [0-9]*
;
// no leading zeros
fragment EXP
: [Ee] [+\-]? INT
;
// \- since - means "range" inside [...]
WS
: [ \t\n\r] + -> skip
;