-
Notifications
You must be signed in to change notification settings - Fork 0
/
JSONv.g4
80 lines (62 loc) · 971 Bytes
/
JSONv.g4
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
grammar JSONv;
/** Taken from "The Definitive ANTLR 4 Reference" by Terence Parr */
// Derived from http://json.org
jsonv
: value
;
jsonObject
: '{' pair (',' pair)* '}'
| '{' '}'
;
pair
: string ':' value
;
jsonArray
: '[' value (',' value)* ']'
| '[' ']'
;
unbound: UNBOUND;
true: 'true';
false: 'false';
null: 'null';
number: NUMBER;
string: STRING;
value
: string
| number
| jsonObject
| jsonArray
| unbound
| true
| false
| null
;
STRING
: '"' (ESC | ~ ["\\])* '"'
;
UNBOUND
: [a-zA-Z] [a-zA-Z0-9]*
;
fragment ESC
: '\\' (["\\/bfnrt] | UNICODE)
;
fragment UNICODE
: 'u' HEX HEX HEX HEX
;
fragment HEX
: [0-9a-fA-F]
;
NUMBER
: '-'? INT '.' [0-9] + EXP? | '-'? INT EXP | '-'? INT
;
fragment INT
: '0' | [1-9] [0-9]*
;
// no leading zeros
fragment EXP
: [Ee] [+\-]? INT
;
// \- since - means "range" inside [...]
WS
: [ \t\n\r] + -> skip
;