UNPKG

@scinorandex/sparse

Version:

Yet another parser generator

47 lines 2.23 kB
#! /usr/bin/env node "use strict"; 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