UNPKG

liquido

Version:

Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português

80 lines 3.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.GeradorExpressoes = void 0; const estruturas_1 = require("@designliquido/delegua/interpretador/estruturas"); const construtos_1 = require("@designliquido/delegua/construtos"); const lexador_1 = require("@designliquido/delegua/lexador"); const declaracoes_1 = require("@designliquido/delegua/declaracoes"); /** * O gerador de expressões é uma classe facilitadora para a criação de * objetos que normalmente são criados pelo Avaliador Sintático de * Delégua. */ class GeradorExpressoes { gerarAcessoIndiceVariavel(variavel, indice) { return new construtos_1.AcessoIndiceVariavel(-1, new construtos_1.Variavel(-1, new lexador_1.Simbolo('IDENTIFICADOR', variavel, null, -1, -1)), new construtos_1.Literal(-1, -1, indice), new lexador_1.Simbolo('COLCHETE_DIREITO', ']', null, -1, -1)); } gerarAcessoMetodoOuPropriedade(objeto, metodoOuPropriedade) { return new construtos_1.AcessoMetodoOuPropriedade(-1, objeto, new lexador_1.Simbolo('IDENTIFICADOR', metodoOuPropriedade, null, -1, -1)); } gerarBlocoEscopo(declaracoes) { return new declaracoes_1.Bloco(-1, -1, declaracoes); } gerarChamada(entidadeChamada, argumentos = []) { return new construtos_1.Chamada(-1, entidadeChamada, argumentos); } gerarConstrutoBinario(ladoEsquerdo, operador, ladoDireito) { return new construtos_1.Binario(-1, ladoEsquerdo, operador, ladoDireito); } gerarConstrutoFuncao(parametros, corpo) { return new construtos_1.FuncaoConstruto(-1, -1, parametros, corpo); } gerarDeclaracaoSe(condicao, caminhoEntao, caminhoSenao) { return new declaracoes_1.Se(condicao, caminhoEntao, [], caminhoSenao); } gerarLiteral(valor) { return new construtos_1.Literal(-1, -1, valor); } gerarMetodo(nomeMetodo, declaracao) { return new estruturas_1.DeleguaFuncao(nomeMetodo, declaracao, null, false); } gerarOperadorComparacao(tipo) { switch (tipo) { case 'maior': return new lexador_1.Simbolo('MAIOR', '>', null, -1, -1); case 'menor': return new lexador_1.Simbolo('MENOR', '<', null, -1, -1); case 'maiorOuIgual': return new lexador_1.Simbolo('MAIOR_IGUAL', '>=', null, -1, -1); case 'menorOuIgual': return new lexador_1.Simbolo('MENOR_IGUAL', '<=', null, -1, -1); case 'igual': return new lexador_1.Simbolo('IGUAL_IGUAL', '==', null, -1, -1); case 'diferente': return new lexador_1.Simbolo('DIFERENTE', '!=', null, -1, -1); } } gerarParametro(nome, tipo, abrangencia = 'padrao') { return { abrangencia: abrangencia, tipoDado: tipo, nome: new lexador_1.Simbolo('IDENTIFICADOR', nome, null, -1, -1) }; } gerarReferenciaVariavel(nomeVariavel) { return new construtos_1.Variavel(-1, new lexador_1.Simbolo('IDENTIFICADOR', nomeVariavel, null, -1, -1)); } /** * Gera uma atribuição de valor em uma propriedade de classe. * Por exemplo, `isto.a = 1` seria algo como * `gerarAtribuicaoValorEmPropriedadeClasse('a', 1)`. */ gerarAtribuicaoValorEmPropriedadeClasse(nomePropriedade, valor) { return new declaracoes_1.Expressao(new construtos_1.DefinirValor(-1, -1, new construtos_1.Isto(-1, -1, new lexador_1.Simbolo('ISTO', 'isto', null, -1, -1)), new lexador_1.Simbolo('IDENTIFICADOR', nomePropriedade, null, -1, -1), valor)); } gerarRetornoDeFuncao(nomeVariavel) { return new declaracoes_1.Retorna(new lexador_1.Simbolo('IDENTIFICADOR', 'qualquerCoisa', null, -1, -1), new construtos_1.Variavel(-1, new lexador_1.Simbolo('IDENTIFICADOR', nomeVariavel, null, -1, -1))); } } exports.GeradorExpressoes = GeradorExpressoes; //# sourceMappingURL=gerador-expressoes.js.map