87 lines
1.4 KiB
Plaintext
87 lines
1.4 KiB
Plaintext
%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);}
|
|
;
|
|
|