@parser-generator/cli
Version:
A Parser Generator that supports LL,SLR,LR1,LALR
62 lines • 2.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const getopts_1 = __importDefault(require("getopts"));
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const codegen_1 = require("./codegen");
const options = getopts_1.default(process.argv.slice(2), {
alias: {
help: "h",
file: "f",
output: "o",
parser: "p",
lang: "l"
},
default: {
parser: "LR1",
lang: "TS"
}
});
if (options.help) {
console.log("usage: pgen [-f|--file] [-o|--output] [-p|--parser] [-l|--lang]");
process.exit(0);
}
let { file, output: outputDir, parser, lang } = options;
/* 校验 */
if (file == undefined) {
console.log(`The option "file" is required`);
process.exit(1);
}
else if (!fs_1.default.statSync(file).isFile()) {
console.log(`The path doesn't exists:` + file);
process.exit(1);
}
if (outputDir == undefined) {
console.log(`The option "output" is required`);
process.exit(1);
}
else if (!path_1.default.isAbsolute(outputDir)) {
outputDir = path_1.default.resolve(process.cwd(), outputDir);
}
if (!fs_1.default.statSync(outputDir).isDirectory()) {
console.log(`The output path doesn't exists,or isn't a directory:` + outputDir);
process.exit(1);
}
parser = parser.toUpperCase();
let supposedParser = ["LL", "SLR", "LR1", "LALR"];
if (supposedParser.indexOf(parser) == -1) {
console.log(`The value "${parser}" is invalid for option "parser",expected is one of ` + supposedParser.join(","));
process.exit(1);
}
lang = lang.toUpperCase();
let supposedLang = ["TS", "JS"];
if (supposedLang.indexOf(lang) == -1) {
console.log(`The value "${parser}" is invalid for option "parser",expected is one of ` + supposedLang.join(","));
process.exit(1);
}
codegen_1.codegen({ parser, lang, outputDir, file });
//# sourceMappingURL=index.js.map