tscc-compiler
Version:
An LALR(1) compiler compiler written in Typescript
78 lines (76 loc) • 2.08 kB
JavaScript
;
function changeSuffix(s,suf){
var i = s.lastIndexOf('.');
return (i === -1 ? s : s.substr(0,i)) + suf;
}
module.exports = function (args){
function requireArg(msg){
if(args.length === 0){
throw new Error(msg);
}
else {
return args.shift();
}
}
var ret = {
input: null,
output: null,
test: null,
help: false,
detailedTime: false,
dfa: false,
showlah: false,
showFullItemsets: false
};
out:
while(args.length > 0){
switch(args[0]){
case '-h':
case '--help':
args.shift();
ret.help = true;
break;
case '-o':
case '--output':
args.shift();
ret.output = requireArg('-o(--output) requires one argument');
break;
case '-t':
case '--test':
args.shift();
ret.test = requireArg('-t(--test) requires one argument');
break;
case '-d':
case '--detail-time':
args.shift();
ret.detailedTime = true;
break;
case '--dfa':
args.shift();
ret.dfa = true;
break;
case '--show-lah':
args.shift();
ret.showlah = true;
break;
case '--show-full-itemsets':
args.shift();
ret.showFullItemsets = true;
break;
default:
if(ret.input){
throw new Error('exactly one file input is required');
}
else {
ret.input = requireArg();
}
}
}
if(!ret.help) {
if(ret.input === null){
throw new Error('no input file given');
}
ret.output = ret.output || changeSuffix(ret.input,'.output');
}
return ret;
}