forked from ijprest/keyboard-layout-editor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jsonl.grammar.js
87 lines (68 loc) · 3.07 KB
/
jsonl.grammar.js
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
86
//
// compile with:
// node jsonl_grammar.js > js/jsonl.js
// uglify js/jsonl.js > js/jsonl.min.js
//
var Generator = require("/jison/lib/jison").Generator;
exports.grammar = {
"comment": "ECMA-262 5th Edition, 15.12.1 The JSON Grammar. Parses JSON strings into objects. This parser supports a 'lenient' version of JSON that doesn't require quotes around identifiers.",
"author": "Zach Carter; Ian Prest",
"lex": {
"macros": {
"digit": "[0-9]",
"esc": "\\\\",
"int": "-?(?:[0-9]|[1-9][0-9]+)",
"exp": "(?:[eE][-+]?[0-9]+)",
"frac": "(?:\\.[0-9]+)"
},
"rules": [
["\\s+", "/* skip whitespace */"],
["{int}{frac}?{exp}?\\b", "return 'NUMBER';"],
["\"(?:{esc}[\"bfnrt/{esc}]|{esc}u[a-fA-F0-9]{4}|[^\"{esc}]|\\(|\\))*\"", "yytext = eval(yytext); return 'STRING';"],
["\\{", "return '{'"],
["\\}", "return '}'"],
["\\[", "return '['"],
["\\]", "return ']'"],
[",", "return ','"],
[":", "return ':'"],
["true\\b", "return 'TRUE'"],
["false\\b", "return 'FALSE'"],
["null\\b", "return 'NULL'"],
["[_a-zA-Z][_a-zA-Z0-9]*", "return 'IDENTIFIER'" ]
]
},
"tokens": "STRING NUMBER { } [ ] , : TRUE FALSE NULL IDENTIFIER",
"start": "JSONText",
"bnf": {
"JSONString": [[ "STRING", "$$ = yytext;" ]],
"JSONIdentifier": [[ "STRING", "$$ = yytext;" ],
[ "IDENTIFIER", "$$ = yytext;" ]],
"JSONNumber": [[ "NUMBER", "$$ = Number(yytext);" ]],
"JSONNullLiteral": [[ "NULL", "$$ = null;" ]],
"JSONBooleanLiteral": [[ "TRUE", "$$ = true;" ],
[ "FALSE", "$$ = false;" ]],
"JSONText": [[ "JSONValue", "return $$ = $1;" ]],
"JSONValue": [[ "JSONNullLiteral", "$$ = $1;" ],
[ "JSONBooleanLiteral", "$$ = $1;" ],
[ "JSONString", "$$ = $1;" ],
[ "JSONNumber", "$$ = $1;" ],
[ "JSONObject", "$$ = $1;" ],
[ "JSONArray", "$$ = $1;" ]],
"JSONObject": [[ "{ }", "$$ = {};" ],
[ "{ JSONMemberList }", "$$ = $2;" ]],
"JSONMember": [[ "JSONIdentifier : 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);" ]]
}
};
var options = {type: "slr", moduleType: "commonjs", moduleName: "jsonl"};
exports.main = function main (args) {
var code = new Generator(exports.grammar, options).generate();
console.log(code);
};
if (require.main === module)
exports.main();