diff options
| author | Kumar Priyansh <[email protected]> | 2019-01-19 12:37:14 +0530 |
|---|---|---|
| committer | Kumar Priyansh <[email protected]> | 2019-01-19 12:37:14 +0530 |
| commit | dcdfc94cb39dfe2c39925a0145ffa45e2d061c30 (patch) | |
| tree | 4f6379d955555b298c0e7b83a67e264240ee5614 /cordova/node_modules/pegjs/examples/json.pegjs | |
| parent | 76f7b3678d3f1ff99c3935a774d420453b0c3cb9 (diff) | |
| download | WeatherApp-dcdfc94cb39dfe2c39925a0145ffa45e2d061c30.tar.xz WeatherApp-dcdfc94cb39dfe2c39925a0145ffa45e2d061c30.zip | |
Initial Upload via GIT
Diffstat (limited to 'cordova/node_modules/pegjs/examples/json.pegjs')
| -rw-r--r-- | cordova/node_modules/pegjs/examples/json.pegjs | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/cordova/node_modules/pegjs/examples/json.pegjs b/cordova/node_modules/pegjs/examples/json.pegjs new file mode 100644 index 0000000..d0ba9f4 --- /dev/null +++ b/cordova/node_modules/pegjs/examples/json.pegjs @@ -0,0 +1,132 @@ +/* + * JSON Grammar + * ============ + * + * Based on the grammar from RFC 7159 [1]. + * + * Note that JSON is also specified in ECMA-262 [2], ECMA-404 [3], and on the + * JSON website [4] (somewhat informally). The RFC seems the most authoritative + * source, which is confirmed e.g. by [5]. + * + * [1] http://tools.ietf.org/html/rfc7159 + * [2] http://www.ecma-international.org/publications/standards/Ecma-262.htm + * [3] http://www.ecma-international.org/publications/standards/Ecma-404.htm + * [4] http://json.org/ + * [5] https://www.tbray.org/ongoing/When/201x/2014/03/05/RFC7159-JSON + */ + +/* ----- 2. JSON Grammar ----- */ + +JSON_text + = ws value:value ws { return value; } + +begin_array = ws "[" ws +begin_object = ws "{" ws +end_array = ws "]" ws +end_object = ws "}" ws +name_separator = ws ":" ws +value_separator = ws "," ws + +ws "whitespace" = [ \t\n\r]* + +/* ----- 3. Values ----- */ + +value + = false + / null + / true + / object + / array + / number + / string + +false = "false" { return false; } +null = "null" { return null; } +true = "true" { return true; } + +/* ----- 4. Objects ----- */ + +object + = begin_object + members:( + head:member + tail:(value_separator m:member { return m; })* + { + var result = {}, i; + + result[head.name] = head.value; + + for (i = 0; i < tail.length; i++) { + result[tail[i].name] = tail[i].value; + } + + return result; + } + )? + end_object + { return members !== null ? members: {}; } + +member + = name:string name_separator value:value { + return { name: name, value: value }; + } + +/* ----- 5. Arrays ----- */ + +array + = begin_array + values:( + head:value + tail:(value_separator v:value { return v; })* + { return [head].concat(tail); } + )? + end_array + { return values !== null ? values : []; } + +/* ----- 6. Numbers ----- */ + +number "number" + = minus? int frac? exp? { return parseFloat(text()); } + +decimal_point = "." +digit1_9 = [1-9] +e = [eE] +exp = e (minus / plus)? DIGIT+ +frac = decimal_point DIGIT+ +int = zero / (digit1_9 DIGIT*) +minus = "-" +plus = "+" +zero = "0" + +/* ----- 7. Strings ----- */ + +string "string" + = quotation_mark chars:char* quotation_mark { return chars.join(""); } + +char + = unescaped + / escape + sequence:( + '"' + / "\\" + / "/" + / "b" { return "\b"; } + / "f" { return "\f"; } + / "n" { return "\n"; } + / "r" { return "\r"; } + / "t" { return "\t"; } + / "u" digits:$(HEXDIG HEXDIG HEXDIG HEXDIG) { + return String.fromCharCode(parseInt(digits, 16)); + } + ) + { return sequence; } + +escape = "\\" +quotation_mark = '"' +unescaped = [^\0-\x1F\x22\x5C] + +/* ----- Core ABNF Rules ----- */ + +/* See RFC 4234, Appendix B (http://tools.ietf.org/html/rfc4627). */ +DIGIT = [0-9] +HEXDIG = [0-9a-f]i |
