blob: 1d75c1c3dcbead67f529ed2f2467fdc84b168aa6 [file] [log] [blame]
/*
* 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.
*/
grammar Agtype;
agType
: agValue EOF
;
agValue
: value typeAnnotation?
;
value
: STRING #StringValue
| INTEGER #IntegerValue
| floatLiteral #FloatValue
| 'true' #TrueBoolean
| 'false' #FalseBoolean
| 'null' #NullValue
| obj #ObjectValue
| array #ArrayValue
;
obj
: '{' pair (',' pair)* '}'
| '{' '}'
;
pair
: STRING ':' agValue
;
array
: '[' agValue (',' agValue)* ']'
| '[' ']'
;
typeAnnotation
: '::' IDENT
;
IDENT
: [A-Z_a-z][$0-9A-Z_a-z]*
;
STRING
: '"' (ESC | SAFECODEPOINT)* '"'
;
fragment ESC
: '\\' (["\\/bfnrt] | UNICODE)
;
fragment UNICODE
: 'u' HEX HEX HEX HEX
;
fragment HEX
: [0-9a-fA-F]
;
fragment SAFECODEPOINT
: ~ ["\\\u0000-\u001F]
;
INTEGER
: '-'? INT
;
fragment INT
: '0' | [1-9] [0-9]*
;
floatLiteral
: RegularFloat
| ExponentFloat
| '-'? 'Infinity'
| 'NaN'
;
RegularFloat
: '-'? INT DECIMAL
;
ExponentFloat
: '-'? INT DECIMAL? SCIENTIFIC
;
fragment DECIMAL
: '.' [0-9]+
;
fragment SCIENTIFIC
: [Ee][+-]? [0-9]+
;
WS
: [ \t\n\r] + -> skip
;