@designliquido/delegua 0.37.0 → 0.37.1

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/umd/delegua.js CHANGED
@@ -539,11 +539,12 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
539
539
  delegua_2.default.DIVISAO_INTEIRA_IGUAL,
540
540
  delegua_2.default.MODULO_IGUAL,
541
541
  ].includes(expressao.operador.tipo)) {
542
- let simbolo = expressao.esquerda.simbolo;
543
542
  if (expressao.esquerda instanceof construtos_1.AcessoIndiceVariavel) {
544
- simbolo = expressao.esquerda.entidadeChamada.simbolo;
545
- return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao, expressao.esquerda.indice);
543
+ const entidade = expressao.esquerda;
544
+ const simbolo = entidade.entidadeChamada.simbolo;
545
+ return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao, entidade.indice);
546
546
  }
547
+ const simbolo = expressao.esquerda.simbolo;
547
548
  return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao);
548
549
  }
549
550
  else if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.IGUAL)) {
@@ -553,11 +554,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
553
554
  const simbolo = expressao.simbolo;
554
555
  return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
555
556
  }
556
- else if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
557
+ if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
557
558
  const get = expressao;
558
559
  return new construtos_1.DefinirValor(this.hashArquivo, igual.linha, get.objeto, get.simbolo, valor);
559
560
  }
560
- else if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
561
+ if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
561
562
  return new construtos_1.AtribuicaoPorIndice(this.hashArquivo, expressao.linha, expressao.entidadeChamada, expressao.indice, valor);
562
563
  }
563
564
  this.erro(igual, 'Tarefa de atribuição inválida');
