UNPKG

@designliquido/delegua

Version:

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

126 lines 5.63 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TipoNativoSimbolo = void 0; exports.inferirTipoVariavel = inferirTipoVariavel; exports.tipoInferenciaParaTipoDadosElementar = tipoInferenciaParaTipoDadosElementar; const primitivos_1 = __importDefault(require("./tipos-de-dados/primitivos")); const delegua_1 = __importDefault(require("./tipos-de-dados/delegua")); const delegua_2 = __importDefault(require("./tipos-de-simbolos/delegua")); var TipoNativoSimbolo; (function (TipoNativoSimbolo) { TipoNativoSimbolo["ESCREVA"] = "<palavra reservada escreva ajuda=\"palavra reservada usada para apresentar informa\u00E7\u00F5es\">"; TipoNativoSimbolo["LEIA"] = "<palavra reservada leia ajuda=\"palavra reservada usada para entrada de dados\">"; TipoNativoSimbolo["FUNCAO"] = "<palavra reservada funcao ajuda=\"palavra reservada usada para criar fun\u00E7\u00F5es\">"; TipoNativoSimbolo["SE"] = "<palavra reservada se ajuda=\"palavra reservada usada para estruturas condicionais\">"; TipoNativoSimbolo["ENQUANTO"] = "<palavra reservada enquanto ajuda=\"palavra reservada usada para loops enquanto\">"; TipoNativoSimbolo["PARA"] = "<palavra reservada para ajuda=\"palavra reservada usada para loops para\">"; TipoNativoSimbolo["RETORNA"] = "<palavra reservada retornar ajuda=\"palavra reservada usada para retornar valores em fun\u00E7\u00F5es\">"; TipoNativoSimbolo["INTEIRO"] = "<palavra reservada inteiro ajuda=\"palavra reservada usada para definir vari\u00E1veis do tipo inteiro\">"; TipoNativoSimbolo["TEXTO"] = "<palavra reservada texto ajuda=\"palavra reservada usada para definir vari\u00E1veis do tipo texto\">"; TipoNativoSimbolo["BOOLEANO"] = "<palavra reservada booleano ajuda=\"palavra reservada usada para definir vari\u00E1veis do tipo booleano\">"; TipoNativoSimbolo["VAZIO"] = "<palavra reservada vazio ajuda=\"palavra reservada usada para definir fun\u00E7\u00F5es que n\u00E3o retornam valores\">"; })(TipoNativoSimbolo || (exports.TipoNativoSimbolo = TipoNativoSimbolo = {})); function inferirVetor(vetor) { const tiposEmVetor = new Set(vetor.map((elemento) => elemento.constructor.name)); if (tiposEmVetor.size > 1) { return 'vetor'; } const tipoVetor = tiposEmVetor.values().next().value; switch (tipoVetor) { case 'bigint': return 'longo[]'; case 'boolean': return 'lógico[]'; case 'number': return 'número[]'; case 'string': return 'texto[]'; case 'object': const tiposObjetosEmVetor = new Set(vetor.map((elemento) => elemento.tipo)); if (tiposObjetosEmVetor.size > 1) { return 'vetor'; } return `${tiposObjetosEmVetor.values().next().value}[]`; case 'Literal': // TODO: Não sei se é seguro inferir pelo primeiro valor do vetor. return `${vetor[0].tipo}[]`; default: return 'vetor'; } } function inferirTipoVariavel(variavel) { if (variavel === null) { return 'nulo'; } const tipo = variavel.constructor.name; switch (tipo) { case 'String': case 'string': return 'texto'; case 'Number': case 'number': return 'número'; case 'bigint': return 'longo'; case 'Boolean': case 'boolean': return 'lógico'; case 'undefined': return 'nulo'; case 'Object': case 'object': if (variavel === null) return 'nulo'; return 'dicionário'; case 'Array': case 'Vetor': return inferirVetor(variavel); case 'DeleguaFuncao': return 'função'; case 'DeleguaModulo': return 'módulo'; case 'Classe': return 'objeto'; case 'Simbolo': // TODO: Repensar. const simbolo = variavel; switch (simbolo.tipo) { case primitivos_1.default.BOOLEANO: return TipoNativoSimbolo.BOOLEANO; case delegua_2.default.ENQUANTO: return TipoNativoSimbolo.ENQUANTO; case delegua_2.default.ESCREVA: return TipoNativoSimbolo.ESCREVA; case delegua_2.default.FUNCAO: case delegua_2.default.FUNÇÃO: return TipoNativoSimbolo.FUNCAO; case delegua_2.default.LEIA: return TipoNativoSimbolo.LEIA; case delegua_2.default.PARA: return TipoNativoSimbolo.PARA; case delegua_2.default.RETORNA: return TipoNativoSimbolo.RETORNA; case delegua_2.default.SE: return TipoNativoSimbolo.SE; case primitivos_1.default.TEXTO: return TipoNativoSimbolo.TEXTO; case delegua_1.default.VAZIO: return TipoNativoSimbolo.VAZIO; } case 'function': case 'FuncaoPadrao': return 'função'; case 'symbol': return 'símbolo'; } } function tipoInferenciaParaTipoDadosElementar(tipoInferencia) { switch (tipoInferencia) { // TODO: Colocar exceções aqui. default: return tipoInferencia; } } //# sourceMappingURL=inferenciador.js.map