diff --git a/frameworks/nearley/README.md b/frameworks/nearley/README.md new file mode 100644 index 0000000..1bb24cc --- /dev/null +++ b/frameworks/nearley/README.md @@ -0,0 +1,14 @@ +--- +permalink: /frameworks/nearley/ +layout: single +--- + +Nearley +======= + +[Nearley](https://nearley.js.org/) . + +~~~ +npm install nearley +npx nearleyc grammar/01-basic.ne -o js/01-basic.js +~~~ diff --git a/frameworks/nearley/grammar/01-basic.ne b/frameworks/nearley/grammar/01-basic.ne new file mode 100644 index 0000000..1c44d60 --- /dev/null +++ b/frameworks/nearley/grammar/01-basic.ne @@ -0,0 +1,2 @@ +main -> (statement "\n"):+ +statement -> "foo" | "bar" \ No newline at end of file diff --git a/frameworks/nearley/js/01-basic-app.js b/frameworks/nearley/js/01-basic-app.js new file mode 100644 index 0000000..f21fbbc --- /dev/null +++ b/frameworks/nearley/js/01-basic-app.js @@ -0,0 +1,8 @@ +// Create a Parser object from our grammar. +const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); + +// Parse something! +parser.feed("foo\n"); + +// parser.results is an array of possible parsings. +console.log(JSON.stringify(parser.results)); // [[[[["foo"],"\n"]]]] \ No newline at end of file diff --git a/frameworks/nearley/js/01-basic.js b/frameworks/nearley/js/01-basic.js new file mode 100644 index 0000000..acab160 --- /dev/null +++ b/frameworks/nearley/js/01-basic.js @@ -0,0 +1,25 @@ +// Generated automatically by nearley, version 2.20.1 +// http://github.com/Hardmath123/nearley +(function () { +function id(x) { return x[0]; } +var grammar = { + Lexer: undefined, + ParserRules: [ + {"name": "main$ebnf$1$subexpression$1", "symbols": ["statement", {"literal":"\n"}]}, + {"name": "main$ebnf$1", "symbols": ["main$ebnf$1$subexpression$1"]}, + {"name": "main$ebnf$1$subexpression$2", "symbols": ["statement", {"literal":"\n"}]}, + {"name": "main$ebnf$1", "symbols": ["main$ebnf$1", "main$ebnf$1$subexpression$2"], "postprocess": function arrpush(d) {return d[0].concat([d[1]]);}}, + {"name": "main", "symbols": ["main$ebnf$1"]}, + {"name": "statement$string$1", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, + {"name": "statement", "symbols": ["statement$string$1"]}, + {"name": "statement$string$2", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, + {"name": "statement", "symbols": ["statement$string$2"]} +] + , ParserStart: "main" +} +if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { + module.exports = grammar; +} else { + window.grammar = grammar; +} +})(); diff --git a/frameworks/nearley/js/index.html b/frameworks/nearley/js/index.html new file mode 100644 index 0000000..a066535 --- /dev/null +++ b/frameworks/nearley/js/index.html @@ -0,0 +1,11 @@ + + + + Basic Example + + + + + + + diff --git a/frameworks/nearley/package-lock.json b/frameworks/nearley/package-lock.json new file mode 100644 index 0000000..c436101 --- /dev/null +++ b/frameworks/nearley/package-lock.json @@ -0,0 +1,120 @@ +{ + "name": "nearley", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "dependencies": { + "nearley": "^2.20.1" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, + "node_modules/moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "node_modules/nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "dependencies": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + }, + "bin": { + "nearley-railroad": "bin/nearley-railroad.js", + "nearley-test": "bin/nearley-test.js", + "nearley-unparse": "bin/nearley-unparse.js", + "nearleyc": "bin/nearleyc.js" + }, + "funding": { + "type": "individual", + "url": "https://nearley.js.org/#give-to-nearley" + } + }, + "node_modules/railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "node_modules/randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "dependencies": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + } + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==" + }, + "moo": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", + "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==" + }, + "nearley": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", + "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6" + } + }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==" + }, + "randexp": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", + "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", + "requires": { + "discontinuous-range": "1.0.0", + "ret": "~0.1.10" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + } + } +} diff --git a/frameworks/nearley/package.json b/frameworks/nearley/package.json new file mode 100644 index 0000000..4109715 --- /dev/null +++ b/frameworks/nearley/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "nearley": "^2.20.1" + } +}