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
81
82
83
84
85
| %start JSONText
|
| /*
| ECMA-262 5th Edition, 15.12.1 The JSON Grammar.
| */
|
|
| %%
|
| JSONString
| : STRING
| { // replace escaped characters with actual character
| $$ = yytext.replace(/\\(\\|")/g, "$"+"1")
| .replace(/\\n/g,'\n')
| .replace(/\\r/g,'\r')
| .replace(/\\t/g,'\t')
| .replace(/\\v/g,'\v')
| .replace(/\\f/g,'\f')
| .replace(/\\b/g,'\b');
| }
| ;
|
| JSONNumber
| : NUMBER
| {$$ = Number(yytext);}
| ;
|
| JSONNullLiteral
| : NULL
| {$$ = null;}
| ;
|
| JSONBooleanLiteral
| : TRUE
| {$$ = true;}
| | FALSE
| {$$ = false;}
| ;
|
| JSONText
| : JSONValue EOF
| {return $$ = $1;}
| ;
|
| JSONValue
| : JSONNullLiteral
| | JSONBooleanLiteral
| | JSONString
| | JSONNumber
| | JSONObject
| | JSONArray
| ;
|
| JSONObject
| : '{' '}'
| {{$$ = {};}}
| | '{' JSONMemberList '}'
| {$$ = $2;}
| ;
|
| JSONMember
| : JSONString ':' JSONValue
| {$$ = [$1, $3];}
| ;
|
| JSONMemberList
| : JSONMember
| {{$$ = {}; $$[$1[0]] = $1[1];}}
| | JSONMemberList ',' JSONMember
| {$$ = $1; $1[$3[0]] = $3[1];}
| ;
|
| JSONArray
| : '[' ']'
| {$$ = [];}
| | '[' JSONElementList ']'
| {$$ = $2;}
| ;
|
| JSONElementList
| : JSONValue
| {$$ = [$1];}
| | JSONElementList ',' JSONValue
| {$$ = $1; $1.push($3);}
| ;
|
|