forked from kach/nearley
-
Notifications
You must be signed in to change notification settings - Fork 0
/
_shared.js
61 lines (48 loc) · 1.3 KB
/
_shared.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
var path = require('path');
var nearley = require('../lib/nearley');
var Compile = require('../lib/compile');
var parserGrammar = nearley.Grammar.fromCompiled(require('../lib/nearley-language-bootstrapped'));
var generate = require('../lib/generate');
function parse(grammar, input) {
var p = new nearley.Parser(grammar);
p.feed(input);
return p.results;
}
function nearleyc(source) {
// parse
var results = parse(parserGrammar, source);
// compile
var c = Compile(results[0], {});
// generate
return generate(c, 'grammar');
}
function compile(source) {
var compiledGrammar = nearleyc(source);
// eval
return evalGrammar(compiledGrammar);
}
/*
function requireFromString(source) {
var filename = '.'
var Module = module.constructor;
var m = new Module();
m.paths = Module._nodeModulePaths(path.dirname(filename))
m._compile(source, filename);
return m.exports;
}
*/
function requireFromString(source) {
var module = {exports: null};
eval(source)
return module.exports;
}
function evalGrammar(compiledGrammar) {
var exports = requireFromString(compiledGrammar);
return new nearley.Grammar.fromCompiled(exports);
}
module.exports = {
compile: compile,
nearleyc: nearleyc,
evalGrammar: evalGrammar,
parse: parse,
};