UNPKG

oxentescript

Version:

🌴 A Linguagem de Programação dos Baianos com Tokens Coloquiais Brasileiros + Syntax Highlighting Colorido!

187 lines (152 loc) 6.29 kB
#!/usr/bin/env node import { Command } from 'commander'; import chalk from 'chalk'; import { transpiler } from './transpiler.js'; import fs from 'fs'; import path from 'path'; const program = new Command(); // ASCII Art baiano const logo = ` 🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴 ____ __ _____ _ __ / __ \\__ _____ ____/ /____ / ___/__________(_)___ / /_ / / / / / / / _ \\/ __ / / _ \\ \\__ \\/ ___/ ___/ / __ \\/ __/ / /_/ / /_/ / __/ / / / __/___/ / /__/ / / / /_/ / / \\____/\\__,_/\\___/_/ /_/\\___//____/\\___/_/ /_/ .___/_/ /_/ 🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴 `; console.log(chalk.yellow(logo)); console.log(chalk.green(' A Linguagem de Programação dos Baianos!')); console.log(chalk.cyan(' Oxente, que massa! 🌴\n')); program .name('oxente') .description('🌴 OxenteScript - Linguagem de programação com dialetos baianos') .version('1.0.0'); // Comando para executar arquivo OxenteScript program .command('run <arquivo>') .description('Executa um arquivo OxenteScript (.oxe)') .action(async (arquivo) => { try { if (!arquivo.endsWith('.oxe')) { console.log(chalk.red('❌ Ôxe, o arquivo precisa ter extensão .oxe!')); process.exit(1); } if (!fs.existsSync(arquivo)) { console.log(chalk.red(`❌ Arquivo não encontrado: ${arquivo}`)); process.exit(1); } console.log(chalk.cyan(`🌴 Executando: ${arquivo}`)); await transpiler.runFile(arquivo); } catch (error) { console.error(chalk.red('❌ Erro na execução:'), error.message); process.exit(1); } }); // Comando para transpilar arquivo program .command('build <arquivo> [saida]') .description('Transpila arquivo OxenteScript para JavaScript') .action((arquivo, saida) => { try { if (!arquivo.endsWith('.oxe')) { console.log(chalk.red('❌ Ôxe, o arquivo precisa ter extensão .oxe!')); process.exit(1); } if (!fs.existsSync(arquivo)) { console.log(chalk.red(`❌ Arquivo não encontrado: ${arquivo}`)); process.exit(1); } console.log(chalk.cyan(`🔧 Transpilando: ${arquivo}`)); const outputFile = transpiler.transpileFile(arquivo, saida); console.log(chalk.green(`✅ Sucesso! Arquivo gerado: ${outputFile}`)); } catch (error) { console.error(chalk.red('❌ Erro na transpilação:'), error.message); process.exit(1); } }); // Comando para criar novo projeto program .command('novo <nome>') .description('Cria um novo projeto OxenteScript') .action((nome) => { try { const projectDir = path.resolve(nome); if (fs.existsSync(projectDir)) { console.log(chalk.red(`❌ Diretório ${nome} já existe!`)); process.exit(1); } // Criar estrutura do projeto fs.mkdirSync(projectDir, { recursive: true }); // Criar arquivo principal const mainFile = path.join(projectDir, 'main.oxe'); const mainContent = `# 🌴 Meu primeiro programa em OxenteScript falaai("Oxente, que massa! Meu primeiro programa baiano!"); acao cumprimentar(nome) { falaai("E aí, " + nome + "! Como tá a coisa?"); laele "chegou aqui massa!"; } bora meuNome = "Baiano"; cumprimentar(meuNome); # Testando a expressão "lá ele" laele; laele "que programa massa!"; # Vamos fazer uma contagem regressiva massa! porfavor bora i = 10; i maiorzin 0; i-- { falaai("Contando:", i); } falaai("🌴 Acabou! Oxente, que programa massa!"); `; fs.writeFileSync(mainFile, mainContent); // Criar package.json do projeto const packageJson = { name: nome, version: "1.0.0", description: "Projeto OxenteScript massa!", main: "main.oxe", scripts: { start: "oxente run main.oxe" } }; fs.writeFileSync( path.join(projectDir, 'package.json'), JSON.stringify(packageJson, null, 2) ); console.log(chalk.green(`✅ Projeto ${nome} criado com sucesso!`)); console.log(chalk.cyan(`📁 Entre no diretório: cd ${nome}`)); console.log(chalk.cyan(`🚀 Execute o programa: oxente run main.oxe`)); } catch (error) { console.error(chalk.red('❌ Erro ao criar projeto:'), error.message); process.exit(1); } }); // Comando para mostrar sintaxe program .command('sintaxe') .description('Mostra exemplos da sintaxe OxenteScript') .action(() => { console.log(chalk.yellow('🌴 Sintaxe OxenteScript:\n')); console.log(chalk.cyan('Variáveis:')); console.log(' bora nome = "João"; # let nome = "João";'); console.log(' massa idade = 25; # const idade = 25;\n'); console.log(chalk.cyan('Condicionais:')); console.log(' sefizer idade >= 18 { # if (idade >= 18) {'); console.log(' falaai("Maior de idade"); # console.log("Maior de idade");'); console.log(' } # }\n'); console.log(chalk.cyan('Funções:')); console.log(' acao somar(a, b) { # function somar(a, b) {'); console.log(' devolve a + b; # return a + b;'); console.log(' } # }\n'); console.log(chalk.cyan('Loops:')); console.log(' porfavor i = 0; i < 10; i++ { # for (let i = 0; i < 10; i++) {'); console.log(' falaai(i); # console.log(i);'); console.log(' } # }\n'); console.log(chalk.cyan('Expressões Baianas Especiais:')); console.log(' falaai("Oi mundo!"); # console.log("Oi mundo!");'); console.log(' laele; # console.log("Lá ele! 🌴");'); console.log(' laele "que massa!"; # console.log("Lá ele!", "que massa!");\n'); console.log(chalk.green('Oxente, que massa! Use "oxente novo meu-projeto" para começar! 🌴')); console.log(chalk.yellow('Lá ele, agora com mais expressões baianas! 🌴')); }); program.parse();