init parser with nearley
This commit is contained in:
parent
e08500a047
commit
f5a712557c
6 changed files with 64 additions and 0 deletions
0
grammar.js
Normal file
0
grammar.js
Normal file
31
package-lock.json
generated
31
package-lock.json
generated
|
@ -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": {
|
"dns-equal": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
|
"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",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
|
"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": {
|
"negotiator": {
|
||||||
"version": "0.6.2",
|
"version": "0.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
|
||||||
|
@ -12174,6 +12191,20 @@
|
||||||
"performance-now": "^2.1.0"
|
"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": {
|
"randombytes": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
"gh-pages": "^2.2.0",
|
"gh-pages": "^2.2.0",
|
||||||
"local-storage": "^2.0.0",
|
"local-storage": "^2.0.0",
|
||||||
"moo": "^0.5.1",
|
"moo": "^0.5.1",
|
||||||
|
"nearley": "^2.19.1",
|
||||||
"node-sass": "^4.13.1",
|
"node-sass": "^4.13.1",
|
||||||
"react": "^16.12.0",
|
"react": "^16.12.0",
|
||||||
"react-dom": "^16.12.0",
|
"react-dom": "^16.12.0",
|
||||||
|
@ -16,6 +17,7 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
|
"compile-grammar": "nearleyc src/utils/grammar.ne -o src/utils/grammar.js",
|
||||||
"flow": "flow",
|
"flow": "flow",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
|
|
25
src/utils/grammar.js
Normal file
25
src/utils/grammar.js
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
})();
|
2
src/utils/grammar.ne
Normal file
2
src/utils/grammar.ne
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
main -> (statement "\n"):+
|
||||||
|
statement -> "foo" | "bar"
|
4
src/utils/parser.js
Normal file
4
src/utils/parser.js
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
const nearley = require("nearley");
|
||||||
|
const grammar = require("./grammar.js");
|
||||||
|
|
||||||
|
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));
|
Loading…
Reference in a new issue