@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
49 lines • 2.42 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.InterpretadorPrisma = void 0;
const interpretador_1 = require("../../interpretador");
const biblioteca_global_1 = __importDefault(require("../../../bibliotecas/dialetos/prisma/biblioteca-global"));
/**
* Interpretador específico para o dialeto Prisma da linguagem Delégua.
* Carrega as funções nativas (embutidos) do Prisma durante a construção.
*/
class InterpretadorPrisma extends interpretador_1.Interpretador {
constructor(diretorioBase, performance = false, funcaoDeRetorno = null, funcaoDeRetornoMesmaLinha = null) {
super(diretorioBase, performance, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
(0, biblioteca_global_1.default)(this, this.pilhaEscoposExecucao);
}
async visitarExpressaoUnaria(expressao) {
if (expressao.operador.tipo === 'NAO') {
const operando = await this.avaliar(expressao.operando);
const valor = this.resolverValor(operando);
return !this.eVerdadeiro(valor);
}
if (expressao.operador.tipo === 'COMPRIMENTO') {
const operando = await this.avaliar(expressao.operando);
const valor = this.resolverValor(operando);
if (typeof valor === 'string')
return valor.length;
if (Array.isArray(valor))
return valor.length;
if (typeof valor === 'object' && valor !== null)
return Object.keys(valor).length;
return 0;
}
return super.visitarExpressaoUnaria(expressao);
}
async visitarExpressaoBinaria(expressao) {
if (expressao.operador.tipo === 'CONCATENACAO') {
const esquerda = this.resolverValor(await this.avaliar(expressao.esquerda));
const direita = this.resolverValor(await this.avaliar(expressao.direita));
const esqStr = esquerda !== null && esquerda !== undefined ? String(esquerda) : '';
const dirStr = direita !== null && direita !== undefined ? String(direita) : '';
return esqStr + dirStr;
}
return super.visitarExpressaoBinaria(expressao);
}
}
exports.InterpretadorPrisma = InterpretadorPrisma;
//# sourceMappingURL=interpretador-prisma.js.map