@designliquido/delegua 0.39.1 → 0.39.2
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/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +22 -11
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +3 -6
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -2
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +1 -2
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +2 -3
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
- package/bibliotecas/primitivas-vetor.js +1 -1
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/atribuir.d.ts +3 -2
- package/construtos/atribuir.d.ts.map +1 -1
- package/construtos/atribuir.js +7 -4
- package/construtos/atribuir.js.map +1 -1
- package/formatadores/formatador-delegua.js +1 -1
- package/formatadores/formatador-delegua.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +2 -2
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +2 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +19 -1
- package/interpretador/interpretador-base.js.map +1 -1
- package/lexador/lexador.js +16 -16
- package/lexador/lexador.js.map +1 -1
- package/package.json +1 -1
- package/tradutores/tradutor-assemblyscript.js +1 -1
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +18 -3
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-python.d.ts +11 -6
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +146 -87
- package/tradutores/tradutor-python.js.map +1 -1
- package/umd/delegua.js +216 -127
package/umd/delegua.js
CHANGED
|
@@ -720,18 +720,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
720
720
|
].includes(expressao.operador.tipo)) {
|
|
721
721
|
if (expressao.esquerda instanceof construtos_1.AcessoIndiceVariavel) {
|
|
722
722
|
const entidade = expressao.esquerda;
|
|
723
|
-
|
|
724
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao, entidade.indice);
|
|
723
|
+
return new construtos_1.Atribuir(this.hashArquivo, entidade.entidadeChamada, expressao, entidade.indice, expressao.operador);
|
|
725
724
|
}
|
|
726
|
-
|
|
727
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao);
|
|
725
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao.esquerda, expressao, undefined, expressao.operador);
|
|
728
726
|
}
|
|
729
727
|
else if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.IGUAL)) {
|
|
730
728
|
const igual = this.simbolos[this.atual - 1];
|
|
731
729
|
const valor = this.expressao();
|
|
732
730
|
if (expressao instanceof construtos_1.Variavel) {
|
|
733
|
-
|
|
734
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
731
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
|
|
735
732
|
}
|
|
736
733
|
if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
|
|
737
734
|
return new construtos_1.DefinirValor(this.hashArquivo, igual.linha, expressao.objeto, expressao.simbolo, valor);
|
|
@@ -1943,8 +1940,7 @@ class AvaliadorSintaticoEguaClassico {
|
|
|
1943
1940
|
const igual = this.simboloAnterior();
|
|
1944
1941
|
const valor = this.atribuir();
|
|
1945
1942
|
if (expressao instanceof construtos_1.Variavel) {
|
|
1946
|
-
|
|
1947
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
1943
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
|
|
1948
1944
|
}
|
|
1949
1945
|
else if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
|
|
1950
1946
|
const get = expressao;
|
|
@@ -2620,8 +2616,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
2620
2616
|
const igual = this.simboloAnterior();
|
|
2621
2617
|
const valor = this.atribuir();
|
|
2622
2618
|
if (expressao instanceof construtos_1.Variavel) {
|
|
2623
|
-
|
|
2624
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
2619
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
|
|
2625
2620
|
}
|
|
2626
2621
|
if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
|
|
2627
2622
|
return new construtos_1.DefinirValor(this.hashArquivo, 0, expressao.objeto, expressao.simbolo, valor);
|
|
@@ -3091,10 +3086,9 @@ class AvaliadorSintaticoPortugolIpt extends avaliador_sintatico_base_1.Avaliador
|
|
|
3091
3086
|
const setaAtribuicao = this.simbolos[this.atual - 1];
|
|
3092
3087
|
const valor = this.atribuir();
|
|
3093
3088
|
if (expressao instanceof construtos_1.Variavel) {
|
|
3094
|
-
|
|
3095
|
-
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
3089
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
|
|
3096
3090
|
}
|
|
3097
|
-
|
|
3091
|
+
if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
3098
3092
|
return new construtos_1.AtribuicaoPorIndice(this.hashArquivo, expressao.linha, expressao.entidadeChamada, expressao.indice, valor);
|
|
3099
3093
|
}
|
|
3100
3094
|
throw this.erro(setaAtribuicao, 'Tarefa de atribuição inválida');
|
|
@@ -4346,7 +4340,7 @@ exports.default = {
|
|
|
4346
4340
|
implementacao: (interpretador, vetor) => Promise.resolve(vetor.reverse())
|
|
4347
4341
|
},
|
|
4348
4342
|
juntar: {
|
|
4349
|
-
tipoRetorno: '
|
|
4343
|
+
tipoRetorno: 'texto',
|
|
4350
4344
|
implementacao: (interpretador, vetor, separador) => Promise.resolve(vetor.join(separador))
|
|
4351
4345
|
},
|
|
4352
4346
|
mapear: {
|
|
@@ -4588,17 +4582,20 @@ exports.Atribuir = void 0;
|
|
|
4588
4582
|
* Construto de atribuição de um valor a um símbolo.
|
|
4589
4583
|
*/
|
|
4590
4584
|
class Atribuir {
|
|
4591
|
-
constructor(hashArquivo,
|
|
4585
|
+
constructor(hashArquivo, alvo, valor,
|
|
4592
4586
|
// indice so é usado para variaveis de vetores
|
|
4593
4587
|
// TODO: criar alguma validaçao para garantir que `indice` só seja passado para variáveis de vetores
|
|
4594
|
-
indice) {
|
|
4595
|
-
this.linha = Number(
|
|
4588
|
+
indice, simboloOperador) {
|
|
4589
|
+
this.linha = Number(alvo.linha);
|
|
4596
4590
|
this.hashArquivo = hashArquivo;
|
|
4597
|
-
this.
|
|
4591
|
+
this.alvo = alvo;
|
|
4598
4592
|
this.valor = valor;
|
|
4599
4593
|
if (indice !== undefined) {
|
|
4600
4594
|
this.indice = indice;
|
|
4601
4595
|
}
|
|
4596
|
+
if (simboloOperador !== undefined) {
|
|
4597
|
+
this.simboloOperador = simboloOperador;
|
|
4598
|
+
}
|
|
4602
4599
|
}
|
|
4603
4600
|
async aceitar(visitante) {
|
|
4604
4601
|
return await visitante.visitarExpressaoDeAtribuicao(this);
|
|
@@ -6736,7 +6733,7 @@ class FormatadorDelegua {
|
|
|
6736
6733
|
this.visitarExpressaoBinaria(expressao.valor);
|
|
6737
6734
|
}
|
|
6738
6735
|
else {
|
|
6739
|
-
this.codigoFormatado += `${expressao.
|
|
6736
|
+
this.codigoFormatado += `${this.formatarDeclaracaoOuConstruto(expressao.alvo)} = `;
|
|
6740
6737
|
this.formatarDeclaracaoOuConstruto(expressao.valor);
|
|
6741
6738
|
}
|
|
6742
6739
|
this.codigoFormatado += `${this.quebraLinha}`;
|
|
@@ -8355,7 +8352,25 @@ class InterpretadorBase {
|
|
|
8355
8352
|
if (expressao.indice) {
|
|
8356
8353
|
indice = await this.avaliar(expressao.indice);
|
|
8357
8354
|
}
|
|
8358
|
-
|
|
8355
|
+
switch (expressao.alvo.constructor.name) {
|
|
8356
|
+
case 'Variavel':
|
|
8357
|
+
const alvoVariavel = expressao.alvo;
|
|
8358
|
+
this.pilhaEscoposExecucao.atribuirVariavel(alvoVariavel.simbolo, valorResolvido, indice);
|
|
8359
|
+
break;
|
|
8360
|
+
case 'AcessoMetodoOuPropriedade':
|
|
8361
|
+
// Nunca será método aqui: apenas propriedade.
|
|
8362
|
+
const alvoPropriedade = expressao.alvo;
|
|
8363
|
+
const variavelObjeto = await this.avaliar(alvoPropriedade.objeto);
|
|
8364
|
+
const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
|
|
8365
|
+
const valor = await this.avaliar(expressao.valor);
|
|
8366
|
+
if (objeto.constructor.name === 'ObjetoDeleguaClasse') {
|
|
8367
|
+
const objetoDeleguaClasse = objeto;
|
|
8368
|
+
objetoDeleguaClasse.definir(alvoPropriedade.simbolo, valor);
|
|
8369
|
+
}
|
|
8370
|
+
break;
|
|
8371
|
+
default:
|
|
8372
|
+
throw new excecoes_1.ErroEmTempoDeExecucao(null, `Atribuição com caso faltante: ${expressao.alvo.constructor.name}.`);
|
|
8373
|
+
}
|
|
8359
8374
|
return valorResolvido;
|
|
8360
8375
|
}
|
|
8361
8376
|
procurarVariavel(simbolo) {
|
|
@@ -11784,11 +11799,11 @@ class Lexador {
|
|
|
11784
11799
|
this.inicioSimbolo = this.atual;
|
|
11785
11800
|
this.avancar();
|
|
11786
11801
|
if (this.simboloAtual() === '=') {
|
|
11787
|
-
this.adicionarSimbolo(delegua_1.default.MENOS_IGUAL);
|
|
11802
|
+
this.adicionarSimbolo(delegua_1.default.MENOS_IGUAL, '-=');
|
|
11788
11803
|
this.avancar();
|
|
11789
11804
|
}
|
|
11790
11805
|
else if (this.simboloAtual() === '-') {
|
|
11791
|
-
this.adicionarSimbolo(delegua_1.default.DECREMENTAR);
|
|
11806
|
+
this.adicionarSimbolo(delegua_1.default.DECREMENTAR, '--');
|
|
11792
11807
|
this.avancar();
|
|
11793
11808
|
}
|
|
11794
11809
|
else {
|
|
@@ -11799,11 +11814,11 @@ class Lexador {
|
|
|
11799
11814
|
this.inicioSimbolo = this.atual;
|
|
11800
11815
|
this.avancar();
|
|
11801
11816
|
if (this.simboloAtual() === '=') {
|
|
11802
|
-
this.adicionarSimbolo(delegua_1.default.MAIS_IGUAL);
|
|
11817
|
+
this.adicionarSimbolo(delegua_1.default.MAIS_IGUAL, '+=');
|
|
11803
11818
|
this.avancar();
|
|
11804
11819
|
}
|
|
11805
11820
|
else if (this.simboloAtual() === '+') {
|
|
11806
|
-
this.adicionarSimbolo(delegua_1.default.INCREMENTAR);
|
|
11821
|
+
this.adicionarSimbolo(delegua_1.default.INCREMENTAR, '++');
|
|
11807
11822
|
this.avancar();
|
|
11808
11823
|
}
|
|
11809
11824
|
else {
|
|
@@ -11820,7 +11835,7 @@ class Lexador {
|
|
|
11820
11835
|
switch (this.simboloAtual()) {
|
|
11821
11836
|
case '=':
|
|
11822
11837
|
this.avancar();
|
|
11823
|
-
this.adicionarSimbolo(delegua_1.default.MODULO_IGUAL);
|
|
11838
|
+
this.adicionarSimbolo(delegua_1.default.MODULO_IGUAL, '%=');
|
|
11824
11839
|
break;
|
|
11825
11840
|
default:
|
|
11826
11841
|
this.adicionarSimbolo(delegua_1.default.MODULO);
|
|
@@ -11833,11 +11848,11 @@ class Lexador {
|
|
|
11833
11848
|
switch (this.simboloAtual()) {
|
|
11834
11849
|
case '*':
|
|
11835
11850
|
this.avancar();
|
|
11836
|
-
this.adicionarSimbolo(delegua_1.default.EXPONENCIACAO);
|
|
11851
|
+
this.adicionarSimbolo(delegua_1.default.EXPONENCIACAO, '**');
|
|
11837
11852
|
break;
|
|
11838
11853
|
case '=':
|
|
11839
11854
|
this.avancar();
|
|
11840
|
-
this.adicionarSimbolo(delegua_1.default.MULTIPLICACAO_IGUAL);
|
|
11855
|
+
this.adicionarSimbolo(delegua_1.default.MULTIPLICACAO_IGUAL, '*=');
|
|
11841
11856
|
break;
|
|
11842
11857
|
default:
|
|
11843
11858
|
this.adicionarSimbolo(delegua_1.default.MULTIPLICACAO);
|
|
@@ -11847,7 +11862,7 @@ class Lexador {
|
|
|
11847
11862
|
case '!':
|
|
11848
11863
|
this.avancar();
|
|
11849
11864
|
if (this.simboloAtual() === '=') {
|
|
11850
|
-
this.adicionarSimbolo(delegua_1.default.DIFERENTE);
|
|
11865
|
+
this.adicionarSimbolo(delegua_1.default.DIFERENTE, '!=');
|
|
11851
11866
|
this.avancar();
|
|
11852
11867
|
}
|
|
11853
11868
|
else {
|
|
@@ -11857,7 +11872,7 @@ class Lexador {
|
|
|
11857
11872
|
case '=':
|
|
11858
11873
|
this.avancar();
|
|
11859
11874
|
if (this.simboloAtual() === '=') {
|
|
11860
|
-
this.adicionarSimbolo(delegua_1.default.IGUAL_IGUAL);
|
|
11875
|
+
this.adicionarSimbolo(delegua_1.default.IGUAL_IGUAL, '==');
|
|
11861
11876
|
this.avancar();
|
|
11862
11877
|
}
|
|
11863
11878
|
else {
|
|
@@ -11889,11 +11904,11 @@ class Lexador {
|
|
|
11889
11904
|
case '<':
|
|
11890
11905
|
this.avancar();
|
|
11891
11906
|
if (this.simboloAtual() === '=') {
|
|
11892
|
-
this.adicionarSimbolo(delegua_1.default.MENOR_IGUAL);
|
|
11907
|
+
this.adicionarSimbolo(delegua_1.default.MENOR_IGUAL, '<=');
|
|
11893
11908
|
this.avancar();
|
|
11894
11909
|
}
|
|
11895
11910
|
else if (this.simboloAtual() === '<') {
|
|
11896
|
-
this.adicionarSimbolo(delegua_1.default.MENOR_MENOR);
|
|
11911
|
+
this.adicionarSimbolo(delegua_1.default.MENOR_MENOR, '<<');
|
|
11897
11912
|
this.avancar();
|
|
11898
11913
|
}
|
|
11899
11914
|
else {
|
|
@@ -11903,11 +11918,11 @@ class Lexador {
|
|
|
11903
11918
|
case '>':
|
|
11904
11919
|
this.avancar();
|
|
11905
11920
|
if (this.simboloAtual() === '=') {
|
|
11906
|
-
this.adicionarSimbolo(delegua_1.default.MAIOR_IGUAL);
|
|
11921
|
+
this.adicionarSimbolo(delegua_1.default.MAIOR_IGUAL, '>=');
|
|
11907
11922
|
this.avancar();
|
|
11908
11923
|
}
|
|
11909
11924
|
else if (this.simboloAtual() === '>') {
|
|
11910
|
-
this.adicionarSimbolo(delegua_1.default.MAIOR_MAIOR);
|
|
11925
|
+
this.adicionarSimbolo(delegua_1.default.MAIOR_MAIOR, '>>');
|
|
11911
11926
|
this.avancar();
|
|
11912
11927
|
}
|
|
11913
11928
|
else {
|
|
@@ -11924,7 +11939,7 @@ class Lexador {
|
|
|
11924
11939
|
this.comentarioMultilinha();
|
|
11925
11940
|
break;
|
|
11926
11941
|
case '=':
|
|
11927
|
-
this.adicionarSimbolo(delegua_1.default.DIVISAO_IGUAL);
|
|
11942
|
+
this.adicionarSimbolo(delegua_1.default.DIVISAO_IGUAL, '/=');
|
|
11928
11943
|
this.avancar();
|
|
11929
11944
|
break;
|
|
11930
11945
|
default:
|
|
@@ -11937,7 +11952,7 @@ class Lexador {
|
|
|
11937
11952
|
this.avancar();
|
|
11938
11953
|
switch (this.simboloAtual()) {
|
|
11939
11954
|
case '=':
|
|
11940
|
-
this.adicionarSimbolo(delegua_1.default.DIVISAO_INTEIRA_IGUAL);
|
|
11955
|
+
this.adicionarSimbolo(delegua_1.default.DIVISAO_INTEIRA_IGUAL, '\\=');
|
|
11941
11956
|
this.avancar();
|
|
11942
11957
|
break;
|
|
11943
11958
|
default:
|
|
@@ -11945,7 +11960,7 @@ class Lexador {
|
|
|
11945
11960
|
break;
|
|
11946
11961
|
}
|
|
11947
11962
|
break;
|
|
11948
|
-
// Esta sessão ignora espaços em branco na tokenização.
|
|
11963
|
+
// Esta sessão ignora espaços em branco (ou similares) na tokenização.
|
|
11949
11964
|
case ' ':
|
|
11950
11965
|
case '\0':
|
|
11951
11966
|
case '\r':
|
|
@@ -25784,7 +25799,7 @@ class TradutorAssemblyScript {
|
|
|
25784
25799
|
return resultado;
|
|
25785
25800
|
}
|
|
25786
25801
|
traduzirConstrutoAtribuir(atribuir) {
|
|
25787
|
-
let resultado = atribuir.
|
|
25802
|
+
let resultado = this.dicionarioConstrutos[atribuir.alvo.constructor.name](atribuir.alvo);
|
|
25788
25803
|
resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
25789
25804
|
return resultado;
|
|
25790
25805
|
}
|
|
@@ -25976,8 +25991,19 @@ class TradutorJavaScript {
|
|
|
25976
25991
|
return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
|
|
25977
25992
|
}
|
|
25978
25993
|
traduzirConstrutoAtribuir(atribuir) {
|
|
25979
|
-
|
|
25980
|
-
resultado
|
|
25994
|
+
var _a;
|
|
25995
|
+
let resultado = this.dicionarioConstrutos[atribuir.alvo.constructor.name](atribuir.alvo);
|
|
25996
|
+
const operador = ((_a = atribuir.simboloOperador) === null || _a === void 0 ? void 0 : _a.lexema) || '=';
|
|
25997
|
+
// Em Delégua, atribuições com operações embutidas devolvem um construto `Binario` no valor
|
|
25998
|
+
// por várias razões, sendo a mais importante delas a lógica de interpretação.
|
|
25999
|
+
let valorResolvido = '';
|
|
26000
|
+
if (atribuir.simboloOperador && atribuir.valor.constructor.name === 'Binario') {
|
|
26001
|
+
valorResolvido = this.dicionarioConstrutos[atribuir.valor.direita.constructor.name](atribuir.valor.direita);
|
|
26002
|
+
}
|
|
26003
|
+
else {
|
|
26004
|
+
valorResolvido = this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
26005
|
+
}
|
|
26006
|
+
resultado += ` ${operador} ` + valorResolvido;
|
|
25981
26007
|
return resultado;
|
|
25982
26008
|
}
|
|
25983
26009
|
traduzirConstrutoBinario(binario) {
|
|
@@ -26340,7 +26366,11 @@ class TradutorJavaScript {
|
|
|
26340
26366
|
let objetoVariavel = acessoMetodo.objeto;
|
|
26341
26367
|
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.nomeMetodo)}`;
|
|
26342
26368
|
}
|
|
26343
|
-
|
|
26369
|
+
if (acessoMetodo.objeto instanceof construtos_1.Isto) {
|
|
26370
|
+
return `this.${acessoMetodo.nomeMetodo}`;
|
|
26371
|
+
}
|
|
26372
|
+
const objetoResolvido = this.dicionarioConstrutos[acessoMetodo.objeto.constructor.name](acessoMetodo.objeto);
|
|
26373
|
+
return `${objetoResolvido}.${acessoMetodo.nomeMetodo}`;
|
|
26344
26374
|
}
|
|
26345
26375
|
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo) {
|
|
26346
26376
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
@@ -26525,6 +26555,7 @@ const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
|
26525
26555
|
class TradutorPython {
|
|
26526
26556
|
constructor() {
|
|
26527
26557
|
this.indentacao = 0;
|
|
26558
|
+
this.classesConhecidas = [];
|
|
26528
26559
|
this.dicionarioConstrutos = {
|
|
26529
26560
|
AcessoMetodo: this.traduzirConstrutoAcessoMetodo.bind(this),
|
|
26530
26561
|
AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
|
|
@@ -26537,6 +26568,7 @@ class TradutorPython {
|
|
|
26537
26568
|
Chamada: this.traduzirConstrutoChamada.bind(this),
|
|
26538
26569
|
Comentario: this.traduzirConstrutoComentario.bind(this),
|
|
26539
26570
|
DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
|
|
26571
|
+
Dicionario: this.traduzirConstrutoDicionario.bind(this),
|
|
26540
26572
|
Literal: this.traduzirConstrutoLiteral.bind(this),
|
|
26541
26573
|
Logico: this.traduzirConstrutoLogico.bind(this),
|
|
26542
26574
|
Unario: this.traduzirConstrutoUnario.bind(this),
|
|
@@ -26605,38 +26637,46 @@ class TradutorPython {
|
|
|
26605
26637
|
return '-';
|
|
26606
26638
|
}
|
|
26607
26639
|
}
|
|
26608
|
-
|
|
26609
|
-
|
|
26640
|
+
traduzirFuncaoOuMetodo(nomeMetodo, objetoResolvido, argumentos) {
|
|
26641
|
+
const argumentosResolvidos = [];
|
|
26642
|
+
for (const argumento of argumentos) {
|
|
26643
|
+
const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
|
|
26644
|
+
argumentosResolvidos.push(argumentoResolvido);
|
|
26645
|
+
}
|
|
26646
|
+
let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
|
|
26647
|
+
textoArgumentos = textoArgumentos.slice(0, -2);
|
|
26648
|
+
switch (nomeMetodo) {
|
|
26610
26649
|
case 'adicionar':
|
|
26611
26650
|
case 'empilhar':
|
|
26612
|
-
return
|
|
26651
|
+
return `${objetoResolvido}.append(${textoArgumentos})`;
|
|
26613
26652
|
case 'fatiar':
|
|
26614
|
-
return
|
|
26653
|
+
return `${objetoResolvido}[${argumentos[0]}:${argumentos[1]}]`;
|
|
26615
26654
|
case 'inclui':
|
|
26616
|
-
return
|
|
26655
|
+
return `${argumentosResolvidos[0]} in ${objetoResolvido}`;
|
|
26617
26656
|
case 'inverter':
|
|
26618
|
-
return
|
|
26657
|
+
return `reversed(${objetoResolvido})`;
|
|
26619
26658
|
case 'juntar':
|
|
26620
|
-
return
|
|
26621
|
-
case 'ordenar':
|
|
26622
|
-
return 'sort';
|
|
26623
|
-
case 'removerprimeiro':
|
|
26624
|
-
return 'pop(0)';
|
|
26625
|
-
case 'removerultimo':
|
|
26626
|
-
return 'pop';
|
|
26627
|
-
case 'tamanho':
|
|
26628
|
-
return 'len';
|
|
26659
|
+
return `${argumentosResolvidos[0]}.join(${objetoResolvido})`;
|
|
26629
26660
|
case 'maiusculo':
|
|
26630
|
-
return
|
|
26661
|
+
return `${objetoResolvido}.upper()`;
|
|
26662
|
+
case 'mapear':
|
|
26663
|
+
return `list(map(${this.traduzirFuncaoAnonimaParaLambda(argumentos[0])}), ${objetoResolvido})`;
|
|
26631
26664
|
case 'minusculo':
|
|
26632
|
-
return
|
|
26633
|
-
case '
|
|
26634
|
-
return
|
|
26635
|
-
case '
|
|
26636
|
-
return
|
|
26637
|
-
|
|
26638
|
-
return
|
|
26665
|
+
return `${objetoResolvido}.lower()`;
|
|
26666
|
+
case 'ordenar':
|
|
26667
|
+
return `${objetoResolvido}.sort()`;
|
|
26668
|
+
case 'remover':
|
|
26669
|
+
return `del ${objetoResolvido}[${argumentosResolvidos[0]}]`;
|
|
26670
|
+
case 'removerPrimeiro':
|
|
26671
|
+
return `${objetoResolvido}.pop(0)`;
|
|
26672
|
+
case 'removerUltimo':
|
|
26673
|
+
return `${objetoResolvido}.pop()`;
|
|
26674
|
+
case 'somar':
|
|
26675
|
+
return `sum(${objetoResolvido})`;
|
|
26676
|
+
case 'tamanho':
|
|
26677
|
+
return `len(${objetoResolvido})`;
|
|
26639
26678
|
}
|
|
26679
|
+
return `${objetoResolvido}.${nomeMetodo}(${textoArgumentos}))`;
|
|
26640
26680
|
}
|
|
26641
26681
|
logicaComumBlocoEscopo(declaracoes) {
|
|
26642
26682
|
let resultado = '';
|
|
@@ -26663,45 +26703,71 @@ class TradutorPython {
|
|
|
26663
26703
|
const indice = this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice);
|
|
26664
26704
|
return `${entidade}[${indice}]`;
|
|
26665
26705
|
}
|
|
26666
|
-
|
|
26667
|
-
|
|
26668
|
-
|
|
26669
|
-
|
|
26670
|
-
|
|
26671
|
-
|
|
26672
|
-
|
|
26673
|
-
|
|
26674
|
-
|
|
26675
|
-
|
|
26676
|
-
|
|
26706
|
+
traduzirFuncaoAnonimaParaLambda(argumento) {
|
|
26707
|
+
return "";
|
|
26708
|
+
}
|
|
26709
|
+
traduzirAcessoMetodoVetor(objeto, nomeMetodo, argumentos) {
|
|
26710
|
+
const objetoResolvido = this.dicionarioConstrutos[objeto.constructor.name](objeto);
|
|
26711
|
+
const argumentosResolvidos = [];
|
|
26712
|
+
for (const argumento of argumentos) {
|
|
26713
|
+
const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
|
|
26714
|
+
argumentosResolvidos.push(argumentoResolvido);
|
|
26715
|
+
}
|
|
26716
|
+
switch (nomeMetodo) {
|
|
26717
|
+
case 'adicionar':
|
|
26718
|
+
case 'empilhar':
|
|
26719
|
+
let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
|
|
26720
|
+
textoArgumentos = textoArgumentos.slice(0, -2);
|
|
26721
|
+
return `${objetoResolvido}.append(${textoArgumentos})`;
|
|
26722
|
+
case 'fatiar':
|
|
26723
|
+
return `${objetoResolvido}[${argumentos[0]}:${argumentos[1]}]`;
|
|
26724
|
+
case 'inclui':
|
|
26725
|
+
return `${argumentos[0]} in ${objetoResolvido}`;
|
|
26726
|
+
case 'inverter':
|
|
26727
|
+
return `reversed(${objetoResolvido})`;
|
|
26728
|
+
case 'juntar':
|
|
26729
|
+
return `${argumentos[0]}.join(${objetoResolvido})`;
|
|
26730
|
+
case 'mapear':
|
|
26731
|
+
return `list(map(${this.traduzirFuncaoAnonimaParaLambda(argumentos[0])}), ${objetoResolvido})`;
|
|
26732
|
+
case 'ordenar':
|
|
26733
|
+
return `${objetoResolvido}.sort()`;
|
|
26734
|
+
case 'remover':
|
|
26735
|
+
return `del ${objetoResolvido}[${argumentos[0]}]`;
|
|
26736
|
+
case 'removerPrimeiro':
|
|
26737
|
+
return `del ${objetoResolvido}[0]`;
|
|
26738
|
+
case 'removerUltimo':
|
|
26739
|
+
return `del ${objetoResolvido}[-1]`;
|
|
26740
|
+
case 'somar':
|
|
26741
|
+
return `sum(${objetoResolvido})`;
|
|
26742
|
+
case 'tamanho':
|
|
26743
|
+
return `len(${objetoResolvido})`;
|
|
26677
26744
|
}
|
|
26678
|
-
return `self.${acessoMetodo.nomeMetodo}`;
|
|
26679
26745
|
}
|
|
26680
|
-
|
|
26746
|
+
traduzirConstrutoAcessoMetodo(acessoMetodo, argumentos) {
|
|
26747
|
+
switch (acessoMetodo.objeto.constructor.name) {
|
|
26748
|
+
case 'Isto':
|
|
26749
|
+
return `self.${acessoMetodo.nomeMetodo}`;
|
|
26750
|
+
case 'Variavel':
|
|
26751
|
+
let objetoVariavel = acessoMetodo.objeto;
|
|
26752
|
+
return this.traduzirFuncaoOuMetodo(acessoMetodo.nomeMetodo, objetoVariavel.simbolo.lexema, argumentos);
|
|
26753
|
+
case 'Vetor':
|
|
26754
|
+
return this.traduzirAcessoMetodoVetor(acessoMetodo.objeto, acessoMetodo.nomeMetodo, argumentos);
|
|
26755
|
+
default:
|
|
26756
|
+
const objetoResolvido = this.dicionarioConstrutos[acessoMetodo.objeto.constructor.name](acessoMetodo.objeto);
|
|
26757
|
+
return `${objetoResolvido}.${acessoMetodo.nomeMetodo}`;
|
|
26758
|
+
}
|
|
26759
|
+
}
|
|
26760
|
+
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo, argumentos) {
|
|
26681
26761
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
26682
26762
|
let objetoVariavel = acessoMetodo.objeto;
|
|
26683
|
-
|
|
26684
|
-
if (funcaoTraduzida === 'in') {
|
|
26685
|
-
return `in ${objetoVariavel.simbolo.lexema}`;
|
|
26686
|
-
}
|
|
26687
|
-
else if (funcaoTraduzida === 'len') {
|
|
26688
|
-
return `len(${objetoVariavel.simbolo.lexema})`;
|
|
26689
|
-
}
|
|
26690
|
-
return `${objetoVariavel.simbolo.lexema}.${funcaoTraduzida}`;
|
|
26763
|
+
return this.traduzirFuncaoOuMetodo(acessoMetodo.simbolo.lexema, objetoVariavel.simbolo.lexema, argumentos);
|
|
26691
26764
|
}
|
|
26692
26765
|
return `self.${acessoMetodo.simbolo.lexema}`;
|
|
26693
26766
|
}
|
|
26694
|
-
traduzirConstrutoAcessoPropriedade(acessoPropriedade) {
|
|
26767
|
+
traduzirConstrutoAcessoPropriedade(acessoPropriedade, argumentos) {
|
|
26695
26768
|
if (acessoPropriedade.objeto instanceof construtos_1.Variavel) {
|
|
26696
26769
|
let objetoVariavel = acessoPropriedade.objeto;
|
|
26697
|
-
|
|
26698
|
-
if (funcaoTraduzida === 'in') {
|
|
26699
|
-
return `in ${objetoVariavel.simbolo.lexema}`;
|
|
26700
|
-
}
|
|
26701
|
-
else if (funcaoTraduzida === 'len') {
|
|
26702
|
-
return `len(${objetoVariavel.simbolo.lexema})`;
|
|
26703
|
-
}
|
|
26704
|
-
return `${objetoVariavel.simbolo.lexema}.${funcaoTraduzida}`;
|
|
26770
|
+
return this.traduzirFuncaoOuMetodo(objetoVariavel.simbolo.lexema, acessoPropriedade.nomePropriedade, argumentos);
|
|
26705
26771
|
}
|
|
26706
26772
|
return `self.${acessoPropriedade.nomePropriedade}`;
|
|
26707
26773
|
}
|
|
@@ -26715,49 +26781,39 @@ class TradutorPython {
|
|
|
26715
26781
|
return `${objeto}[${indice}] = ${valor}`;
|
|
26716
26782
|
}
|
|
26717
26783
|
traduzirConstrutoAtribuir(atribuir) {
|
|
26718
|
-
|
|
26719
|
-
resultado
|
|
26784
|
+
var _a;
|
|
26785
|
+
let resultado = this.dicionarioConstrutos[atribuir.alvo.constructor.name](atribuir.alvo);
|
|
26786
|
+
const operador = ((_a = atribuir.simboloOperador) === null || _a === void 0 ? void 0 : _a.lexema) || '=';
|
|
26787
|
+
// Em Delégua, atribuições com operações embutidas devolvem um construto `Binario` no valor
|
|
26788
|
+
// por várias razões, sendo a mais importante delas a lógica de interpretação.
|
|
26789
|
+
let valorResolvido = '';
|
|
26790
|
+
if (atribuir.simboloOperador && atribuir.valor.constructor.name === 'Binario') {
|
|
26791
|
+
valorResolvido = this.dicionarioConstrutos[atribuir.valor.direita.constructor.name](atribuir.valor.direita);
|
|
26792
|
+
}
|
|
26793
|
+
else {
|
|
26794
|
+
valorResolvido = this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
26795
|
+
}
|
|
26796
|
+
resultado += ` ${operador} ` + valorResolvido;
|
|
26720
26797
|
return resultado;
|
|
26721
26798
|
}
|
|
26722
26799
|
traduzirConstrutoBinario(binario) {
|
|
26723
26800
|
let resultado = '';
|
|
26801
|
+
const valorEsquerdo = this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
|
|
26724
26802
|
if (binario.esquerda.constructor.name === 'Agrupamento')
|
|
26725
|
-
resultado += '(' +
|
|
26803
|
+
resultado += '(' + valorEsquerdo + ')';
|
|
26726
26804
|
else
|
|
26727
|
-
resultado +=
|
|
26805
|
+
resultado += valorEsquerdo;
|
|
26728
26806
|
let operador = this.traduzirSimboloOperador(binario.operador);
|
|
26729
26807
|
resultado += ` ${operador} `;
|
|
26808
|
+
const valorDireito = this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
26730
26809
|
if (binario.direita.constructor.name === 'Agrupamento')
|
|
26731
|
-
resultado += '(' +
|
|
26810
|
+
resultado += '(' + valorDireito + ')';
|
|
26732
26811
|
else
|
|
26733
|
-
resultado +=
|
|
26812
|
+
resultado += valorDireito;
|
|
26734
26813
|
return resultado;
|
|
26735
26814
|
}
|
|
26736
26815
|
traduzirConstrutoChamada(chamada) {
|
|
26737
|
-
|
|
26738
|
-
const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
|
|
26739
|
-
resultado += retorno;
|
|
26740
|
-
if (!resultado.includes('in ') && !resultado.includes('len') && !resultado.includes('pop(')) {
|
|
26741
|
-
resultado += '(';
|
|
26742
|
-
}
|
|
26743
|
-
if (!resultado.includes('len(')) {
|
|
26744
|
-
for (let parametro of chamada.argumentos) {
|
|
26745
|
-
const parametroTratado = this.dicionarioConstrutos[parametro.constructor.name](parametro);
|
|
26746
|
-
if (resultado.includes('in ') || resultado.includes('len')) {
|
|
26747
|
-
resultado = `${parametroTratado} ${resultado}`;
|
|
26748
|
-
}
|
|
26749
|
-
else {
|
|
26750
|
-
resultado += parametroTratado + ', ';
|
|
26751
|
-
}
|
|
26752
|
-
}
|
|
26753
|
-
if (chamada.argumentos.length > 0 && !resultado.includes('in ') && !resultado.includes('len')) {
|
|
26754
|
-
resultado = resultado.slice(0, -2);
|
|
26755
|
-
}
|
|
26756
|
-
if (!resultado.includes(')') && !resultado.includes('in ')) {
|
|
26757
|
-
resultado += ')';
|
|
26758
|
-
}
|
|
26759
|
-
}
|
|
26760
|
-
return resultado;
|
|
26816
|
+
return `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada, chamada.argumentos)}`;
|
|
26761
26817
|
}
|
|
26762
26818
|
traduzirConstrutoComentario(comentario) {
|
|
26763
26819
|
let resultado = '';
|
|
@@ -26781,6 +26837,18 @@ class TradutorPython {
|
|
|
26781
26837
|
resultado += definirValor.valor.simbolo.lexema;
|
|
26782
26838
|
return resultado;
|
|
26783
26839
|
}
|
|
26840
|
+
traduzirConstrutoDicionario(dicionario) {
|
|
26841
|
+
let resultado = `{${dicionario.chaves.length > 0 ? '\n' : ''}`;
|
|
26842
|
+
for (let indice = 0; indice < dicionario.chaves.length; indice++) {
|
|
26843
|
+
resultado += ' '.repeat(this.indentacao + 4);
|
|
26844
|
+
const chave = dicionario.chaves[indice];
|
|
26845
|
+
resultado += `${this.dicionarioConstrutos[chave.constructor.name](chave)}: `;
|
|
26846
|
+
const valor = dicionario.valores[indice];
|
|
26847
|
+
resultado += `${this.dicionarioConstrutos[valor.constructor.name](valor)},\n`;
|
|
26848
|
+
}
|
|
26849
|
+
resultado += '}';
|
|
26850
|
+
return resultado;
|
|
26851
|
+
}
|
|
26784
26852
|
traduzirConstrutoLiteral(literal) {
|
|
26785
26853
|
if (typeof literal.valor === 'string')
|
|
26786
26854
|
return `'${literal.valor}'`;
|
|
@@ -26810,8 +26878,25 @@ class TradutorPython {
|
|
|
26810
26878
|
return `${operando}${operador}`;
|
|
26811
26879
|
}
|
|
26812
26880
|
}
|
|
26813
|
-
traduzirConstrutoVariavel(variavel) {
|
|
26814
|
-
|
|
26881
|
+
traduzirConstrutoVariavel(variavel, argumentos) {
|
|
26882
|
+
const argumentosResolvidos = [];
|
|
26883
|
+
const argumentosValidados = argumentos || [];
|
|
26884
|
+
for (const argumento of argumentosValidados) {
|
|
26885
|
+
const argumentoResolvido = this.dicionarioConstrutos[argumento.constructor.name](argumento);
|
|
26886
|
+
argumentosResolvidos.push(argumentoResolvido);
|
|
26887
|
+
}
|
|
26888
|
+
let textoArgumentos = argumentosResolvidos.reduce((atual, proximo) => atual += proximo + ', ', "");
|
|
26889
|
+
textoArgumentos = textoArgumentos.slice(0, -2);
|
|
26890
|
+
switch (variavel.simbolo.lexema) {
|
|
26891
|
+
case 'texto':
|
|
26892
|
+
return `str(${textoArgumentos})`;
|
|
26893
|
+
default:
|
|
26894
|
+
if (argumentosValidados.length === 0 && !this.classesConhecidas.includes(variavel.simbolo.lexema)) {
|
|
26895
|
+
return `${variavel.simbolo.lexema}`;
|
|
26896
|
+
}
|
|
26897
|
+
return `${variavel.simbolo.lexema}(${textoArgumentos})`;
|
|
26898
|
+
// return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
|
|
26899
|
+
}
|
|
26815
26900
|
}
|
|
26816
26901
|
traduzirConstrutoVetor(vetor) {
|
|
26817
26902
|
if (!vetor.valores.length) {
|
|
@@ -26861,11 +26946,14 @@ class TradutorPython {
|
|
|
26861
26946
|
resultado += `${declaracaoClasse.simbolo.lexema}(${declaracaoClasse.superClasse.simbolo.lexema}):\n`;
|
|
26862
26947
|
else
|
|
26863
26948
|
resultado += declaracaoClasse.simbolo.lexema + ':\n';
|
|
26864
|
-
if (declaracaoClasse.metodos.length === 0)
|
|
26949
|
+
if (declaracaoClasse.metodos.length === 0) {
|
|
26950
|
+
this.classesConhecidas.push(declaracaoClasse.simbolo.lexema);
|
|
26865
26951
|
return (resultado += ' pass\n');
|
|
26952
|
+
}
|
|
26866
26953
|
for (let metodo of declaracaoClasse.metodos) {
|
|
26867
26954
|
resultado += this.logicaTraducaoMetodoClasse(metodo);
|
|
26868
26955
|
}
|
|
26956
|
+
this.classesConhecidas.push(declaracaoClasse.simbolo.lexema);
|
|
26869
26957
|
return resultado;
|
|
26870
26958
|
}
|
|
26871
26959
|
traduzirDeclaracaoConst(declaracaoConst) {
|
|
@@ -27040,7 +27128,7 @@ class TradutorPython {
|
|
|
27040
27128
|
let resultado = declaracaoVar.simbolo.lexema + ' = ';
|
|
27041
27129
|
const inicializador = declaracaoVar.inicializador;
|
|
27042
27130
|
if (inicializador) {
|
|
27043
|
-
if (
|
|
27131
|
+
if (inicializador.constructor.name in this.dicionarioConstrutos) {
|
|
27044
27132
|
resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
|
|
27045
27133
|
}
|
|
27046
27134
|
else {
|
|
@@ -27054,6 +27142,7 @@ class TradutorPython {
|
|
|
27054
27142
|
}
|
|
27055
27143
|
traduzir(declaracoes) {
|
|
27056
27144
|
let resultado = '';
|
|
27145
|
+
this.classesConhecidas = [];
|
|
27057
27146
|
try {
|
|
27058
27147
|
for (const declaracao of declaracoes) {
|
|
27059
27148
|
resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
|