Tabular-JSON specification
Tabular-JSON is a superset of JSON. Below, the grammer for Tabular-JSON is displayed and compared with JSON. The JSON grammer comes from the official website https://www.json.org/. The data formats are described using ANTLR v4 grammer.
JSON grammer
1
grammar JSON;
2
3
json
4
: ws value ws EOF ;
5
6
value
7
: object
8
| array
9
| STRING
10
| NUMBER
11
| BOOLEAN
12
| NULL ;
13
14
object
15
: '{' pair (',' pair)* '}'
16
| '{' ws '}' ;
17
18
pair : ws STRING ws ':' ws value ws ;
19
20
array
21
: '[' ws value ws (',' ws value ws)* ']'
22
| '[' ws ']' ;
23
24
STRING : '"' (ESC | CHAR)* '"' ;
25
26
fragment ESC : '\\' (["\\/bfnrt] | UNI) ;
27
fragment UNI : 'u' HEX HEX HEX HEX ;
28
fragment HEX : [0-9a-fA-F] ;
29
fragment CHAR : ~ ["\\\u0000-\u001F] ;
30
31
NUMBER
32
: '-'? INT ('.' [0-9]+)? EXP?
33
;
34
35
fragment INT : '0' | [1-9] [0-9]* ;
36
fragment EXP : [Ee] [+-]? [0-9]+ ;
37
38
BOOLEAN : 'true' | 'false' ;
39
NULL : 'null' ;
40
41
ws : (WHITESPACE | NEWLINE)* ;
42
43
WHITESPACE : [ \t\r] -> skip;
44
NEWLINE : '\n' ;
45
Tabular-JSON grammer
1
grammar TabularJSON;
2
3
tabularjson
4
: ws value ws EOF
5
| ws contents ws EOF ;
6
7
value
8
: object
9
| array
10
| table
11
| STRING
12
| NUMBER
13
| BOOLEAN
14
| NULL ;
15
16
object
17
: '{' pair (',' pair)* trailing? '}'
18
| '{' ws '}' ;
19
20
pair : ws STRING ws ':' ws value ws ;
21
trailing : ',' ws ;
22
23
array
24
: '[' ws value ws (',' ws value ws)* trailing? ']'
25
| '[' ws ']' ;
26
27
table : '---' wst '\n'
28
contents '\n'
29
wst '---' ;
30
31
contents : header '\n' ws rows ;
32
header : field (',' field)* ;
33
field : wst STRING wst ('.' wst STRING wst)* ;
34
rows : row ('\n' ws row)* ;
35
row : wst value wst (',' wst value wst)* ;
36
37
STRING : '"' (ESC | CHAR)* '"' ;
38
39
fragment ESC : '\\' (["\\/bfnrt] | UNI) ;
40
fragment UNI : 'u' HEX HEX HEX HEX ;
41
fragment HEX : [0-9a-fA-F] ;
42
fragment CHAR : ~ ["\\\u0000-\u001F] ;
43
44
NUMBER
45
: '-'? INT ('.' [0-9]+)? EXP?
46
| '-'? 'inf'
47
| 'nan'
48
;
49
50
fragment INT : '0' | [1-9] [0-9]* ;
51
fragment EXP : [Ee] [+-]? [0-9]+ ;
52
53
BOOLEAN : 'true' | 'false' ;
54
NULL : 'null' ;
55
56
ws : (WHITESPACE | NEWLINE)* ;
57
wst : (WHITESPACE)* ;
58
59
WHITESPACE : [ \t\r] -> skip;
60
NEWLINE : '\n' ;
61
62
LINE_COMMENT : '//' ~[\r\n]* -> skip ;
63
BLOCK_COMMENT : '/*' .*? '*/' -> skip ;
64
Tabular-JSON grammer, compared with JSON
0
grammar JSON;
1
grammar TabularJSON;
2
3
json
4
: ws value ws EOF ;
5
tabularjson
6
: ws value ws EOF
7
| ws contents ws EOF ;
8
9
value
10
: object
11
| array
12
| table
13
| STRING
14
| NUMBER
15
| BOOLEAN
16
| NULL ;
17
18
object
19
: '{' pair (',' pair)* '}'
20
: '{' pair (',' pair)* trailing? '}'
21
| '{' ws '}' ;
22
23
pair : ws STRING ws ':' ws value ws ;
24
trailing : ',' ws ;
25
26
array
27
: '[' ws value ws (',' ws value ws)* ']'
28
: '[' ws value ws (',' ws value ws)* trailing? ']'
29
| '[' ws ']' ;
30
31
table : '---' wst '\n'
32
contents '\n'
33
wst '---' ;
34
35
contents : header '\n' ws rows ;
36
header : field (',' field)* ;
37
field : wst STRING wst ('.' wst STRING wst)* ;
38
rows : row ('\n' ws row)* ;
39
row : wst value wst (',' wst value wst)* ;
40
41
STRING : '"' (ESC | CHAR)* '"' ;
42
43
fragment ESC : '\\' (["\\/bfnrt] | UNI) ;
44
fragment UNI : 'u' HEX HEX HEX HEX ;
45
fragment HEX : [0-9a-fA-F] ;
46
fragment CHAR : ~ ["\\\u0000-\u001F] ;
47
48
NUMBER
49
: '-'? INT ('.' [0-9]+)? EXP?
50
| '-'? 'inf'
51
| 'nan'
52
;
53
54
fragment INT : '0' | [1-9] [0-9]* ;
55
fragment EXP : [Ee] [+-]? [0-9]+ ;
56
57
BOOLEAN : 'true' | 'false' ;
58
NULL : 'null' ;
59
60
ws : (WHITESPACE | NEWLINE)* ;
61
wst : (WHITESPACE)* ;
62
63
WHITESPACE : [ \t\r] -> skip;
64
NEWLINE : '\n' ;
65
66
LINE_COMMENT : '//' ~[\r\n]* -> skip ;
67
BLOCK_COMMENT : '/*' .*? '*/' -> skip ;
68