UNPKG

antlr-ng

Version:

Next generation ANTLR Tool

61 lines (60 loc) 3.53 kB
var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); import { dirname, resolve } from "node:path"; import { fileURLToPath, pathToFileURL } from "node:url"; import { Command, Option } from "commander"; import { readFileSync } from "node:fs"; const getPackageVersion = /* @__PURE__ */ __name(() => { const findPackageJson = /* @__PURE__ */ __name((path) => { const packageFile2 = resolve(path, "package.json"); try { readFileSync(pathToFileURL(packageFile2)); return packageFile2; } catch { const parent = dirname(path); if (parent.endsWith("node_modules")) { throw new Error("No package.json found."); } return findPackageJson(parent); } }, "findPackageJson"); const dirName = fileURLToPath(dirname(import.meta.url)); const packageFile = findPackageJson(dirName); const packageJson = JSON.parse(readFileSync(pathToFileURL(packageFile), "utf-8")); return packageJson.version; }, "getPackageVersion"); const antlrVersion = getPackageVersion(); const parseToolParameters = /* @__PURE__ */ __name((args) => { const parseBoolean = /* @__PURE__ */ __name((value, previous) => { if (value == null) { return previous; } const lower = value.trim().toLowerCase(); return lower === "true" || lower === "1" || lower === "on" || lower === "yes"; }, "parseBoolean"); const defines = {}; const parseKeyValuePair = /* @__PURE__ */ __name((input) => { const [key, value] = input.split("="); defines[key] = value; return defines; }, "parseKeyValuePair"); const prepared = new Command().option("-o, --output-directory <path>", "specify output directory where all output is generated").option("--lib <path>", "specify location of grammars, tokens files").option("--atn [boolean]", "Generate rule augmented transition network diagrams.", parseBoolean, false).option("-e, --encoding <string>", "Specify grammar file encoding; e.g., ucs-2.", "utf-8").addOption(new Option("--message-format[string]", "Specify output style for messages in antlr, gnu, vs2005.").choices(["antlr", "gnu", "vs2005"]).default("antlr")).option( "--long-messages [boolean]", "Show exception details when available for errors and warnings.", parseBoolean, false ).option("-l, --generate-listener [boolean]", "Generate parse tree listener.", parseBoolean, true).option("-v, --generate-visitor [boolean]", "Generate parse tree visitor.", parseBoolean, false).option("-p, --package <name>", "Specify a package/namespace for the generated code.").option("-d, --generate-dependencies [boolean]", "Generate file dependencies.", parseBoolean, false).option("-D, --define <key=value...>", "Set/override a grammar-level option.", parseKeyValuePair).option("-w, --warnings-are-errors [boolean]", "Treat warnings as errors.", parseBoolean, false).option("-f, --force-atn [boolean]", "Use the ATN simulator for all predictions.", parseBoolean, false).option("--log [boolean]", "Dump lots of logging info to antlrng-timestamp.log.", parseBoolean, false).option( "--exact-output-dir [boolean]", "All output goes into -o dir regardless of paths/package", parseBoolean, true ).argument("<grammar...>", "A list of grammar files.").version(`antlr-ng ${antlrVersion}`); prepared.parse(args, { from: "user" }); const result = prepared.opts(); result.args = prepared.args; return result; }, "parseToolParameters"); export { antlrVersion, parseToolParameters };