Skip to content

Commit

Permalink
Begin Node command line compatability.
Browse files Browse the repository at this point in the history
  • Loading branch information
zaach committed Jun 8, 2010
1 parent 9705d76 commit ab19e54
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 41 deletions.
2 changes: 1 addition & 1 deletion bin/jison
@@ -1,3 +1,3 @@
#!/usr/bin/env narwhal

require('jison').main(system.args);
require('jison/cli-wrapper').main(system.args);
40 changes: 0 additions & 40 deletions lib/jison.js
Expand Up @@ -1488,43 +1488,3 @@ return function Parser (g, options) {

})();

exports.main = function main (args) {
//var parser = new require("args").Parser();
var fs = require("file");
gfile = fs.path(fs.cwd()).join(args[1]);

// try to parse as JSON, else use BNF parser
if (gfile.extension() === '.json') {
var grammar = JSON.parse(gfile.read({charset: "utf-8"}));
} else if (gfile.extension() === '.jison') {
var grammar = require("jison/bnf").parse(gfile.read({charset: "utf-8"}));
}

var opt = grammar.options || {};

// lexer file
if (args[2]) {
var lfile = fs.path(fs.cwd()).join(args[2]);

// try to parse as JSON, else use BNF parser
if (lfile.extension() === '.json') {
grammar.lex = JSON.parse(lfile.read({charset: "utf-8"}));
} else if (lfile.extension() === '.jisonlex') {
grammar.lex = require("jison/jisonlex").parse(lfile.read({charset: "utf-8"}));
}
}

if (!opt.moduleName)
opt.moduleName = gfile.basename().replace(new RegExp(gfile.extension()+"$"), "");
if (!opt.moduleType)
opt.moduleType = "commonjs";

var generator = new Jison.Generator(grammar, opt);
fname = fs.path(fs.cwd()).join(opt.moduleName + ".js"),
source = generator.generate(opt),
stream = fname.open("w");

stream.print(source);
stream.close();
};

34 changes: 34 additions & 0 deletions lib/jison/cli-wrapper.js
@@ -0,0 +1,34 @@
var JISON = require('../jison');
IO = require('./util/io');

exports.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) {
IO.stdout(processGrammar(raw));
});
}
}

function processGrammar (rawGrammar, lex, name) {
var grammar = require("./bnf").parse(rawGrammar);
var opt = grammar.options || {};
if (lex) grammar.lex = require("./jisonlex").parse(lex);
if (!opt.moduleType) opt.moduleType = "commonjs";
if (!opt.moduleName && name) opt.moduleName = name;

var generator = new JISON.Generator(grammar, opt);
return generator.generate(opt);
}

if (require.main === module)
exports.main(IO.args)
67 changes: 67 additions & 0 deletions lib/jison/util/io.js
@@ -0,0 +1,67 @@

// node
if (typeof process !== 'undefined') {

var fs = require('fs');
var sys = require('sys');

exports.p = sys.puts;
exports.cwd = process.cwd;
exports.join = require('path').join;
exports.basename = require('path').basename;
exports.args = process.argv.slice(1);

exports.read = function (fname) {
return fs.readFileSync(fname, "utf8");
}

exports.write = function (fname, data) {
fs.writeFileSync(fname, data);
}

exports.stdin = function (cb) {
var stdin = process.openStdin(),
data = '';

stdin.setEncoding('utf8');
stdin.addListener('data', function (chunk) {
data += chunk;
});
stdin.addListener('end', function () {
cb(data);
});
}

exports.stdout = function (out) {
process.stdout.write(out);
}

// commonjs/narwhal-like
} else {

var fs = require('file');
var system = require('system');

exports.p = print;
exports.cwd = fs.cwd;
exports.join = fs.join;
exports.basename = fs.basename;
exports.args = system.args.slice(0);

exports.read = function (fname) {
return fs.read(fname);
}

exports.write = function (fname, data) {
fs.write(fname, data);
}

exports.stdin = function (cb) {
cb(system.stdin.read());
}

exports.stdout = function (out) {
system.stdout.print(out);
}

}

0 comments on commit ab19e54

Please sign in to comment.