@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
269 lines • 15.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = default_1;
const estruturas_1 = require("../../../interpretador/estruturas");
const excecoes_1 = require("../../../excecoes");
/* eslint-disable prefer-rest-params */
function default_1(interpreter, globals) {
// Retorna um número aleatório entre 0 e 1.
globals.definirVariavel('aleatorio', new estruturas_1.FuncaoPadrao(0, function () {
return Math.random();
}));
// Retorna um número aleatório de acordo com o parâmetro passado.
// MIN(inclusivo) - MAX(exclusivo)
globals.definirVariavel('aleatorioEntre', new estruturas_1.FuncaoPadrao(1, function (_, min, max) {
const valorMinimoResolvido = min !== undefined && min.hasOwnProperty('valor') ? min.valor : min;
const valorMaximoResolvido = max !== undefined && max.hasOwnProperty('valor') ? max.valor : max;
if (!arguments[1]) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A função recebe ao menos um parâmetro');
}
if (arguments.length === 2) {
if (typeof valorMinimoResolvido !== 'number') {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'O parâmetro deve ser do tipo número');
}
return (Math.floor(Math.random() * (0 - valorMinimoResolvido)) + valorMinimoResolvido);
}
if (arguments.length > 3) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A quantidade de argumentos máxima é 2');
}
if (typeof valorMinimoResolvido !== 'number' ||
typeof valorMaximoResolvido !== 'number') {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Os dois parâmetros devem ser do tipo número.');
}
return (Math.floor(Math.random() * (valorMaximoResolvido - valorMinimoResolvido)) +
valorMinimoResolvido);
}));
globals.definirVariavel('algum', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
if (await callbackResolvido.chamar(interpreter, [arrayResolvido[index]])) {
return true;
}
}
return false;
}));
globals.definirVariavel('encontrar', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
if (await callbackResolvido.chamar(interpreter, [arrayResolvido[index]])) {
return arrayResolvido[index];
}
}
return null;
}));
globals.definirVariavel('encontrarUltimo', new estruturas_1.FuncaoPadrao(1, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = arrayResolvido.length - 1; index >= 0; --index) {
if (await callbackResolvido.chamar(interpreter, [arrayResolvido[index]])) {
return array[index];
}
}
}));
globals.definirVariavel('encontrarIndice', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
if (await callbackResolvido.chamar(interpreter, [arrayResolvido[index]])) {
return index;
}
}
return -1;
}));
globals.definirVariavel('encontrarUltimoIndice', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = arrayResolvido.length - 1; index >= 0; --index) {
if (await callbackResolvido.chamar(interpreter, [arrayResolvido[index]])) {
return index;
}
}
return -1;
}));
globals.definirVariavel('incluido', new estruturas_1.FuncaoPadrao(2, function (_, array, valor) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const valorResolvido = valor.hasOwnProperty('valor') ? valor.valor : valor;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
if (arrayResolvido[index] == valorResolvido) {
return true;
}
}
return false;
}));
globals.definirVariavel('inteiro', new estruturas_1.FuncaoPadrao(1, function (_, value) {
const valorResolvido = value && value.hasOwnProperty('valor') ? value.valor : value;
if (valorResolvido === undefined || valorResolvido === null) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Somente números podem passar para inteiro.');
}
if (!/^-{0,1}\d+$/.test(valorResolvido) && !/^\d+\.\d+$/.test(valorResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Somente números podem passar para inteiro.');
}
return parseInt(valorResolvido);
}));
globals.definirVariavel('mapear', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
let provisorio = [];
for (let index = 0; index < arrayResolvido.length; ++index) {
provisorio.push(await callbackResolvido.chamar(interpreter, [arrayResolvido[index]]));
}
return provisorio;
}));
globals.definirVariavel('filtrar', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
let provisorio = [];
for (let index = 0; index < arrayResolvido.length; ++index) {
if (await callbackResolvido.chamar(interpreter, [array[index]])) {
provisorio.push(arrayResolvido[index]);
}
}
return provisorio;
}));
globals.definirVariavel('paraCada', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
await callbackResolvido.chamar(interpreter, [arrayResolvido[index]]);
}
}));
globals.definirVariavel('reduzir', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback, padrao) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
let provisorio = padrao;
let inicio = 0;
if (!provisorio) {
provisorio = arrayResolvido[0];
inicio = 1;
}
for (let index = inicio; index < arrayResolvido.length; ++index) {
provisorio = await callbackResolvido.chamar(interpreter, [
provisorio,
arrayResolvido[index],
]);
}
return provisorio;
}));
globals.definirVariavel('todos', new estruturas_1.FuncaoPadrao(2, async function (_, array, callback) {
const arrayResolvido = array && array.hasOwnProperty('valor') ? array.valor : array;
const callbackResolvido = callback && callback.hasOwnProperty('valor') ? callback.valor : callback;
if (!Array.isArray(arrayResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.');
}
if (callbackResolvido.constructor !== estruturas_1.DeleguaFuncao) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.');
}
for (let index = 0; index < arrayResolvido.length; ++index) {
if (!(await callbackResolvido.chamar(interpreter, [arrayResolvido[index]]))) {
return false;
}
}
return true;
}));
globals.definirVariavel('ordenar', new estruturas_1.FuncaoPadrao(1, function (_, obj) {
let objetoResolvido = obj && obj.hasOwnProperty('valor') ? obj.valor : obj;
if (Array.isArray(objetoResolvido) == false) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Valor Inválido. Objeto inserido não é um vetor.');
}
let trocado;
let length = objetoResolvido.length;
do {
trocado = false;
for (let i = 0; i < length - 1; i++) {
if (objetoResolvido[i] > objetoResolvido[i + 1]) {
[objetoResolvido[i], objetoResolvido[i + 1]] = [
objetoResolvido[i + 1],
objetoResolvido[i],
];
trocado = true;
}
}
} while (trocado);
return objetoResolvido;
}));
globals.definirVariavel('real', new estruturas_1.FuncaoPadrao(1, function (_, value) {
const valorResolvido = value.hasOwnProperty('valor') ? value.valor : value;
if (!/^-{0,1}\d+$/.test(valorResolvido) && !/^\d+\.\d+$/.test(valorResolvido))
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Somente números podem passar para real.');
return parseFloat(valorResolvido);
}));
globals.definirVariavel('tamanho', new estruturas_1.FuncaoPadrao(1, function (_, obj) {
let objetoResolvido = obj && obj.hasOwnProperty('valor') ? obj.valor : obj;
if (objetoResolvido instanceof estruturas_1.DeleguaFuncao) {
return objetoResolvido.declaracao.parametros.length;
}
if (objetoResolvido instanceof estruturas_1.FuncaoPadrao) {
return objetoResolvido.valorAridade;
}
if (!isNaN(objetoResolvido)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Não é possível encontrar o tamanho de um número.');
}
return objetoResolvido.length;
}));
globals.definirVariavel('texto', new estruturas_1.FuncaoPadrao(1, function (_, value) {
const valorResolvido = value.hasOwnProperty('valor') ? value.valor : value;
return `${valorResolvido}`;
}));
globals.definirVariavel('exports', {});
return globals;
}
//# sourceMappingURL=biblioteca-global.js.map