/
jison
executable file
·37 lines (30 loc) · 1.1 KB
/
jison
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
#!/usr/bin/env narwhal
var JISON = require('../lib/jison');
IO = require('../lib/jison/util/io');
var main = function (argv) {
var args = argv.slice(1);
if (args.length) {
var raw = IO.read(IO.join(IO.cwd(),args[0])),
name = IO.basename(args[0]).replace(/\..*$/g,''),
lex;
if (args[1]) {
lex = IO.read(IO.join(IO.cwd(),args[1]));
}
IO.write(name+'.js', processGrammar(raw, lex, name));
} else {
IO.stdin(function (raw) {
read = true;
IO.stdout(processGrammar(raw));
});
}
}
function processGrammar (rawGrammar, lex, name) {
var grammar = require("../lib/jison/bnf").parse(rawGrammar);
var opt = grammar.options || {};
if (lex) grammar.lex = require("../lib/jison/jisonlex").parse(lex);
if (!opt.moduleType) opt.moduleType = "commonjs";
if (!opt.moduleName && name) opt.moduleName = name.replace(/-\w/g, function (match){ return match.charAt(1).toUpperCase(); });
var generator = new JISON.Generator(grammar, opt);
return generator.generate(opt);
}
main(IO.args);