liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
80 lines • 3.98 kB
JavaScript
;
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