@designliquido/delegua 1.25.0 → 1.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +39 -4
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/bin/package.json +3 -3
- package/interpretador/comum.d.ts +3 -0
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +64 -0
- package/interpretador/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +8 -66
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +4 -6
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts +2 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +9 -8
- package/interpretador/interpretador.js.map +1 -1
- package/package.json +3 -3
- package/tradutores/tradutor-assemblyscript.js +4 -4
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-elixir.js +19 -17
- package/tradutores/tradutor-elixir.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +5 -3
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-python.js +3 -3
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts +3 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-reverso-javascript.js +29 -1
- package/tradutores/tradutor-reverso-javascript.js.map +1 -1
- package/tradutores/tradutor-reverso-tenda.js +1 -1
- package/tradutores/tradutor-reverso-tenda.js.map +1 -1
- package/tradutores/tradutor-ruby.js +3 -3
- package/tradutores/tradutor-ruby.js.map +1 -1
- package/umd/delegua.js +182 -52
package/umd/delegua.js
CHANGED
|
@@ -3147,10 +3147,40 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3147
3147
|
case delegua_2.default.COLCHETE_ESQUERDO:
|
|
3148
3148
|
const tipoAcesso = this.resolverTipoAcessoIndiceVariavel(expressaoAnterior);
|
|
3149
3149
|
this.avancarEDevolverAnterior();
|
|
3150
|
-
|
|
3151
|
-
|
|
3152
|
-
|
|
3153
|
-
|
|
3150
|
+
// Determina se é intervalo ([:]), índice único ([indice]) ou
|
|
3151
|
+
// intervalo com passo ([inicio:fim:passo]).
|
|
3152
|
+
let indiceInicio = null;
|
|
3153
|
+
let indiceFim = null;
|
|
3154
|
+
let indicePasso = null;
|
|
3155
|
+
// Se começar com ':', não há início explícito (ex.: `[:fim]`).
|
|
3156
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
|
|
3157
|
+
indiceInicio = await this.expressao();
|
|
3158
|
+
}
|
|
3159
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
|
|
3160
|
+
// É um intervalo: [inicio:fim] ou [inicio:fim:passo].
|
|
3161
|
+
this.avancarEDevolverAnterior(); // Pula ':'.
|
|
3162
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO &&
|
|
3163
|
+
this.simbolos[this.atual].tipo !== delegua_2.default.DOIS_PONTOS) {
|
|
3164
|
+
indiceFim = await this.expressao();
|
|
3165
|
+
}
|
|
3166
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.DOIS_PONTOS) {
|
|
3167
|
+
this.avancarEDevolverAnterior(); // Pula segundo ':'.
|
|
3168
|
+
if (this.simbolos[this.atual].tipo !== delegua_2.default.COLCHETE_DIREITO) {
|
|
3169
|
+
indicePasso = await this.expressao();
|
|
3170
|
+
}
|
|
3171
|
+
}
|
|
3172
|
+
const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após intervalo.");
|
|
3173
|
+
// Fatiamento sempre retorna uma coleção do mesmo tipo de elemento.
|
|
3174
|
+
const tipoIntervalo = tipoAcesso + '[]';
|
|
3175
|
+
const acessoIntervalo = new construtos_1.AcessoIntervaloVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, indiceFim, indicePasso, simboloFechamento, tipoIntervalo);
|
|
3176
|
+
return await this.resolverCadeiaChamadas(acessoIntervalo);
|
|
3177
|
+
}
|
|
3178
|
+
else {
|
|
3179
|
+
// É um índice único
|
|
3180
|
+
const simboloFechamento = this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
3181
|
+
const acessoVariavel = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressaoAnterior, indiceInicio, simboloFechamento, tipoAcesso);
|
|
3182
|
+
return await this.resolverCadeiaChamadas(acessoVariavel);
|
|
3183
|
+
}
|
|
3154
3184
|
default:
|
|
3155
3185
|
return expressaoAnterior;
|
|
3156
3186
|
}
|
|
@@ -3752,6 +3782,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3752
3782
|
let caminhoPadrao = null;
|
|
3753
3783
|
while (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.CHAVE_DIREITA) &&
|
|
3754
3784
|
!this.estaNoFinal()) {
|
|
3785
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
|
|
3786
|
+
this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
|
|
3787
|
+
this.avancarEDevolverAnterior();
|
|
3788
|
+
continue;
|
|
3789
|
+
}
|
|
3755
3790
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CASO)) {
|
|
3756
3791
|
const caminhoCondicoes = [await this.expressao()];
|
|
3757
3792
|
this.consumir(delegua_2.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
|
|
@@ -19972,6 +20007,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
19972
20007
|
};
|
|
19973
20008
|
})();
|
|
19974
20009
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20010
|
+
exports.visitarExpressaoAcessoIntervaloVariavel = visitarExpressaoAcessoIntervaloVariavel;
|
|
19975
20011
|
exports.carregarBibliotecasGlobais = carregarBibliotecasGlobais;
|
|
19976
20012
|
exports.pontoEntradaAjuda = pontoEntradaAjuda;
|
|
19977
20013
|
exports.obterTopicoAjuda = obterTopicoAjuda;
|
|
@@ -19980,7 +20016,70 @@ const delegua_funcao_1 = require("./estruturas/delegua-funcao");
|
|
|
19980
20016
|
const descritor_tipo_classe_1 = require("./estruturas/descritor-tipo-classe");
|
|
19981
20017
|
const objeto_delegua_classe_1 = require("./estruturas/objeto-delegua-classe");
|
|
19982
20018
|
const construtos_1 = require("../construtos");
|
|
20019
|
+
const excecoes_1 = require("../excecoes");
|
|
19983
20020
|
const bibliotecaGlobal = __importStar(require("../bibliotecas/biblioteca-global"));
|
|
20021
|
+
async function visitarExpressaoAcessoIntervaloVariavel(interpretador, expressao) {
|
|
20022
|
+
const resultadoEntidade = await interpretador.avaliar(expressao.entidadeChamada);
|
|
20023
|
+
const objeto = interpretador.resolverValor(resultadoEntidade);
|
|
20024
|
+
let tamanho = 0;
|
|
20025
|
+
let itens;
|
|
20026
|
+
const ehTexto = typeof objeto === 'string';
|
|
20027
|
+
if (objeto instanceof construtos_1.TuplaN) {
|
|
20028
|
+
itens = objeto.elementos;
|
|
20029
|
+
tamanho = objeto.elementos.length;
|
|
20030
|
+
}
|
|
20031
|
+
else if (Array.isArray(objeto) || ehTexto) {
|
|
20032
|
+
itens = objeto;
|
|
20033
|
+
tamanho = objeto.length;
|
|
20034
|
+
}
|
|
20035
|
+
else {
|
|
20036
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Acesso por intervalo só é suportado em vetores, textos e tuplas.', expressao.linha);
|
|
20037
|
+
}
|
|
20038
|
+
let passo = 1;
|
|
20039
|
+
if (expressao.indicePasso) {
|
|
20040
|
+
const resPasso = await interpretador.avaliar(expressao.indicePasso);
|
|
20041
|
+
passo = interpretador.resolverValor(resPasso);
|
|
20042
|
+
}
|
|
20043
|
+
if (passo === 0) {
|
|
20044
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'O passo do fatiamento não pode ser zero.', expressao.linha);
|
|
20045
|
+
}
|
|
20046
|
+
let inicio = passo > 0 ? 0 : tamanho - 1;
|
|
20047
|
+
if (expressao.indiceInicio) {
|
|
20048
|
+
const resInicio = await interpretador.avaliar(expressao.indiceInicio);
|
|
20049
|
+
inicio = interpretador.resolverValor(resInicio);
|
|
20050
|
+
if (inicio < 0)
|
|
20051
|
+
inicio = tamanho + inicio;
|
|
20052
|
+
}
|
|
20053
|
+
let fim = passo > 0 ? tamanho : -1;
|
|
20054
|
+
if (expressao.indiceFim) {
|
|
20055
|
+
const resFim = await interpretador.avaliar(expressao.indiceFim);
|
|
20056
|
+
fim = interpretador.resolverValor(resFim);
|
|
20057
|
+
if (fim < 0)
|
|
20058
|
+
fim = tamanho + fim;
|
|
20059
|
+
}
|
|
20060
|
+
// Lógica de fatiamento para suportar "passo", pois o TypeScript não suporta nativamente
|
|
20061
|
+
const resultadoFatiado = [];
|
|
20062
|
+
if (passo > 0) {
|
|
20063
|
+
for (let i = inicio; i < fim; i += passo) {
|
|
20064
|
+
if (i >= 0 && i < tamanho) {
|
|
20065
|
+
resultadoFatiado.push(itens[i]);
|
|
20066
|
+
}
|
|
20067
|
+
}
|
|
20068
|
+
}
|
|
20069
|
+
else {
|
|
20070
|
+
for (let i = inicio; i > fim; i += passo) {
|
|
20071
|
+
if (i >= 0 && i < tamanho) {
|
|
20072
|
+
resultadoFatiado.push(itens[i]);
|
|
20073
|
+
}
|
|
20074
|
+
}
|
|
20075
|
+
}
|
|
20076
|
+
if (objeto instanceof construtos_1.TuplaN) {
|
|
20077
|
+
return new construtos_1.TuplaN(objeto.hashArquivo, objeto.linha, resultadoFatiado);
|
|
20078
|
+
}
|
|
20079
|
+
if (ehTexto)
|
|
20080
|
+
return resultadoFatiado.join('');
|
|
20081
|
+
return resultadoFatiado;
|
|
20082
|
+
}
|
|
19984
20083
|
function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
|
|
19985
20084
|
pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
19986
20085
|
pilhaEscoposExecucao.definirVariavel('aleatório', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
@@ -20551,7 +20650,7 @@ function obterAjudaFuncaoPadrao(funcaoPadrao) {
|
|
|
20551
20650
|
}
|
|
20552
20651
|
}
|
|
20553
20652
|
|
|
20554
|
-
},{"../bibliotecas/biblioteca-global":29,"../construtos":67,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
|
|
20653
|
+
},{"../bibliotecas/biblioteca-global":29,"../construtos":67,"../excecoes":141,"./estruturas/delegua-funcao":210,"./estruturas/descritor-tipo-classe":211,"./estruturas/funcao-padrao":213,"./estruturas/objeto-delegua-classe":219}],205:[function(require,module,exports){
|
|
20555
20654
|
"use strict";
|
|
20556
20655
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20557
20656
|
exports.EspacoMemoria = void 0;
|
|
@@ -23591,7 +23690,7 @@ class InterpretadorBase {
|
|
|
23591
23690
|
}
|
|
23592
23691
|
return objeto[valorIndice];
|
|
23593
23692
|
}
|
|
23594
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
23693
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
23595
23694
|
if (!Number.isInteger(valorIndice)) {
|
|
23596
23695
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
|
|
23597
23696
|
}
|
|
@@ -23602,7 +23701,7 @@ class InterpretadorBase {
|
|
|
23602
23701
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
|
|
23603
23702
|
}
|
|
23604
23703
|
const elemento = objeto.elementos[valorIndice];
|
|
23605
|
-
if (elemento
|
|
23704
|
+
if (elemento instanceof construtos_1.Literal) {
|
|
23606
23705
|
return elemento.valor;
|
|
23607
23706
|
}
|
|
23608
23707
|
return elemento;
|
|
@@ -23622,9 +23721,7 @@ class InterpretadorBase {
|
|
|
23622
23721
|
objeto instanceof estruturas_1.DeleguaFuncao ||
|
|
23623
23722
|
objeto instanceof estruturas_1.DescritorTipoClasse ||
|
|
23624
23723
|
objeto instanceof estruturas_1.DeleguaModulo) {
|
|
23625
|
-
|
|
23626
|
-
return 0;
|
|
23627
|
-
return objeto[valorIndice] || null;
|
|
23724
|
+
return objeto[valorIndice];
|
|
23628
23725
|
}
|
|
23629
23726
|
if (typeof objeto === primitivos_1.default.TEXTO) {
|
|
23630
23727
|
if (!Number.isInteger(valorIndice)) {
|
|
@@ -23825,7 +23922,7 @@ class InterpretadorBase {
|
|
|
23825
23922
|
// Outro caso que `instanceof` simplesmente não funciona para casos em Liquido,
|
|
23826
23923
|
// então testamos também o nome do construtor.
|
|
23827
23924
|
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
23828
|
-
objeto.constructor
|
|
23925
|
+
objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
|
|
23829
23926
|
const valor = await objeto.obter(expressao.simbolo, this);
|
|
23830
23927
|
if (valor === 0)
|
|
23831
23928
|
return 0;
|
|
@@ -24904,7 +25001,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24904
25001
|
}
|
|
24905
25002
|
return objeto[valorIndice];
|
|
24906
25003
|
}
|
|
24907
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25004
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
24908
25005
|
if (!Number.isInteger(valorIndice)) {
|
|
24909
25006
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Somente inteiros podem ser usados para indexar uma tupla.', expressao.linha));
|
|
24910
25007
|
}
|
|
@@ -24915,7 +25012,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24915
25012
|
return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.simboloFechamento, 'Índice da tupla fora de intervalo.', expressao.linha));
|
|
24916
25013
|
}
|
|
24917
25014
|
const elemento = objeto.elementos[valorIndice];
|
|
24918
|
-
if (elemento
|
|
25015
|
+
if (elemento instanceof construtos_1.Literal) {
|
|
24919
25016
|
return elemento.valor;
|
|
24920
25017
|
}
|
|
24921
25018
|
return elemento;
|
|
@@ -24928,9 +25025,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24928
25025
|
objeto instanceof estruturas_1.DeleguaFuncao ||
|
|
24929
25026
|
objeto instanceof estruturas_1.DescritorTipoClasse ||
|
|
24930
25027
|
objeto instanceof estruturas_1.DeleguaModulo) {
|
|
24931
|
-
|
|
24932
|
-
return 0;
|
|
24933
|
-
return objeto[valorIndice] || null;
|
|
25028
|
+
return objeto[valorIndice];
|
|
24934
25029
|
}
|
|
24935
25030
|
if (typeof objeto === primitivos_1.default.TEXTO) {
|
|
24936
25031
|
if (!Number.isInteger(valorIndice)) {
|
|
@@ -24949,6 +25044,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
24949
25044
|
linha: this.linhaDeclaracaoAtual,
|
|
24950
25045
|
}, 'Somente listas, dicionários, classes e objetos podem ter seus valores indexados.', expressao.linha));
|
|
24951
25046
|
}
|
|
25047
|
+
async visitarExpressaoAcessoIntervaloVariavel(expressao) {
|
|
25048
|
+
return (0, comum_1.visitarExpressaoAcessoIntervaloVariavel)(this, expressao);
|
|
25049
|
+
}
|
|
24952
25050
|
logicaPropriedadesEMetodosDeClasse(declaracao, superClassesResolvidas, mesclaResolvidas) {
|
|
24953
25051
|
const metodos = {};
|
|
24954
25052
|
const metodosEstaticos = {};
|
|
@@ -25140,7 +25238,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25140
25238
|
throw e;
|
|
25141
25239
|
}
|
|
25142
25240
|
}
|
|
25143
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25241
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25144
25242
|
const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.nomeMetodo];
|
|
25145
25243
|
if (metodoDePrimitivaTupla) {
|
|
25146
25244
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.nomeMetodo, 'tupla');
|
|
@@ -25337,7 +25435,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25337
25435
|
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método ou propriedade '${expressao.simbolo.lexema}' não encontrado em '${nomeClasse}'.`, expressao.linha);
|
|
25338
25436
|
}
|
|
25339
25437
|
}
|
|
25340
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25438
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25341
25439
|
const metodoDePrimitivaTupla = primitivas_tupla_1.default[expressao.simbolo.lexema];
|
|
25342
25440
|
if (metodoDePrimitivaTupla) {
|
|
25343
25441
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTupla.implementacao, expressao.simbolo.lexema, 'tupla');
|
|
@@ -25476,7 +25574,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
25476
25574
|
if (objeto.constructor === estruturas_1.ObjetoDeleguaClasse) {
|
|
25477
25575
|
return objeto.obterMetodo(expressao.nomePropriedade) || null;
|
|
25478
25576
|
}
|
|
25479
|
-
if (objeto instanceof construtos_1.TuplaN || objeto.constructor
|
|
25577
|
+
if (objeto instanceof construtos_1.TuplaN || objeto.constructor === construtos_1.TuplaN) {
|
|
25480
25578
|
const metodoPrimitivaTupla = primitivas_tupla_1.default[expressao.nomePropriedade];
|
|
25481
25579
|
if (metodoPrimitivaTupla) {
|
|
25482
25580
|
return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoPrimitivaTupla.implementacao, expressao.nomePropriedade, 'tupla');
|
|
@@ -46806,7 +46904,7 @@ class TradutorAssemblyScript {
|
|
|
46806
46904
|
}
|
|
46807
46905
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
46808
46906
|
let resultado = 'for (';
|
|
46809
|
-
if (declaracaoPara.inicializador
|
|
46907
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
46810
46908
|
resultado +=
|
|
46811
46909
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
|
|
46812
46910
|
}
|
|
@@ -46888,7 +46986,7 @@ class TradutorAssemblyScript {
|
|
|
46888
46986
|
if (!corpo)
|
|
46889
46987
|
return null;
|
|
46890
46988
|
for (const declaracao of corpo) {
|
|
46891
|
-
if (declaracao
|
|
46989
|
+
if (declaracao instanceof declaracoes_1.Retorna) {
|
|
46892
46990
|
const retorna = declaracao;
|
|
46893
46991
|
if (retorna.tipo && retorna.tipo !== 'vazio') {
|
|
46894
46992
|
return retorna.tipo;
|
|
@@ -47231,7 +47329,7 @@ class TradutorAssemblyScript {
|
|
|
47231
47329
|
return `Math.pow(${esquerda}, ${direita})`;
|
|
47232
47330
|
}
|
|
47233
47331
|
let resultado = '';
|
|
47234
|
-
if (binario.esquerda
|
|
47332
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
47235
47333
|
resultado +=
|
|
47236
47334
|
'(' +
|
|
47237
47335
|
this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) +
|
|
@@ -47240,7 +47338,7 @@ class TradutorAssemblyScript {
|
|
|
47240
47338
|
resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
47241
47339
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
47242
47340
|
resultado += ` ${operador} `;
|
|
47243
|
-
if (binario.direita
|
|
47341
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
47244
47342
|
resultado +=
|
|
47245
47343
|
'(' +
|
|
47246
47344
|
this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
|
|
@@ -47386,6 +47484,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
47386
47484
|
};
|
|
47387
47485
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47388
47486
|
exports.TradutorElixir = void 0;
|
|
47487
|
+
const construtos_1 = require("../construtos");
|
|
47488
|
+
const declaracoes_1 = require("../declaracoes");
|
|
47389
47489
|
const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
47390
47490
|
/**
|
|
47391
47491
|
* Tradutor que converte código Delégua para Elixir.
|
|
@@ -47597,27 +47697,27 @@ class TradutorElixir {
|
|
|
47597
47697
|
*/
|
|
47598
47698
|
extrairCamposDeDeclaracao(declaracao, campos) {
|
|
47599
47699
|
// Se é uma expressão de atribuição com isto.campo
|
|
47600
|
-
if (declaracao
|
|
47700
|
+
if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
|
|
47601
47701
|
const expressao = declaracao.expressao;
|
|
47602
47702
|
// DefinirValor: usado para isto.campo = valor
|
|
47603
|
-
if (expressao
|
|
47604
|
-
if (expressao.objeto && expressao.objeto.constructor
|
|
47703
|
+
if (expressao instanceof construtos_1.DefinirValor) {
|
|
47704
|
+
if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
|
|
47605
47705
|
campos.add(expressao.nome.lexema);
|
|
47606
47706
|
}
|
|
47607
47707
|
}
|
|
47608
47708
|
// Atribuir: pode ser usado para isto.campo = valor
|
|
47609
|
-
if (expressao
|
|
47709
|
+
if (expressao instanceof construtos_1.Atribuir) {
|
|
47610
47710
|
// Verificar se o alvo é um acesso a propriedade de isto
|
|
47611
|
-
if (expressao.alvo
|
|
47711
|
+
if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
|
|
47612
47712
|
const acesso = expressao.alvo;
|
|
47613
|
-
if (acesso.objeto && acesso.objeto.constructor
|
|
47713
|
+
if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
|
|
47614
47714
|
campos.add(acesso.nomePropriedade);
|
|
47615
47715
|
}
|
|
47616
47716
|
}
|
|
47617
47717
|
}
|
|
47618
47718
|
}
|
|
47619
47719
|
// Se é um bloco, processar declarações internas
|
|
47620
|
-
if (declaracao.constructor
|
|
47720
|
+
if (declaracao.constructor === declaracoes_1.Bloco) {
|
|
47621
47721
|
for (const decl of declaracao.declaracoes) {
|
|
47622
47722
|
this.extrairCamposDeDeclaracao(decl, campos);
|
|
47623
47723
|
}
|
|
@@ -47674,21 +47774,21 @@ class TradutorElixir {
|
|
|
47674
47774
|
async extrairInicializacoesStruct(corpo, nomeModulo) {
|
|
47675
47775
|
const inicializacoes = [];
|
|
47676
47776
|
for (const declaracao of corpo) {
|
|
47677
|
-
if (declaracao
|
|
47777
|
+
if (declaracao instanceof declaracoes_1.Expressao && declaracao.expressao) {
|
|
47678
47778
|
const expressao = declaracao.expressao;
|
|
47679
47779
|
// DefinirValor: isto.campo = valor
|
|
47680
|
-
if (expressao
|
|
47681
|
-
if (expressao.objeto && expressao.objeto.constructor
|
|
47780
|
+
if (expressao instanceof construtos_1.DefinirValor) {
|
|
47781
|
+
if (expressao.objeto && expressao.objeto.constructor === construtos_1.Isto) {
|
|
47682
47782
|
const campo = this.converterIdentificador(expressao.nome.lexema);
|
|
47683
47783
|
const valor = await expressao.valor.aceitar(this);
|
|
47684
47784
|
inicializacoes.push(`${campo}: ${valor}`);
|
|
47685
47785
|
}
|
|
47686
47786
|
}
|
|
47687
47787
|
// Atribuir: pode ser isto.campo = valor (se alvo é AcessoPropriedade)
|
|
47688
|
-
if (expressao
|
|
47689
|
-
if (expressao.alvo
|
|
47788
|
+
if (expressao instanceof construtos_1.Atribuir) {
|
|
47789
|
+
if (expressao.alvo instanceof construtos_1.AcessoPropriedade) {
|
|
47690
47790
|
const acesso = expressao.alvo;
|
|
47691
|
-
if (acesso.objeto && acesso.objeto.constructor
|
|
47791
|
+
if (acesso.objeto && acesso.objeto.constructor === construtos_1.Isto) {
|
|
47692
47792
|
const campo = this.converterIdentificador(acesso.nomePropriedade);
|
|
47693
47793
|
const valor = await expressao.valor.aceitar(this);
|
|
47694
47794
|
inicializacoes.push(`${campo}: ${valor}`);
|
|
@@ -47883,7 +47983,7 @@ class TradutorElixir {
|
|
|
47883
47983
|
const init = Array.isArray(declaracao.inicializador)
|
|
47884
47984
|
? declaracao.inicializador[0]
|
|
47885
47985
|
: declaracao.inicializador;
|
|
47886
|
-
if (init.constructor
|
|
47986
|
+
if (init.constructor === declaracoes_1.Var) {
|
|
47887
47987
|
nomeVar = this.converterIdentificador(init.simbolo.lexema);
|
|
47888
47988
|
if (init.inicializador) {
|
|
47889
47989
|
valorInicial = await init.inicializador.aceitar(this);
|
|
@@ -48116,7 +48216,7 @@ class TradutorElixir {
|
|
|
48116
48216
|
}
|
|
48117
48217
|
}
|
|
48118
48218
|
// Verificar se é instanciação de módulo (classe)
|
|
48119
|
-
if (expressao.entidadeChamada.constructor
|
|
48219
|
+
if (expressao.entidadeChamada.constructor === construtos_1.Variavel) {
|
|
48120
48220
|
const nomeEntidade = expressao.entidadeChamada.simbolo.lexema;
|
|
48121
48221
|
if (this.modulosConhecidos.has(this.converterNomeModulo(nomeEntidade))) {
|
|
48122
48222
|
// Chamada de construtor de módulo
|
|
@@ -48124,7 +48224,7 @@ class TradutorElixir {
|
|
|
48124
48224
|
}
|
|
48125
48225
|
}
|
|
48126
48226
|
// Verificar se é chamada de método (AcessoMetodo ou AcessoMetodoOuPropriedade)
|
|
48127
|
-
if (expressao.entidadeChamada.constructor
|
|
48227
|
+
if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodo) {
|
|
48128
48228
|
const acessoMetodo = expressao.entidadeChamada;
|
|
48129
48229
|
const objeto = await acessoMetodo.objeto.aceitar(this);
|
|
48130
48230
|
const metodo = this.converterIdentificador(acessoMetodo.nomeMetodo);
|
|
@@ -48136,7 +48236,7 @@ class TradutorElixir {
|
|
|
48136
48236
|
// Método de módulo/struct - passar o struct como primeiro argumento
|
|
48137
48237
|
return Promise.resolve(`${this.obterNomeModulo(objeto)}.${metodo}(${objeto}${argumentos.length > 0 ? ', ' + argumentos.join(', ') : ''})`);
|
|
48138
48238
|
}
|
|
48139
|
-
if (expressao.entidadeChamada.constructor
|
|
48239
|
+
if (expressao.entidadeChamada.constructor === construtos_1.AcessoMetodoOuPropriedade) {
|
|
48140
48240
|
const acesso = expressao.entidadeChamada;
|
|
48141
48241
|
const objeto = await acesso.objeto.aceitar(this);
|
|
48142
48242
|
const simbolo = this.converterIdentificador(acesso.simbolo.lexema);
|
|
@@ -48340,7 +48440,7 @@ class TradutorElixir {
|
|
|
48340
48440
|
}
|
|
48341
48441
|
exports.TradutorElixir = TradutorElixir;
|
|
48342
48442
|
|
|
48343
|
-
},{"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
|
|
48443
|
+
},{"../construtos":67,"../declaracoes":117,"../tipos-de-simbolos/delegua":258}],280:[function(require,module,exports){
|
|
48344
48444
|
"use strict";
|
|
48345
48445
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
48346
48446
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -48533,11 +48633,13 @@ class TradutorJavaScript {
|
|
|
48533
48633
|
resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
48534
48634
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
48535
48635
|
resultado += ` ${operador} `;
|
|
48536
|
-
if (binario.direita.constructor
|
|
48636
|
+
if (binario.direita.constructor === construtos_1.Agrupamento) {
|
|
48637
|
+
const agrupamentoDireita = binario.direita;
|
|
48537
48638
|
resultado +=
|
|
48538
48639
|
'(' +
|
|
48539
|
-
this.dicionarioConstrutos[
|
|
48640
|
+
this.dicionarioConstrutos[agrupamentoDireita.constructor.name](binario.direita) +
|
|
48540
48641
|
')';
|
|
48642
|
+
}
|
|
48541
48643
|
else
|
|
48542
48644
|
resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
48543
48645
|
return resultado;
|
|
@@ -48794,7 +48896,7 @@ class TradutorJavaScript {
|
|
|
48794
48896
|
}
|
|
48795
48897
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
48796
48898
|
let resultado = 'for (';
|
|
48797
|
-
if (declaracaoPara.inicializador
|
|
48899
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
48798
48900
|
resultado +=
|
|
48799
48901
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
48800
48902
|
}
|
|
@@ -50527,7 +50629,7 @@ class TradutorPython {
|
|
|
50527
50629
|
if (funcao.corpo.length > 0) {
|
|
50528
50630
|
const primeiraDeclaracao = funcao.corpo[0];
|
|
50529
50631
|
// Se for uma declaração de retorno, extraímos a expressão
|
|
50530
|
-
if (primeiraDeclaracao
|
|
50632
|
+
if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
|
|
50531
50633
|
const retorna = primeiraDeclaracao;
|
|
50532
50634
|
if (retorna.valor) {
|
|
50533
50635
|
expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
|
|
@@ -50640,14 +50742,14 @@ class TradutorPython {
|
|
|
50640
50742
|
traduzirConstrutoBinario(binario) {
|
|
50641
50743
|
let resultado = '';
|
|
50642
50744
|
const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
50643
|
-
if (binario.esquerda
|
|
50745
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
50644
50746
|
resultado += '(' + valorEsquerdo + ')';
|
|
50645
50747
|
else
|
|
50646
50748
|
resultado += valorEsquerdo;
|
|
50647
50749
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
50648
50750
|
resultado += ` ${operador} `;
|
|
50649
50751
|
const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
50650
|
-
if (binario.direita
|
|
50752
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
50651
50753
|
resultado += '(' + valorDireito + ')';
|
|
50652
50754
|
else
|
|
50653
50755
|
resultado += valorDireito;
|
|
@@ -51396,6 +51498,7 @@ class TradutorReversoJavaScript {
|
|
|
51396
51498
|
LogicalExpression: this.traduzirConstrutoLogico.bind(this),
|
|
51397
51499
|
MemberExpression: this.traduzirExpressao.bind(this),
|
|
51398
51500
|
NewExpression: this.traduzirNovo.bind(this),
|
|
51501
|
+
ObjectExpression: this.traduzirConstrutoObjeto.bind(this),
|
|
51399
51502
|
ThisExpression: () => 'isto',
|
|
51400
51503
|
UpdateExpression: this.traduzirAtualizacaoVariavel.bind(this),
|
|
51401
51504
|
// Variavel: this.traduzirConstrutoVariavel.bind(this),
|
|
@@ -51471,6 +51574,31 @@ class TradutorReversoJavaScript {
|
|
|
51471
51574
|
traduzirIdentificador(identificador) {
|
|
51472
51575
|
return identificador.name;
|
|
51473
51576
|
}
|
|
51577
|
+
traduzirConstrutoObjeto(objeto) {
|
|
51578
|
+
if (!objeto.properties.length) {
|
|
51579
|
+
return '{}';
|
|
51580
|
+
}
|
|
51581
|
+
let resultado = '{';
|
|
51582
|
+
for (const propriedade of objeto.properties) {
|
|
51583
|
+
if (propriedade.type === 'SpreadElement') {
|
|
51584
|
+
const spread = propriedade;
|
|
51585
|
+
resultado +=
|
|
51586
|
+
'...' + this.dicionarioConstrutos[spread.argument.type](spread.argument) + ', ';
|
|
51587
|
+
continue;
|
|
51588
|
+
}
|
|
51589
|
+
const propriedadeObjeto = propriedade;
|
|
51590
|
+
const chave = propriedadeObjeto.key.type === 'Identifier'
|
|
51591
|
+
? `'${propriedadeObjeto.key.name}'`
|
|
51592
|
+
: this.dicionarioConstrutos[propriedadeObjeto.key.type](propriedadeObjeto.key);
|
|
51593
|
+
const valor = this.dicionarioConstrutos[propriedadeObjeto.value.type](propriedadeObjeto.value);
|
|
51594
|
+
resultado += `${chave}: ${valor}, `;
|
|
51595
|
+
}
|
|
51596
|
+
if (objeto.properties.length > 0) {
|
|
51597
|
+
resultado = resultado.slice(0, -2);
|
|
51598
|
+
}
|
|
51599
|
+
resultado += '}';
|
|
51600
|
+
return resultado;
|
|
51601
|
+
}
|
|
51474
51602
|
traduzirAtualizacaoVariavel(atualizarVariavel) {
|
|
51475
51603
|
let resultado = '';
|
|
51476
51604
|
resultado += this.dicionarioConstrutos[atualizarVariavel.argument.constructor.name](atualizarVariavel.argument);
|
|
@@ -51527,6 +51655,8 @@ class TradutorReversoJavaScript {
|
|
|
51527
51655
|
return 'verdadeiro';
|
|
51528
51656
|
if (literal.raw === 'false')
|
|
51529
51657
|
return 'falso';
|
|
51658
|
+
if (literal.value === null || literal.raw === 'null')
|
|
51659
|
+
return 'nulo';
|
|
51530
51660
|
return `${literal.raw}`;
|
|
51531
51661
|
}
|
|
51532
51662
|
traduzirConstrutoBinario(binario) {
|
|
@@ -51671,7 +51801,7 @@ class TradutorReversoJavaScript {
|
|
|
51671
51801
|
resultado += this.logicaComumBlocoEscopo(declaracao.consequent);
|
|
51672
51802
|
if (declaracao?.alternate) {
|
|
51673
51803
|
resultado += 'senao ';
|
|
51674
|
-
if (declaracao.alternate.
|
|
51804
|
+
if (declaracao.alternate.type === 'BlockStatement') {
|
|
51675
51805
|
const bloco = declaracao.alternate;
|
|
51676
51806
|
resultado += this.logicaComumBlocoEscopo(bloco);
|
|
51677
51807
|
return resultado;
|
|
@@ -52771,7 +52901,7 @@ class TradutorReversoTenda {
|
|
|
52771
52901
|
}
|
|
52772
52902
|
traduzirDeclaracaoPara(declaracaoPara) {
|
|
52773
52903
|
let resultado = 'para ';
|
|
52774
|
-
if (declaracaoPara.inicializador
|
|
52904
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
52775
52905
|
resultado +=
|
|
52776
52906
|
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
52777
52907
|
}
|
|
@@ -53191,7 +53321,7 @@ class TradutorRuby {
|
|
|
53191
53321
|
if (funcao.corpo.length > 0) {
|
|
53192
53322
|
const primeiraDeclaracao = funcao.corpo[0];
|
|
53193
53323
|
// Se for uma declaração de retorno, extraímos a expressão
|
|
53194
|
-
if (primeiraDeclaracao
|
|
53324
|
+
if (primeiraDeclaracao instanceof declaracoes_1.Retorna) {
|
|
53195
53325
|
const retorna = primeiraDeclaracao;
|
|
53196
53326
|
if (retorna.valor) {
|
|
53197
53327
|
expressao = this.dicionarioConstrutos[retorna.valor.constructor.name](retorna.valor);
|
|
@@ -53305,14 +53435,14 @@ class TradutorRuby {
|
|
|
53305
53435
|
traduzirConstrutoBinario(binario) {
|
|
53306
53436
|
let resultado = '';
|
|
53307
53437
|
const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
53308
|
-
if (binario.esquerda
|
|
53438
|
+
if (binario.esquerda instanceof construtos_1.Agrupamento)
|
|
53309
53439
|
resultado += '(' + valorEsquerdo + ')';
|
|
53310
53440
|
else
|
|
53311
53441
|
resultado += valorEsquerdo;
|
|
53312
53442
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
53313
53443
|
resultado += ` ${operador} `;
|
|
53314
53444
|
const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
53315
|
-
if (binario.direita
|
|
53445
|
+
if (binario.direita instanceof construtos_1.Agrupamento)
|
|
53316
53446
|
resultado += '(' + valorDireito + ')';
|
|
53317
53447
|
else
|
|
53318
53448
|
resultado += valorDireito;
|