blob: 7ad184ec5ff02e28c4c5f983ced1f6066a2a63ac [file] [log] [blame]
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
;