UNPKG

@designliquido/delegua

Version:

Linguagem de programação simples e moderna usando português estruturado.

495 lines 31.7 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.carregarBibliotecasGlobais = carregarBibliotecasGlobais; exports.pontoEntradaAjuda = pontoEntradaAjuda; exports.obterTopicoAjuda = obterTopicoAjuda; const funcao_padrao_1 = require("./estruturas/funcao-padrao"); const delegua_funcao_1 = require("./estruturas/delegua-funcao"); const descritor_tipo_classe_1 = require("./estruturas/descritor-tipo-classe"); const objeto_delegua_classe_1 = require("./estruturas/objeto-delegua-classe"); const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global")); const construtos_1 = require("../construtos"); function carregarBibliotecasGlobais(pilhaEscoposExecucao) { pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio)); pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio)); pilhaEscoposExecucao.definirVariavel('aleatorioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre)); pilhaEscoposExecucao.definirVariavel('aleatórioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre)); pilhaEscoposExecucao.definirVariavel('algum', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.algum)); pilhaEscoposExecucao.definirVariavel('arredondar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.arredondar)); pilhaEscoposExecucao.definirVariavel('clonar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.clonar)); pilhaEscoposExecucao.definirVariavel('encontrar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrar)); pilhaEscoposExecucao.definirVariavel('encontrarIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice)); pilhaEscoposExecucao.definirVariavel('encontrarÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice)); pilhaEscoposExecucao.definirVariavel('encontrarUltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo)); pilhaEscoposExecucao.definirVariavel('encontrarÚltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo)); pilhaEscoposExecucao.definirVariavel('encontrarUltimoIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice)); pilhaEscoposExecucao.definirVariavel('encontrarÚltimoÍndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimoIndice)); pilhaEscoposExecucao.definirVariavel('filtrarPor', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.filtrarPor)); pilhaEscoposExecucao.definirVariavel('incluido', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido)); pilhaEscoposExecucao.definirVariavel('incluído', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.incluido)); const funcaoInteiro = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.inteiro); funcaoInteiro.MAXIMO = 2147483647; funcaoInteiro.MÁXIMO = 2147483647; funcaoInteiro.MINIMO = -2147483648; funcaoInteiro.MÍNIMO = -2147483648; pilhaEscoposExecucao.definirVariavel('inteiro', funcaoInteiro); const funcaoLongo = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.longo); funcaoLongo.MAXIMO = BigInt('9223372036854775807'); funcaoLongo.MÁXIMO = BigInt('9223372036854775807'); funcaoLongo.MINIMO = BigInt('-9223372036854775808'); funcaoLongo.MÍNIMO = BigInt('-9223372036854775808'); pilhaEscoposExecucao.definirVariavel('longo', funcaoLongo); pilhaEscoposExecucao.definirVariavel('intervalo', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.intervalo)); pilhaEscoposExecucao.definirVariavel('mapear', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.mapear)); pilhaEscoposExecucao.definirVariavel('maximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo)); pilhaEscoposExecucao.definirVariavel('máximo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.maximo)); pilhaEscoposExecucao.definirVariavel('minimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo)); pilhaEscoposExecucao.definirVariavel('mínimo', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.minimo)); const funcaoNumero = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.numero); funcaoNumero.MAXIMO = Number.MAX_VALUE; funcaoNumero.MÁXIMO = Number.MAX_VALUE; funcaoNumero.MINIMO = -Number.MAX_VALUE; funcaoNumero.MÍNIMO = -Number.MAX_VALUE; pilhaEscoposExecucao.definirVariavel('numero', funcaoNumero); pilhaEscoposExecucao.definirVariavel('número', funcaoNumero); pilhaEscoposExecucao.definirVariavel('ordenar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.ordenar)); pilhaEscoposExecucao.definirVariavel('paraCada', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.paraCada)); pilhaEscoposExecucao.definirVariavel('primeiroEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao)); pilhaEscoposExecucao.definirVariavel('primeiroEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.primeiroEmCondicao)); const funcaoReal = new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.real); funcaoReal.MAXIMO = Number.MAX_VALUE; funcaoReal.MÁXIMO = Number.MAX_VALUE; funcaoReal.MINIMO = -Number.MAX_VALUE; funcaoReal.MÍNIMO = -Number.MAX_VALUE; pilhaEscoposExecucao.definirVariavel('real', funcaoReal); pilhaEscoposExecucao.definirVariavel('reduzir', new funcao_padrao_1.FuncaoPadrao(3, bibliotecaGlobal.reduzir)); pilhaEscoposExecucao.definirVariavel('somar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.somar)); pilhaEscoposExecucao.definirVariavel('tamanho', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.tamanho)); pilhaEscoposExecucao.definirVariavel('texto', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.texto)); pilhaEscoposExecucao.definirVariavel('todos', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.todos)); pilhaEscoposExecucao.definirVariavel('todosEmCondicao', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao)); pilhaEscoposExecucao.definirVariavel('todosEmCondição', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.todosEmCondicao)); pilhaEscoposExecucao.definirVariavel('tupla', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.tupla)); pilhaEscoposExecucao.definirVariavel('vetor', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.vetor)); } function pontoEntradaAjuda(funcao, topico) { if (!funcao) { return 'Para usar a ajuda, use como uma função: ajuda(objeto).'; } if (!topico) { return ('Te damos as boas-vindas ao utilitário de ajuda de Delégua!\n\n' + 'Use ajuda(objeto) para obter informações sobre um objeto, função, classe ou módulo.\n' + "Use ajuda('tópico') para obter informações sobre um tópico específico.\n\n"); } return obterTopicoAjuda(topico); } function obterTopicoAjuda(topico) { switch (topico.constructor) { case construtos_1.Leia: return (`A instrução 'leia' permite capturar a entrada do usuário durante a execução do programa. ` + `Você pode usar 'leia()' para ler uma linha de entrada do usuário e armazená-la em uma variável. ` + `Exemplo de uso:\n\n` + `\tvar minhaVariavel = leia()\n\n` + `Isto irá ler a entrada do usuário e atribuí-la à variável 'minhaVariavel'.`); case funcao_padrao_1.FuncaoPadrao: return obterAjudaFuncaoPadrao(topico); case delegua_funcao_1.DeleguaFuncao: if (topico.documentacao) { const conteudo = topico.documentacao.conteudo; return Array.isArray(conteudo) ? conteudo.join('\n') : String(conteudo); } return `Função '${topico.nome}' — sem documentação disponível.`; case objeto_delegua_classe_1.ObjetoDeleguaClasse: return obterAjudaDescritor(topico.classe, false); case descritor_tipo_classe_1.DescritorTipoClasse: return obterAjudaDescritor(topico, true); default: console.log(topico); return `Desculpe, não há documentação disponível para o tópico solicitado no momento.`; } } function obterConteudoDoc(documentacao) { if (!documentacao) return ''; return Array.isArray(documentacao.conteudo) ? documentacao.conteudo.join('\n') : String(documentacao.conteudo); } function obterAjudaDescritor(descritor, estatico) { var _a, _b; const nome = (_b = (_a = descritor.simboloOriginal) === null || _a === void 0 ? void 0 : _a.lexema) !== null && _b !== void 0 ? _b : 'Objeto'; const qualificador = estatico ? ' (estático)' : ''; const linhas = [`Classe ${nome}${qualificador}`]; const propriedadesVisiveis = descritor.propriedades.filter((p) => p.acesso === 'publico' && p.estatico === estatico); if (propriedadesVisiveis.length > 0) { linhas.push('\nPropriedades:'); for (const prop of propriedadesVisiveis) { const doc = obterConteudoDoc(prop.documentacao); linhas.push(` ${prop.nome.lexema}${doc ? ` — ${doc}` : ''}`); } } const nomesMetodos = Object.keys(descritor.metodos); if (nomesMetodos.length > 0) { linhas.push('\nMétodos:'); for (const nomeMetodo of nomesMetodos) { const metodo = descritor.metodos[nomeMetodo]; const funcao = Array.isArray(metodo) ? metodo[0] : metodo; const doc = obterConteudoDoc(funcao.documentacao); linhas.push(` ${nomeMetodo}()${doc ? ` — ${doc}` : ''}`); } } return linhas.join('\n'); } function obterAjudaFuncaoPadrao(funcaoPadrao) { // Tentamos identificar a função pela aridade e pela implementação const aridade = funcaoPadrao.valorAridade; const implementacao = funcaoPadrao.funcao; // Mapeamento de funções por nome const nomeFuncao = Object.keys(bibliotecaGlobal).find((key) => bibliotecaGlobal[key] === implementacao); if (!nomeFuncao) { return 'Função não identificada. Não há documentação disponível.'; } switch (nomeFuncao) { case 'aleatorio': return (`# aleatorio()\n\n` + `Retorna um número aleatório entre 0 e 1.\n\n` + `**Sintaxe:** aleatorio()\n\n` + `**Retorno:** Número real entre 0 (inclusivo) e 1 (exclusivo).\n\n` + `**Exemplo:**\n` + `\tvar numeroSorteado = aleatorio()\n` + `\tescreva(numeroSorteado) // Pode retornar algo como 0.4829374657\n`); case 'aleatorioEntre': return (`# aleatorioEntre(minimo, maximo)\n\n` + `Retorna um número aleatório inteiro de acordo com os parâmetros passados.\n` + `Mínimo (inclusivo) - Máximo (exclusivo).\n\n` + `**Sintaxe:** aleatorioEntre(minimo: número, maximo: número)\n\n` + `**Parâmetros:**\n` + ` - minimo: O valor mínimo (inclusivo)\n` + ` - maximo: O valor máximo (exclusivo)\n\n` + `**Retorno:** Número inteiro entre minimo e maximo-1.\n\n` + `**Exemplo:**\n` + `\tvar dado = aleatorioEntre(1, 7)\n` + `\tescreva(dado) // Retorna um número entre 1 e 6\n`); case 'algum': return (`# algum(vetor, funcaoPesquisa)\n\n` + `Verifica se algum dos elementos do vetor satisfaz a condição definida pela função de pesquisa.\n\n` + `**Sintaxe:** algum(vetor: qualquer[], funcaoPesquisa: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** Verdadeiro se pelo menos um elemento satisfaz a condição, falso caso contrário.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 2, 3, 4, 5]\n` + `\tvar temPar = algum(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(temPar) // verdadeiro\n`); case 'clonar': return (`# clonar(valor)\n\n` + `Clona profundamente uma variável ou constante em Delégua, criando uma cópia independente.\n\n` + `**Sintaxe:** clonar(valor: qualquer)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser clonado (vetor, dicionário, objeto, tupla, etc.)\n\n` + `**Retorno:** Uma cópia profunda do valor fornecido.\n\n` + `**Exemplo:**\n` + `\tvar original = [1, 2, [3, 4]]\n` + `\tvar copia = clonar(original)\n` + `\tcopia[2][0] = 99\n` + `\tescreva(original[2][0]) // 3 (não foi modificado)\n` + `\tescreva(copia[2][0]) // 99\n`); case 'encontrar': return (`# encontrar(vetor, funcaoPesquisa)\n\n` + `Encontra o primeiro elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` + `**Sintaxe:** encontrar(vetor: qualquer[], funcaoPesquisa: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** O primeiro elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 3, 5, 8, 10]\n` + `\tvar primeiroPar = encontrar(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(primeiroPar) // 8\n`); case 'encontrarIndice': return (`# encontrarIndice(vetor, funcaoPesquisa)\n\n` + `Encontra o índice do primeiro elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` + `**Sintaxe:** encontrarIndice(vetor: qualquer[], funcaoPesquisa: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** O índice do primeiro elemento que satisfaz a condição, ou -1 se nenhum elemento for encontrado.\n\n` + `**Exemplo:**\n` + `\tvar frutas = ["maçã", "banana", "laranja"]\n` + `\tvar indice = encontrarIndice(frutas, funcao(f) { retorna f == "banana" })\n` + `\tescreva(indice) // 1\n`); case 'encontrarUltimo': return (`# encontrarUltimo(vetor, funcaoPesquisa)\n\n` + `Encontra o último elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` + `**Sintaxe:** encontrarUltimo(vetor: qualquer[], funcaoPesquisa: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** O último elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [2, 4, 6, 7, 9]\n` + `\tvar ultimoPar = encontrarUltimo(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(ultimoPar) // 6\n`); case 'encontrarUltimoIndice': return (`# encontrarUltimoIndice(vetor, funcaoPesquisa)\n\n` + `Encontra o índice do último elemento de um vetor cuja função de pesquisa retorne verdadeiro.\n\n` + `**Sintaxe:** encontrarUltimoIndice(vetor: qualquer[], funcaoPesquisa: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoPesquisa: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** O índice do último elemento que satisfaz a condição, ou nulo se nenhum elemento for encontrado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [2, 4, 6, 7, 9]\n` + `\tvar indiceUltimoPar = encontrarUltimoIndice(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(indiceUltimoPar) // 2\n`); case 'filtrarPor': return (`# filtrarPor(vetor, funcaoFiltragem)\n\n` + `Cria um novo vetor com todos os elementos que passam no teste implementado pela função de filtragem.\n\n` + `**Sintaxe:** filtrarPor(vetor: qualquer[], funcaoFiltragem: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoFiltragem: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** Novo vetor contendo apenas os elementos que satisfazem a condição.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 2, 3, 4, 5, 6]\n` + `\tvar pares = filtrarPor(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(pares) // [2, 4, 6]\n`); case 'incluido': return (`# incluido(vetor, valor)\n\n` + `Verifica se um valor está incluído em um vetor.\n\n` + `**Sintaxe:** incluido(vetor: qualquer[], valor: qualquer)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - valor: O valor a ser procurado\n\n` + `**Retorno:** Verdadeiro se o valor estiver no vetor, falso caso contrário.\n\n` + `**Exemplo:**\n` + `\tvar frutas = ["maçã", "banana", "laranja"]\n` + `\tescreva(incluido(frutas, "banana")) // verdadeiro\n` + `\tescreva(incluido(frutas, "uva")) // falso\n`); case 'inteiro': return (`# inteiro(valor)\n\n` + `Converte um valor em um número inteiro de 32 bits.\n\n` + `**Sintaxe:** inteiro(valor: número | texto)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser convertido (número ou texto)\n\n` + `**Retorno:** Número inteiro correspondente ao valor fornecido.\n\n` + `**Constantes:**\n` + ` - inteiro.MAXIMO (ou inteiro.MÁXIMO): 2147483647 (maior valor possível)\n` + ` - inteiro.MINIMO (ou inteiro.MÍNIMO): -2147483648 (menor valor possível)\n\n` + `**Exemplo:**\n` + `\tescreva(inteiro(3.14)) // 3\n` + `\tescreva(inteiro("42")) // 42\n` + `\tescreva(inteiro("3.99")) // 3\n` + `\tescreva(inteiro.MAXIMO) // 2147483647\n` + `\tescreva(inteiro.MINIMO) // -2147483648\n`); case 'intervalo': return (`# intervalo(valorInicial, valorFinal)\n\n` + `Cria um vetor com números inteiros no intervalo especificado.\n` + `O valor inicial é inclusivo e o valor final é exclusivo.\n\n` + `**Sintaxe:** intervalo(valorInicial: número, valorFinal: número)\n\n` + `**Parâmetros:**\n` + ` - valorInicial: O valor inicial (inclusivo)\n` + ` - valorFinal: O valor final (exclusivo)\n\n` + `**Retorno:** Vetor com os números no intervalo especificado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = intervalo(1, 6)\n` + `\tescreva(numeros) // [1, 2, 3, 4, 5]\n`); case 'longo': return (`# longo(valor)\n\n` + `Converte um valor em um número inteiro de 64 bits (longo).\n\n` + `**Sintaxe:** longo(valor: número | texto)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser convertido (número ou texto)\n\n` + `**Retorno:** Número inteiro de 64 bits correspondente ao valor fornecido.\n\n` + `**Constantes:**\n` + ` - longo.MAXIMO (ou longo.MÁXIMO): 9223372036854775807 (maior valor possível)\n` + ` - longo.MINIMO (ou longo.MÍNIMO): -9223372036854775808 (menor valor possível)\n\n` + `**Exemplo:**\n` + `\tescreva(longo(3.14)) // 3\n` + `\tescreva(longo("9000000000")) // 9000000000\n` + `\tescreva(longo.MAXIMO) // 9223372036854775807\n` + `\tescreva(longo.MINIMO) // -9223372036854775808\n`); case 'mapear': return (`# mapear(vetor, funcaoMapeamento)\n\n` + `Cria um novo vetor com os resultados da aplicação de uma função a cada elemento do vetor original.\n\n` + `**Sintaxe:** mapear(vetor: qualquer[], funcaoMapeamento: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoMapeamento: Função que recebe um elemento e retorna um novo valor\n\n` + `**Retorno:** Novo vetor com os valores transformados.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 2, 3, 4]\n` + `\tvar quadrados = mapear(numeros, funcao(n) { retorna n * n })\n` + `\tescreva(quadrados) // [1, 4, 9, 16]\n`); case 'maximo': return `# maximo(vetor)\n\nRetorna o maior valor encontrado em um vetor de números.`; case 'minimo': return `# minimo(vetor)\n\nRetorna o menor valor encontrado em um vetor de números.`; case 'numero': return (`# numero(valor)\n\n` + `Converte um valor em um número de ponto flutuante de 64 bits.\n\n` + `**Sintaxe:** numero(valor: número | texto)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser convertido\n\n` + `**Retorno:** Número correspondente ao valor fornecido.\n\n` + `**Constantes:**\n` + ` - numero.MAXIMO (ou numero.MÁXIMO / número.MÁXIMO): maior valor finito representável\n` + ` - numero.MINIMO (ou numero.MÍNIMO / número.MÍNIMO): menor valor finito representável (mais negativo)\n\n` + `**Exemplo:**\n` + `\tescreva(numero("3.14")) // 3.14\n` + `\tescreva(numero("42")) // 42\n` + `\tescreva(numero(5)) // 5\n` + `\tescreva(numero.MAXIMO) // 1.7976931348623157e+308\n` + `\tescreva(numero.MINIMO) // -1.7976931348623157e+308\n`); case 'ordenar': return (`# ordenar(vetor)\n\n` + `Ordena os elementos de um vetor em ordem crescente (números) ou alfabética (textos).\n\n` + `**Sintaxe:** ordenar(vetor: qualquer[])\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n\n` + `**Retorno:** O mesmo vetor, agora ordenado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [5, 2, 8, 1, 9]\n` + `\tordenar(numeros)\n` + `\tescreva(numeros) // [1, 2, 5, 8, 9]\n`); case 'paraCada': return (`# paraCada(vetor, funcao)\n\n` + `Executa uma função para cada elemento do vetor.\n\n` + `**Sintaxe:** paraCada(vetor: qualquer[], funcao: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcao: Função a ser executada para cada elemento\n\n` + `**Retorno:** Nenhum (undefined).\n\n` + `**Exemplo:**\n` + `\tvar nomes = ["Ana", "Bruno", "Carlos"]\n` + `\tparaCada(nomes, funcao(nome) {\n` + `\t\tescreva("Olá, " + nome)\n` + `\t})\n`); case 'primeiroEmCondicao': return (`# primeiroEmCondicao(vetor, funcaoFiltragem)\n\n` + `Retorna o primeiro elemento que satisfaz a condição especificada pela função de filtragem.\n\n` + `**Sintaxe:** primeiroEmCondicao(vetor: qualquer[], funcaoFiltragem: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoFiltragem: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** O primeiro elemento que satisfaz a condição, ou undefined se nenhum for encontrado.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 3, 5, 8, 10]\n` + `\tvar resultado = primeiroEmCondicao(numeros, funcao(n) { retorna n > 5 })\n` + `\tescreva(resultado) // 8\n`); case 'real': return (`# real(valor)\n\n` + `Converte um valor em um número real (ponto flutuante de 64 bits). Equivalente a numero().\n\n` + `**Sintaxe:** real(valor: número | texto)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser convertido\n\n` + `**Retorno:** Número real correspondente ao valor fornecido.\n\n` + `**Constantes:**\n` + ` - real.MAXIMO (ou real.MÁXIMO): maior valor finito representável\n` + ` - real.MINIMO (ou real.MÍNIMO): menor valor finito representável (mais negativo)\n\n` + `**Exemplo:**\n` + `\tescreva(real("3.14")) // 3.14\n` + `\tescreva(real(42)) // 42.0\n` + `\tescreva(real.MAXIMO) // 1.7976931348623157e+308\n` + `\tescreva(real.MINIMO) // -1.7976931348623157e+308\n`); case 'reduzir': return (`# reduzir(vetor, funcaoReducao, valorInicial)\n\n` + `Aplica uma função a um acumulador e cada elemento do vetor para reduzi-lo a um único valor.\n\n` + `**Sintaxe:** reduzir(vetor: qualquer[], funcaoReducao: função, valorInicial?: qualquer)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoReducao: Função que recebe (acumulador, elemento) e retorna novo valor do acumulador\n` + ` - valorInicial: (Opcional) Valor inicial do acumulador\n\n` + `**Retorno:** Valor final do acumulador.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [1, 2, 3, 4]\n` + `\tvar soma = reduzir(numeros, funcao(acc, n) { retorna acc + n }, 0)\n` + `\tescreva(soma) // 10\n`); case 'somar': return `# somar(vetor)\n\nRetorna a soma de todos os elementos de um vetor numérico.`; case 'tamanho': return (`# tamanho(objeto)\n\n` + `Retorna o tamanho de um objeto (vetor, texto, função, etc.).\n\n` + `**Sintaxe:** tamanho(objeto: qualquer)\n\n` + `**Parâmetros:**\n` + ` - objeto: O objeto cujo tamanho será medido\n\n` + `**Retorno:** Para vetores e textos, retorna o número de elementos/caracteres. ` + `Para funções, retorna o número de parâmetros.\n\n` + `**Exemplo:**\n` + `\tescreva(tamanho([1, 2, 3])) // 3\n` + `\tescreva(tamanho("Delégua")) // 7\n`); case 'texto': return (`# texto(valor)\n\n` + `Transforma o valor ou variável em texto.\n\n` + `**Sintaxe:** texto(valor: qualquer)\n\n` + `**Parâmetros:**\n` + ` - valor: O valor a ser convertido em texto\n\n` + `**Retorno:** Representação em texto do valor fornecido.\n\n` + `**Exemplo:**\n` + `\tescreva(texto(42)) // "42"\n` + `\tescreva(texto(verdadeiro)) // "verdadeiro"\n` + `\tescreva(texto([1, 2, 3])) // "[1, 2, 3]"\n`); case 'todosEmCondicao': return (`# todosEmCondicao(vetor, funcaoCondicional)\n\n` + `Retorna verdadeiro se todos os elementos do vetor satisfazem a condição especificada pela função.\n\n` + `**Sintaxe:** todosEmCondicao(vetor: qualquer[], funcaoCondicional: função)\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor de elementos\n` + ` - funcaoCondicional: Função que recebe um elemento e retorna verdadeiro ou falso\n\n` + `**Retorno:** Verdadeiro se todos os elementos satisfazem a condição, falso caso contrário.\n\n` + `**Exemplo:**\n` + `\tvar numeros = [2, 4, 6, 8]\n` + `\tvar todosPares = todosEmCondicao(numeros, funcao(n) { retorna n % 2 == 0 })\n` + `\tescreva(todosPares) // verdadeiro\n`); case 'tupla': return (`# tupla(vetor)\n\n` + `Transforma um vetor de elementos em uma tupla de N elementos, sendo N a largura do vetor.\n` + `Tuplas são estruturas imutáveis de tamanho fixo.\n\n` + `**Sintaxe:** tupla(vetor: qualquer[])\n\n` + `**Parâmetros:**\n` + ` - vetor: Um vetor com 2 a 10 elementos\n\n` + `**Retorno:** Uma tupla (Dupla, Trio, Quarteto, etc.) correspondente ao vetor.\n\n` + `**Exemplo:**\n` + `\tvar coordenadas = tupla([10, 20])\n` + `\tescreva(coordenadas.primeiro) // 10\n` + `\tescreva(coordenadas.segundo) // 20\n`); default: return (`Função global identificada, mas documentação específica não disponível.\n` + `Aridade: ${aridade} parâmetro(s).`); } } //# sourceMappingURL=comum.js.map