@scinorandex/sparse
Version:
Yet another parser generator
47 lines • 2.23 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const promises_1 = __importDefault(require("fs/promises"));
const grammarParser_1 = require("./grammarParser");
const generator_1 = require("./generator");
const minimist_1 = __importDefault(require("minimist"));
const path_1 = __importDefault(require("path"));
const errorWindowBuilder_1 = require("./utils/errorWindowBuilder");
const args = (0, minimist_1.default)(process.argv.slice(2));
function checkFileExists(filepath) {
return new Promise((resolve, reject) => {
promises_1.default.access(filepath, promises_1.default.constants.F_OK)
.then(() => resolve(true))
.catch(() => resolve(false));
});
}
async function main() {
if (typeof args.input !== "string" || typeof args.output !== "string") {
console.log("Usage: npx @scinorandex/sparse --input=<input> --output=<output>");
return;
}
const inputFile = path_1.default.resolve(args.input);
const outputFile = path_1.default.resolve(args.output);
console.log(`Reading grammar from ${inputFile} and outputting table to ${outputFile}\n`);
if (!(await checkFileExists(inputFile)))
return console.log(`File ${inputFile} does not exist`);
const grammar = await promises_1.default.readFile(args.input, "utf8");
const productionsResult = (0, grammarParser_1.tryBuildProductions)(grammar);
if (productionsResult.success === false) {
console.log(productionsResult.reason);
console.log((0, errorWindowBuilder_1.buildErrorWindow)(grammar, productionsResult.token));
return;
}
const generatorResult = (0, generator_1.generateStates)(productionsResult.value);
if (generatorResult.success === false) {
console.log(generatorResult.reason);
console.log((0, errorWindowBuilder_1.buildErrorWindow)(grammar, generatorResult.token));
return;
}
await promises_1.default.writeFile(outputFile, generatorResult.value.toTable(), { encoding: "utf-8" });
}
main();
//# sourceMappingURL=cli.js.map