diff --git a/grammar.js b/grammar.js new file mode 100644 index 0000000..e69de29 diff --git a/package-lock.json b/package-lock.json index 52d8759..8793129 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4857,6 +4857,11 @@ } } }, + "discontinuous-range": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", + "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" + }, "dns-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", @@ -10087,6 +10092,18 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, + "nearley": { + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.19.1.tgz", + "integrity": "sha512-xq47GIUGXxU9vQg7g/y1o1xuKnkO7ev4nRWqftmQrLkfnE/FjRqDaGOUakM8XHPn/6pW3bGjU2wgoJyId90rqg==", + "requires": { + "commander": "^2.19.0", + "moo": "^0.5.0", + "railroad-diagrams": "^1.0.0", + "randexp": "0.4.6", + "semver": "^5.4.1" + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -12174,6 +12191,20 @@ "performance-now": "^2.1.0" } }, + "railroad-diagrams": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", + "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" + }, + "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" + } + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", diff --git a/package.json b/package.json index 244329b..48fcadd 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ "gh-pages": "^2.2.0", "local-storage": "^2.0.0", "moo": "^0.5.1", + "nearley": "^2.19.1", "node-sass": "^4.13.1", "react": "^16.12.0", "react-dom": "^16.12.0", @@ -16,6 +17,7 @@ }, "scripts": { "start": "react-scripts start", + "compile-grammar": "nearleyc src/utils/grammar.ne -o src/utils/grammar.js", "flow": "flow", "build": "react-scripts build", "test": "react-scripts test", diff --git a/src/utils/grammar.js b/src/utils/grammar.js new file mode 100644 index 0000000..6637c1d --- /dev/null +++ b/src/utils/grammar.js @@ -0,0 +1,25 @@ +// Generated automatically by nearley, version 2.19.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/src/utils/grammar.ne b/src/utils/grammar.ne new file mode 100644 index 0000000..1c44d60 --- /dev/null +++ b/src/utils/grammar.ne @@ -0,0 +1,2 @@ +main -> (statement "\n"):+ +statement -> "foo" | "bar" \ No newline at end of file diff --git a/src/utils/parser.js b/src/utils/parser.js new file mode 100644 index 0000000..62d56fa --- /dev/null +++ b/src/utils/parser.js @@ -0,0 +1,4 @@ +const nearley = require("nearley"); +const grammar = require("./grammar.js"); + +const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); \ No newline at end of file