@@ -4039,7 +4040,7 @@ exports.Atribuir = void 0;
4039
4040
  class Atribuir {
4040
4041
  constructor(hashArquivo, simbolo, valor,
4041
4042
  // indice so é usado para variaveis de vetores
4042
- // TODO: criar alguma validaçao para garantir que indice so seja passado para variaveis de vetores
4043
+ // TODO: criar alguma validaçao para garantir que `indice` seja passado para variáveis de vetores
4043
4044
  indice) {
4044
4045
  this.linha = Number(simbolo.linha);
4045
4046
  this.hashArquivo = hashArquivo;
@@ -24846,14 +24847,15 @@ class TradutorAssemblyScript {
24846
24847
  resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
24847
24848
  return resultado;
24848
24849
  }
24850
+ // TODO: Eliminar o soft cast para `any`.
24849
24851
  traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
24850
- var _a, _b;
24852
+ var _a;
24851
24853
  let resultado = '';
24852
24854
  resultado += AtribuicaoPorIndice.objeto.simbolo.lexema + '[';
24853
24855
  resultado +=
24854
24856
  this.dicionarioConstrutos[AtribuicaoPorIndice.indice.constructor.name](AtribuicaoPorIndice.indice) + ']';
24855
24857
  resultado += ' = ';
24856
- if ((_b = (_a = AtribuicaoPorIndice === null || AtribuicaoPorIndice === void 0 ? void 0 : AtribuicaoPorIndice.valor) === null || _a === void 0 ? void 0 : _a.simbolo) === null || _b === void 0 ? void 0 : _b.lexema) {
24858
+ if ((_a = (AtribuicaoPorIndice === null || AtribuicaoPorIndice === void 0 ? void 0 : AtribuicaoPorIndice.valor).simbolo) === null || _a === void 0 ? void 0 : _a.lexema) {
24857
24859
  resultado += `${AtribuicaoPorIndice.valor.simbolo.lexema}`;
24858
24860
  }
24859
24861
  else {
@@ -24991,7 +24993,6 @@ class TradutorJavaScript {
24991
24993
  return '-';
24992
24994
  }
24993
24995
  }
24994
- //TODO: @Samuel
24995
24996
  traduzirFuncoesNativas(metodo) {
24996
24997
  switch (metodo.toLowerCase()) {
24997
24998
  case 'adicionar':
@@ -25021,6 +25022,8 @@ class TradutorJavaScript {
25021
25022
  return 'toLowerCase';
25022
25023
  case 'substituir':
25023
25024
  return 'replace';
25025
+ case 'texto':
25026
+ return 'String';
25024
25027
  default:
25025
25028
  return metodo;
25026
25029
  }
@@ -25047,22 +25050,6 @@ class TradutorJavaScript {
25047
25050
  resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
25048
25051
  return resultado;
25049
25052
  }
25050
- traduzirConstrutoDefinirValor(definirValor) {
25051
- let resultado = '';
25052
- if (definirValor.objeto instanceof construtos_1.Isto) {
25053
- resultado = 'this.' + definirValor.nome.lexema + ' = ';
25054
- }
25055
- resultado += definirValor.valor.simbolo.lexema;
25056
- return resultado;
25057
- }
25058
- traduzirConstrutoLiteral(literal) {
25059
- if (typeof literal.valor === 'string')
25060
- return `'${literal.valor}'`;
25061
- return literal.valor;
25062
- }
25063
- traduzirConstrutoVariavel(variavel) {
25064
- return variavel.simbolo.lexema;
25065
- }
25066
25053
  traduzirConstrutoChamada(chamada) {
25067
25054
  let resultado = '';
25068
25055
  const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
@@ -25103,6 +25090,22 @@ class TradutorJavaScript {
25103
25090
  }
25104
25091
  return resultado;
25105
25092
  }
25093
+ traduzirConstrutoDefinirValor(definirValor) {
25094
+ let resultado = '';
25095
+ if (definirValor.objeto instanceof construtos_1.Isto) {
25096
+ resultado = 'this.' + definirValor.nome.lexema + ' = ';
25097
+ }
25098
+ resultado += definirValor.valor.simbolo.lexema;
25099
+ return resultado;
25100
+ }
25101
+ traduzirConstrutoLiteral(literal) {
25102
+ if (typeof literal.valor === 'string')
25103
+ return `'${literal.valor}'`;
25104
+ return literal.valor;
25105
+ }
25106
+ traduzirConstrutoVariavel(variavel) {
25107
+ return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
25108
+ }
25106
25109
  logicaComumBlocoEscopo(declaracoes) {
25107
25110
  let resultado = '{\n';
25108
25111
  this.indentacao += 4;
@@ -25254,13 +25257,12 @@ class TradutorJavaScript {
25254
25257
  let resultado = 'for (';
25255
25258
  if (declaracaoPara.inicializador.constructor.name === 'Array') {
25256
25259
  resultado +=
25257
- this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
25260
+ this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
25258
25261
  }
25259
25262
  else {
25260
25263
  resultado +=
25261
- this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + ' ';
25264
+ this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador, false) + '; ';
25262
25265
  }
25263
- resultado += !resultado.includes(';') ? ';' : '';
25264
25266
  resultado +=
25265
25267
  this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
25266
25268
  resultado +=
@@ -25351,10 +25353,10 @@ class TradutorJavaScript {
25351
25353
  }
25352
25354
  return resultado;
25353
25355
  }
25354
- traduzirDeclaracaoVar(declaracaoVar) {
25356
+ traduzirDeclaracaoVar(declaracaoVar, adicionarPontoEVirgula = true) {
25355
25357
  let resultado = 'let ';
25356
25358
  resultado += declaracaoVar.simbolo.lexema;
25357
- if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
25359
+ if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador) && adicionarPontoEVirgula)
25358
25360
  resultado += ';';
25359
25361
  else {
25360
25362
  resultado += ' = ';
@@ -25364,7 +25366,8 @@ class TradutorJavaScript {
25364
25366
  else {
25365
25367
  resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
25366
25368
  }
25367
- resultado += ';';
25369
+ if (adicionarPontoEVirgula)
25370
+ resultado += ';';
25368
25371
  }
25369
25372
  return resultado;
25370
25373
  }
@@ -25393,6 +25396,7 @@ class TradutorJavaScript {
25393
25396
  let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
25394
25397
  return `${direita} ${operador} ${esquerda}`;
25395
25398
  }
25399
+ // TODO: Eliminar o soft cast para `any`.
25396
25400
  traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
25397
25401
  var _a, _b;
25398
25402
  let resultado = '';
@@ -25441,7 +25445,8 @@ class TradutorJavaScript {
25441
25445
  return resultado;
25442
25446
  }
25443
25447
  traduzirDeclaracaoFalhar(falhar) {
25444
- return `throw '${falhar.explicacao.valor}'`;
25448
+ const explicacao = this.dicionarioConstrutos[falhar.explicacao.constructor.name](falhar.explicacao);
25449
+ return `throw ${explicacao}`;
25445
25450
  }
25446
25451
  traduzirConstrutoUnario(unario) {
25447
25452
  var _a, _b;
@@ -25543,8 +25548,10 @@ class TradutorPython {
25543
25548
  constructor() {
25544
25549
  this.indentacao = 0;
25545
25550
  this.dicionarioConstrutos = {
25546
- AcessoMetodoOuPropriedade: this.trazudirConstrutoAcessoMetodo.bind(this),
25551
+ AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
25552
+ AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
25547
25553
  Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
25554
+ AtribuicaoPorIndice: this.traduzirConstrutoAtribuicaoPorIndice.bind(this),
25548
25555
  Atribuir: this.traduzirConstrutoAtribuir.bind(this),
25549
25556
  Binario: this.traduzirConstrutoBinario.bind(this),
25550
25557
  Chamada: this.traduzirConstrutoChamada.bind(this),
@@ -25552,6 +25559,7 @@ class TradutorPython {
25552
25559
  DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
25553
25560
  Literal: this.traduzirConstrutoLiteral.bind(this),
25554
25561
  Logico: this.traduzirConstrutoLogico.bind(this),
25562
+ Unario: this.traduzirConstrutoUnario.bind(this),
25555
25563
  Variavel: this.traduzirConstrutoVariavel.bind(this),
25556
25564
  Vetor: this.traduzirConstrutoVetor.bind(this),
25557
25565
  };
@@ -25561,10 +25569,12 @@ class TradutorPython {
25561
25569
  Comentario: this.traduzirConstrutoComentario.bind(this),
25562
25570
  Const: this.traduzirDeclaracaoConst.bind(this),
25563
25571
  Continua: () => 'continue',
25572
+ Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
25564
25573
  Escreva: this.traduzirDeclaracaoEscreva.bind(this),
25565
25574
  Expressao: this.traduzirDeclaracaoExpressao.bind(this),
25566
25575
  FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
25567
25576
  Leia: this.traduzirDeclaracaoLeia.bind(this),
25577
+ Para: this.traduzirDeclaracaoPara.bind(this),
25568
25578
  ParaCada: this.traduzirDeclaracaoParaCada.bind(this),
25569
25579
  Retorna: this.traduzirDeclaracaoRetorna.bind(this),
25570
25580
  Se: this.traduzirDeclaracaoSe.bind(this),
@@ -25573,9 +25583,6 @@ class TradutorPython {
25573
25583
  Var: this.traduzirDeclaracaoVar.bind(this),
25574
25584
  };
25575
25585
  }
25576
- traduzirNomeVariavel(variavel) {
25577
- return variavel.replace(/\.?([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '');
25578
- }
25579
25586
  traduzirSimboloOperador(operador) {
25580
25587
  switch (operador.tipo) {
25581
25588
  case delegua_1.default.ADICAO:
@@ -25645,6 +25652,8 @@ class TradutorPython {
25645
25652
  return 'lower';
25646
25653
  case 'substituir':
25647
25654
  return 'replace';
25655
+ case 'texto':
25656
+ return 'str';
25648
25657
  default:
25649
25658
  return metodo;
25650
25659
  }
@@ -25669,7 +25678,12 @@ class TradutorPython {
25669
25678
  resultado += ' '.repeat(this.indentacao) + '\n';
25670
25679
  return resultado;
25671
25680
  }
25672
- trazudirConstrutoAcessoMetodo(acessoMetodo) {
25681
+ traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
25682
+ const entidade = this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
25683
+ const indice = this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice);
25684
+ return `${entidade}[${indice}]`;
25685
+ }
25686
+ traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo) {
25673
25687
  if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
25674
25688
  let objetoVariavel = acessoMetodo.objeto;
25675
25689
  let funcaoTraduzida = this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema);
@@ -25686,6 +25700,12 @@ class TradutorPython {
25686
25700
  traduzirConstrutoAgrupamento(agrupamento) {
25687
25701
  return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
25688
25702
  }
25703
+ traduzirConstrutoAtribuicaoPorIndice(atribuicaoPorIndice) {
25704
+ const objeto = this.dicionarioConstrutos[atribuicaoPorIndice.objeto.constructor.name](atribuicaoPorIndice.objeto);
25705
+ const indice = this.dicionarioConstrutos[atribuicaoPorIndice.indice.constructor.name](atribuicaoPorIndice.indice);
25706
+ const valor = this.dicionarioConstrutos[atribuicaoPorIndice.valor.constructor.name](atribuicaoPorIndice.valor);
25707
+ return `${objeto}[${indice}] = ${valor}`;
25708
+ }
25689
25709
  traduzirConstrutoAtribuir(atribuir) {
25690
25710
  let resultado = atribuir.simbolo.lexema;
25691
25711
  resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
@@ -25759,18 +25779,31 @@ class TradutorPython {
25759
25779
  if (typeof literal.valor === 'boolean') {
25760
25780
  return literal.valor ? 'True' : 'False';
25761
25781
  }
25782
+ if (typeof literal.valor === 'number') {
25783
+ return String(literal.valor);
25784
+ }
25762
25785
  if (!literal.valor)
25763
25786
  return 'None';
25764
25787
  return literal.valor;
25765
25788
  }
25766
25789
  traduzirConstrutoLogico(logico) {
25767
- let direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
25768
- let operador = this.traduzirSimboloOperador(logico.operador);
25769
- let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
25790
+ const direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
25791
+ const operador = this.traduzirSimboloOperador(logico.operador);
25792
+ const esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
25770
25793
  return `${esquerda} ${operador} ${direita}`;
25771
25794
  }
25795
+ traduzirConstrutoUnario(unario) {
25796
+ const operador = this.traduzirSimboloOperador(unario.operador);
25797
+ const operando = this.dicionarioConstrutos[unario.operando.constructor.name](unario.operando);
25798
+ switch (unario.incidenciaOperador) {
25799
+ case 'ANTES':
25800
+ return `${operador}${operando}`;
25801
+ case 'DEPOIS':
25802
+ return `${operando}${operador}`;
25803
+ }
25804
+ }
25772
25805
  traduzirConstrutoVariavel(variavel) {
25773
- return variavel.simbolo.lexema;
25806
+ return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
25774
25807
  }
25775
25808
  traduzirConstrutoVetor(vetor) {
25776
25809
  if (!vetor.valores.length) {
@@ -25786,45 +25819,6 @@ class TradutorPython {
25786
25819
  resultado += ']';
25787
25820
  return resultado;
25788
25821
  }
25789
- traduzirDeclaracaoSe(declaracaoSe, iniciarComIf = true) {
25790
- let resultado = '';
25791
- if (iniciarComIf) {
25792
- resultado += 'if ';
25793
- }
25794
- else {
25795
- resultado += 'elif ';
25796
- }
25797
- const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
25798
- resultado += condicao;
25799
- resultado += ':\n';
25800
- resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
25801
- if (declaracaoSe.caminhoSenao !== null) {
25802
- resultado += ' '.repeat(this.indentacao);
25803
- const se = declaracaoSe === null || declaracaoSe === void 0 ? void 0 : declaracaoSe.caminhoSenao;
25804
- if (se === null || se === void 0 ? void 0 : se.caminhoEntao) {
25805
- resultado += 'elif ';
25806
- resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao, false);
25807
- resultado += ':\n';
25808
- resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
25809
- resultado += ' '.repeat(this.indentacao);
25810
- if (se === null || se === void 0 ? void 0 : se.caminhoSenao) {
25811
- if (se.caminhoSenao instanceof declaracoes_1.Bloco) {
25812
- resultado += 'else:\n';
25813
- resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao, false);
25814
- return resultado;
25815
- }
25816
- else {
25817
- resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao, false);
25818
- return resultado;
25819
- }
25820
- }
25821
- }
25822
- resultado += 'else:\n';
25823
- resultado += ' '.repeat(this.indentacao);
25824
- resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
25825
- }
25826
- return resultado;
25827
- }
25828
25822
  logicaTraducaoMetodoClasse(metodoClasse) {
25829
25823
  this.indentacao += 4;
25830
25824
  let resultado = ' '.repeat(this.indentacao);
@@ -25867,9 +25861,7 @@ class TradutorPython {
25867
25861
  return resultado;
25868
25862
  }
25869
25863
  traduzirDeclaracaoConst(declaracaoConst) {
25870
- let resultado = '';
25871
- resultado += this.traduzirNomeVariavel(declaracaoConst.simbolo.lexema);
25872
- resultado += ' = ';
25864
+ let resultado = declaracaoConst.simbolo.lexema + ' = ';
25873
25865
  const inicializador = declaracaoConst.inicializador;
25874
25866
  if (inicializador) {
25875
25867
  if (this.dicionarioConstrutos[inicializador.constructor.name]) {
@@ -25884,6 +25876,13 @@ class TradutorPython {
25884
25876
  }
25885
25877
  return resultado;
25886
25878
  }
25879
+ traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
25880
+ let resultado = ' '.repeat(this.indentacao) + 'while ';
25881
+ const condicao = this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao);
25882
+ resultado += condicao + ':\n';
25883
+ resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
25884
+ return resultado;
25885
+ }
25887
25886
  traduzirDeclaracaoEscreva(declaracaoEscreva) {
25888
25887
  let resultado = 'print(';
25889
25888
  for (const argumento of declaracaoEscreva.argumentos) {
@@ -25906,7 +25905,7 @@ class TradutorPython {
25906
25905
  if (declaracaoFuncao.funcao.parametros.length > 0) {
25907
25906
  resultado = resultado.slice(0, -2);
25908
25907
  }
25909
- resultado += '):';
25908
+ resultado += '):\n';
25910
25909
  resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
25911
25910
  return resultado;
25912
25911
  }
@@ -25920,6 +25919,32 @@ class TradutorPython {
25920
25919
  resultado += ')';
25921
25920
  return resultado;
25922
25921
  }
25922
+ /**
25923
+ * Como não existe declaração `para` com variáveis de controle em Python, o
25924
+ * que tentamos aqui é criar a mesma coisa usando `while()`.
25925
+ * @param declaracaoPara A declaração `Para`.
25926
+ * @returns Um bloco equivalente ao que seria um bloco `for` com variáveis de controle em Python.
25927
+ */
25928
+ traduzirDeclaracaoPara(declaracaoPara) {
25929
+ let resultado = '';
25930
+ // Em uma declaração `Para` em Delégua, são obrigatórios a condição e o incremento.
25931
+ if (declaracaoPara.inicializador) {
25932
+ if (Array.isArray(declaracaoPara.inicializador)) {
25933
+ for (const declaracaoInicializador of declaracaoPara.inicializador) {
25934
+ resultado += this.dicionarioDeclaracoes[declaracaoInicializador.constructor.name](declaracaoInicializador) + `\n`;
25935
+ }
25936
+ }
25937
+ else {
25938
+ resultado += this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + `\n`;
25939
+ }
25940
+ }
25941
+ const condicao = this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao);
25942
+ resultado += ' '.repeat(this.indentacao) + `while ${condicao}:\n`;
25943
+ // O incremento passa a ser a última instrução do bloco.
25944
+ declaracaoPara.corpo.declaracoes.push(new declaracoes_1.Expressao(declaracaoPara.incrementar));
25945
+ resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
25946
+ return resultado;
25947
+ }
25923
25948
  traduzirDeclaracaoParaCada(declaracaoParaCada) {
25924
25949
  let resultado = `for ${declaracaoParaCada.nomeVariavelIteracao} in `;
25925
25950
  resultado +=
@@ -25932,6 +25957,42 @@ class TradutorPython {
25932
25957
  const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
25933
25958
  return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
25934
25959
  }
25960
+ traduzirDeclaracaoSe(declaracaoSe, iniciarComIf = true) {
25961
+ let resultado = '';
25962
+ if (iniciarComIf) {
25963
+ resultado += 'if ';
25964
+ }
25965
+ else {
25966
+ resultado += 'elif ';
25967
+ }
25968
+ const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
25969
+ resultado += condicao;
25970
+ resultado += ':\n';
25971
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
25972
+ if (declaracaoSe.caminhoSenao) {
25973
+ resultado += ' '.repeat(this.indentacao);
25974
+ const senao = declaracaoSe.caminhoSenao;
25975
+ if (senao === null || senao === void 0 ? void 0 : senao.caminhoEntao) {
25976
+ resultado += 'elif ';
25977
+ resultado += this.dicionarioConstrutos[senao.condicao.constructor.name](senao.condicao, false);
25978
+ resultado += ':\n';
25979
+ resultado += this.dicionarioDeclaracoes[senao.caminhoEntao.constructor.name](senao.caminhoEntao);
25980
+ resultado += ' '.repeat(this.indentacao);
25981
+ if (senao === null || senao === void 0 ? void 0 : senao.caminhoSenao) {
25982
+ if (senao.caminhoSenao instanceof declaracoes_1.Bloco) {
25983
+ resultado += 'else:\n';
25984
+ resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
25985
+ return resultado;
25986
+ }
25987
+ resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
25988
+ return resultado;
25989
+ }
25990
+ }
25991
+ resultado += 'else:\n';
25992
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
25993
+ }
25994
+ return resultado;
25995
+ }
25935
25996
  traduzirDeclaracaoTente(declaracaoTente) {
25936
25997
  let resultado = 'try:\n';
25937
25998
  this.indentacao += 4;
@@ -25965,9 +26026,7 @@ class TradutorPython {
25965
26026
  return resultado;
25966
26027
  }
25967
26028
  traduzirDeclaracaoVar(declaracaoVar) {
25968
- let resultado = '';
25969
- resultado += this.traduzirNomeVariavel(declaracaoVar.simbolo.lexema);
25970
- resultado += ' = ';
26029
+ let resultado = declaracaoVar.simbolo.lexema + ' = ';
25971
26030
  const inicializador = declaracaoVar.inicializador;
25972
26031
  if (inicializador) {
25973
26032
  if (this.dicionarioConstrutos[inicializador.constructor.name]) {