build: optimize antlr script (#171)
This commit is contained in:
parent
7bbaba6398
commit
fc97bba879
@ -1,51 +0,0 @@
|
||||
const path = require('path');
|
||||
const exec = require('child_process').exec;
|
||||
const argv = require('yargs-parser')(process.argv.slice(2))
|
||||
|
||||
const antlr4 = path.resolve(__dirname, './antlr-4.12.0-complete.jar');
|
||||
const grammars = path.resolve(__dirname, '../src/grammar');
|
||||
const output = path.resolve(__dirname, '../src/lib');
|
||||
|
||||
const entry = [
|
||||
'generic',
|
||||
'hive',
|
||||
'pgsql',
|
||||
'plsql',
|
||||
'spark',
|
||||
'flinksql',
|
||||
'trinosql',
|
||||
];
|
||||
|
||||
function compile(language) {
|
||||
const cmd = `
|
||||
antlr4ts
|
||||
-visitor
|
||||
-listener
|
||||
-Xexact-output-dir -o ${output}/${language}
|
||||
${grammars}/${language}/*.g4
|
||||
`.replace(/\n/g, '');
|
||||
console.info('Executing:', cmd);
|
||||
exec(cmd, (err) => {
|
||||
if (err) {
|
||||
console.error('Antlr4 build error: ' + language, err);
|
||||
} else {
|
||||
console.log(`Build ${language} success.`);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
if (argv.all) { // build all: yarn antlr4 --all
|
||||
entry.forEach((language) => {
|
||||
compile(language);
|
||||
});
|
||||
} else if (argv.lang) {// build single: yarn antlr4 --lang=generic
|
||||
const supportedLanguage = entry.find((language) => language === argv.lang);
|
||||
if (supportedLanguage) {
|
||||
compile(argv.lang);
|
||||
} else {
|
||||
console.error('Invalid language: ' + argv.lang + ', supported languages:\n' + entry.join(', '));
|
||||
}
|
||||
} else {
|
||||
console.error('Please to specify the language, just like: yarn antlr4 --lang flinksql');
|
||||
}
|
||||
|
@ -18,7 +18,7 @@
|
||||
"dist"
|
||||
],
|
||||
"scripts": {
|
||||
"antlr4": "node build/antlr4.js",
|
||||
"antlr4": "node ./scripts/antlr4.js",
|
||||
"build": "rm -rf dist && tsc",
|
||||
"eslint": "eslint ./src/**/*.ts",
|
||||
"check-types": "tsc --skipLibCheck",
|
||||
@ -35,6 +35,7 @@
|
||||
"@typescript-eslint/eslint-plugin": "^3.10.1",
|
||||
"@typescript-eslint/parser": "^3.10.1",
|
||||
"antlr4ts-cli": "^0.5.0-alpha.4",
|
||||
"chalk": "4.1.2",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-config-google": "^0.14.0",
|
||||
"inquirer": "^8.2.2",
|
||||
|
@ -10,6 +10,7 @@ specifiers:
|
||||
antlr4-c3: ^3.0.1
|
||||
antlr4ts: ^0.5.0-alpha.4
|
||||
antlr4ts-cli: ^0.5.0-alpha.4
|
||||
chalk: 4.1.2
|
||||
eslint: ^7.32.0
|
||||
eslint-config-google: ^0.14.0
|
||||
inquirer: ^8.2.2
|
||||
@ -30,6 +31,7 @@ devDependencies:
|
||||
'@typescript-eslint/eslint-plugin': 3.10.1_a18e814019c959d52a44881c5533ce12
|
||||
'@typescript-eslint/parser': 3.10.1_eslint@7.32.0+typescript@5.0.4
|
||||
antlr4ts-cli: 0.5.0-alpha.4
|
||||
chalk: 4.1.2
|
||||
eslint: 7.32.0
|
||||
eslint-config-google: 0.14.0_eslint@7.32.0
|
||||
inquirer: 8.2.6
|
||||
|
85
scripts/antlr4.js
Normal file
85
scripts/antlr4.js
Normal file
@ -0,0 +1,85 @@
|
||||
const path = require("path");
|
||||
const exec = require("child_process").exec;
|
||||
const fs = require("fs");
|
||||
const argv = require("yargs-parser")(process.argv.slice(2));
|
||||
const inquirer = require("inquirer");
|
||||
const chalk = require("chalk");
|
||||
|
||||
const grammarsPath = path.resolve(__dirname, "../src/grammar");
|
||||
const outputPath = path.resolve(__dirname, "../src/lib");
|
||||
|
||||
const languageEntries = fs
|
||||
.readdirSync(grammarsPath)
|
||||
.filter((item) => item !== "impala"); // impala is not support yet.
|
||||
|
||||
const baseCmd = 'antlr4ts -visitor -listener -Xexact-output-dir -o';
|
||||
|
||||
function compile(language) {
|
||||
const cmd = `${baseCmd} ${outputPath}/${language} ${grammarsPath}/${language}/*.g4`;
|
||||
|
||||
console.info(chalk.green(`\nRemoving:`, chalk.gray(`${outputPath}/${language}/*`)));
|
||||
fs.rmdirSync(`${outputPath}/${language}`, { recursive: true })
|
||||
|
||||
console.info(chalk.green("Executing:"), chalk.gray(cmd));
|
||||
exec(cmd, (err) => {
|
||||
if (err) {
|
||||
console.error(
|
||||
chalk.redBright(`\n[Antlr4 compile error]:`),
|
||||
chalk.cyan(language),
|
||||
chalk.gray(err)
|
||||
);
|
||||
} else {
|
||||
console.log(chalk.greenBright(`\nCompile ${language} succeeded!`));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function prompt() {
|
||||
inquirer
|
||||
.prompt([
|
||||
{
|
||||
type: "list",
|
||||
name: "language",
|
||||
message: "Which language you want compile (or all languages)",
|
||||
choices: ["All Languages", ...languageEntries],
|
||||
loop: true,
|
||||
},
|
||||
])
|
||||
.then((result) => {
|
||||
const language = result.language;
|
||||
if(language === 'All Languages') {
|
||||
languageEntries.forEach((language) => {
|
||||
compile(language);
|
||||
});
|
||||
} else {
|
||||
compile(result.language);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function main() {
|
||||
if (argv.all) {
|
||||
// compile all: yarn antlr4 --all
|
||||
languageEntries.forEach((language) => {
|
||||
compile(language);
|
||||
});
|
||||
} else if (argv.lang) {
|
||||
// compile single: yarn antlr4 --lang=generic
|
||||
const supportedLanguage = languageEntries.some(
|
||||
(language) => language === argv.lang
|
||||
);
|
||||
if (supportedLanguage) {
|
||||
compile(argv.lang);
|
||||
} else {
|
||||
console.error(
|
||||
chalk.bold.red("\n[Invalid language]:"),
|
||||
chalk.white.underline(`${argv.lang}\n`)
|
||||
);
|
||||
prompt();
|
||||
}
|
||||
} else {
|
||||
prompt();
|
||||
}
|
||||
}
|
||||
|
||||
main();
|
16
yarn.lock
16
yarn.lock
@ -1161,6 +1161,14 @@ caniuse-lite@^1.0.30001489:
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001491.tgz#eab0e0f392de6f7411751d148de9b5bd6b203e46"
|
||||
integrity sha512-17EYIi4TLnPiTzVKMveIxU5ETlxbSO3B6iPvMbprqnKh4qJsQGk5Nh1Lp4jIMAE0XfrujsJuWZAM3oJdMHaKBA==
|
||||
|
||||
chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
chalk@^2.0.0, chalk@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||
@ -1170,14 +1178,6 @@ chalk@^2.0.0, chalk@^2.4.2:
|
||||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.1:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
|
||||
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
|
||||
dependencies:
|
||||
ansi-styles "^4.1.0"
|
||||
supports-color "^7.1.0"
|
||||
|
||||
char-regex@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
|
||||
|
Loading…
Reference in New Issue
Block a user