@designliquido/delegua 1.18.2 → 1.18.4

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.
Files changed (106) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +152 -16
  3. package/analisador-semantico/analisador-semantico.js.map +1 -1
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  5. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +4 -5
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -0
  10. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  11. package/avaliador-sintatico/avaliador-sintatico.js +90 -13
  12. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js +17 -9
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +3 -6
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +4 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +3 -6
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  29. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  30. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +1 -4
  31. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  32. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
  33. package/bibliotecas/dialetos/pitugues/primitivas-texto.js +15 -16
  34. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  35. package/bibliotecas/dialetos/prisma/biblioteca-global.js +4 -12
  36. package/bibliotecas/dialetos/prisma/biblioteca-global.js.map +1 -1
  37. package/bibliotecas/dialetos/tenda/biblioteca-global.d.ts.map +1 -1
  38. package/bibliotecas/dialetos/tenda/biblioteca-global.js +141 -47
  39. package/bibliotecas/dialetos/tenda/biblioteca-global.js.map +1 -1
  40. package/bin/package.json +1 -1
  41. package/construtos/ajuda-como-construto.d.ts.map +1 -1
  42. package/construtos/ajuda-como-construto.js.map +1 -1
  43. package/estilizador/quebrador-linha.d.ts.map +1 -1
  44. package/estilizador/quebrador-linha.js.map +1 -1
  45. package/estilizador/regras/regra-convencao-nomenclatura.d.ts.map +1 -1
  46. package/estilizador/regras/regra-convencao-nomenclatura.js.map +1 -1
  47. package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts.map +1 -1
  48. package/estilizador/regras/regra-explicitar-tipos-parametros.js.map +1 -1
  49. package/estilizador/regras/regra-paradigma-consistente.d.ts.map +1 -1
  50. package/estilizador/regras/regra-paradigma-consistente.js.map +1 -1
  51. package/interfaces/declaracoes/caminho-se-senao-interface.d.ts +2 -2
  52. package/interfaces/estilizador/opcoes-paradigma-consistente-interface.d.ts +1 -1
  53. package/interfaces/estilizador/regra-estilizacao-interface.d.ts +2 -2
  54. package/interfaces/formatador/index.d.ts +1 -1
  55. package/interfaces/formatador/opcoes-formatador-delegua-interface.d.ts +1 -1
  56. package/interpretador/dialetos/calango/interpretador-calango.d.ts.map +1 -1
  57. package/interpretador/dialetos/calango/interpretador-calango.js.map +1 -1
  58. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  59. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  60. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  61. package/interpretador/dialetos/pitugues/comum.js +10 -14
  62. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  63. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  64. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +1 -0
  65. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  66. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  67. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +91 -39
  68. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  69. package/interpretador/dialetos/tenda/interpretador-tenda.d.ts.map +1 -1
  70. package/interpretador/dialetos/tenda/interpretador-tenda.js.map +1 -1
  71. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  72. package/interpretador/estruturas/delegua-funcao.js +1 -1
  73. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  74. package/interpretador/interpretador-base.d.ts.map +1 -1
  75. package/interpretador/interpretador-base.js +29 -13
  76. package/interpretador/interpretador-base.js.map +1 -1
  77. package/interpretador/interpretador.d.ts.map +1 -1
  78. package/interpretador/interpretador.js +20 -10
  79. package/interpretador/interpretador.js.map +1 -1
  80. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  81. package/interpretador/pilha-escopos-execucao.js +3 -5
  82. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  83. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  84. package/lexador/dialetos/lexador-calango.js +3 -1
  85. package/lexador/dialetos/lexador-calango.js.map +1 -1
  86. package/lexador/lexador.d.ts.map +1 -1
  87. package/lexador/lexador.js +4 -2
  88. package/lexador/lexador.js.map +1 -1
  89. package/lexador/palavras-reservadas.d.ts.map +1 -1
  90. package/lexador/palavras-reservadas.js.map +1 -1
  91. package/package.json +1 -1
  92. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  93. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  94. package/tradutores/tradutor-elixir.d.ts.map +1 -1
  95. package/tradutores/tradutor-elixir.js +18 -8
  96. package/tradutores/tradutor-elixir.js.map +1 -1
  97. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  98. package/tradutores/tradutor-portugol-ipt.js +65 -35
  99. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  100. package/tradutores/tradutor-reverso-calango.d.ts.map +1 -1
  101. package/tradutores/tradutor-reverso-calango.js +3 -1
  102. package/tradutores/tradutor-reverso-calango.js.map +1 -1
  103. package/tradutores/tradutor-reverso-python.d.ts.map +1 -1
  104. package/tradutores/tradutor-reverso-python.js +37 -14
  105. package/tradutores/tradutor-reverso-python.js.map +1 -1
  106. package/umd/delegua.js +435 -132
package/umd/delegua.js CHANGED
@@ -642,13 +642,47 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
642
642
  visitarChamadaPorVariavel(entidadeChamadaVariavel, argumentos) {
643
643
  const variavel = entidadeChamadaVariavel;
644
644
  const nomeFuncao = variavel.simbolo.lexema;
645
- const funcoesNativas = ['inteiro', 'real', 'numero', 'número', 'texto', 'leia', 'escreva', 'tipo'];
645
+ const funcoesNativas = [
646
+ 'aleatorio',
647
+ 'aleatorioEntre',
648
+ 'algum',
649
+ 'arredondar',
650
+ 'clonar',
651
+ 'encontrar',
652
+ 'encontrarIndice',
653
+ 'encontrarUltimo',
654
+ 'encontrarUltimoIndice',
655
+ 'escreva',
656
+ 'filtrarPor',
657
+ 'incluido',
658
+ 'inteiro',
659
+ 'intervalo',
660
+ 'leia',
661
+ 'longo',
662
+ 'mapear',
663
+ 'maximo',
664
+ 'minimo',
665
+ 'numero',
666
+ 'número',
667
+ 'ordenar',
668
+ 'paraCada',
669
+ 'primeiroEmCondicao',
670
+ 'real',
671
+ 'reduzir',
672
+ 'somar',
673
+ 'tamanho',
674
+ 'texto',
675
+ 'tipo',
676
+ 'todos',
677
+ 'todosEmCondicao',
678
+ 'tupla',
679
+ 'vetor',
680
+ ];
646
681
  const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
647
682
  if (funcoesNativas.includes(nomeFuncao) || pareceSerClasse) {
648
683
  return Promise.resolve();
649
684
  }
650
- const funcaoChamada = this.gerenciadorEscopos.buscar(nomeFuncao) ||
651
- this.funcoes[nomeFuncao];
685
+ const funcaoChamada = this.gerenciadorEscopos.buscar(nomeFuncao) || this.funcoes[nomeFuncao];
652
686
  if (!funcaoChamada) {
653
687
  this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
654
688
  return Promise.resolve();
@@ -819,11 +853,15 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
819
853
  }
820
854
  return Promise.resolve();
821
855
  }
822
- visitarDeclaracaoEscolha(declaracao) {
856
+ async visitarDeclaracaoEscolha(declaracao) {
823
857
  const identificadorOuLiteral = declaracao.identificadorOuLiteral;
824
858
  const tipo = identificadorOuLiteral.tipo || 'qualquer';
825
859
  const tiposLiteraisCasos = [];
860
+ this.marcarVariaveisUsadasEmExpressao(identificadorOuLiteral);
826
861
  for (let caminho of declaracao.caminhos) {
862
+ for (const declaracao of caminho.declaracoes) {
863
+ await declaracao.aceitar(this);
864
+ }
827
865
  for (let condicao of caminho.condicoes) {
828
866
  switch (condicao.constructor) {
829
867
  case construtos_1.Literal:
@@ -831,7 +869,9 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
831
869
  const tiposNumericos = ['inteiro', 'número', 'real'];
832
870
  const ambosSaoNumericos = tiposNumericos.includes(condicaoLiteral.tipo) &&
833
871
  tiposNumericos.includes(tipo);
834
- if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos && tipo !== 'qualquer') {
872
+ if (condicaoLiteral.tipo !== tipo &&
873
+ !ambosSaoNumericos &&
874
+ tipo !== 'qualquer') {
835
875
  this.erro({
836
876
  lexema: condicaoLiteral.valor,
837
877
  tipo: condicaoLiteral.tipo,
@@ -852,23 +892,32 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
852
892
  }
853
893
  }
854
894
  }
855
- if (tipo === 'qualquer' && tiposLiteraisCasos.length > 0 && identificadorOuLiteral instanceof construtos_1.Variavel) {
895
+ if (tipo === 'qualquer' &&
896
+ tiposLiteraisCasos.length > 0 &&
897
+ identificadorOuLiteral instanceof construtos_1.Variavel) {
856
898
  const tiposUnicos = [...new Set(tiposLiteraisCasos)];
857
899
  if (tiposUnicos.length === 1) {
858
900
  const tipoInferido = tiposUnicos[0];
859
901
  const variavelEscopo = this.gerenciadorEscopos.buscar(identificadorOuLiteral.simbolo.lexema);
860
902
  if (variavelEscopo) {
861
- this.sugestao(identificadorOuLiteral.simbolo, `Um tipo melhor pode ser inferido para '${identificadorOuLiteral.simbolo.lexema}': '${tipoInferido}'`, [{
903
+ this.sugestao(identificadorOuLiteral.simbolo, `Um tipo melhor pode ser inferido para '${identificadorOuLiteral.simbolo.lexema}': '${tipoInferido}'`, [
904
+ {
862
905
  titulo: `Alterar tipo de '${identificadorOuLiteral.simbolo.lexema}' para '${tipoInferido}'`,
863
906
  textoOriginal: 'qualquer',
864
907
  textoSubstituto: tipoInferido,
865
908
  linha: variavelEscopo.linha,
866
909
  colunaInicio: 0,
867
910
  colunaFim: 0,
868
- }]);
911
+ },
912
+ ]);
869
913
  }
870
914
  }
871
915
  }
916
+ if (declaracao.caminhoPadrao) {
917
+ for (const decl of declaracao.caminhoPadrao.declaracoes) {
918
+ await decl.aceitar(this);
919
+ }
920
+ }
872
921
  return Promise.resolve();
873
922
  }
874
923
  async visitarDeclaracaoEnquanto(declaracao) {
@@ -921,9 +970,48 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
921
970
  }
922
971
  return Promise.resolve();
923
972
  }
924
- visitarDeclaracaoParaCada(declaracao) {
925
- // Marca o vetor/dicionário como usado
973
+ async visitarDeclaracaoParaCada(declaracao) {
926
974
  this.marcarVariaveisUsadasEmExpressao(declaracao.vetorOuDicionario);
975
+ this.gerenciadorEscopos.empilharEscopo();
976
+ try {
977
+ if (declaracao.variavelIteracao instanceof construtos_1.Variavel) {
978
+ const nome = declaracao.variavelIteracao.simbolo.lexema;
979
+ this.gerenciadorEscopos.declarar(nome, {
980
+ nome,
981
+ tipo: 'qualquer',
982
+ imutavel: false,
983
+ valor: null,
984
+ inicializada: true,
985
+ usada: false,
986
+ hashArquivo: declaracao.hashArquivo,
987
+ linha: declaracao.linha,
988
+ });
989
+ }
990
+ else if (declaracao.variavelIteracao instanceof construtos_1.Dupla) {
991
+ const dupla = declaracao.variavelIteracao;
992
+ for (const parte of [dupla.primeiro, dupla.segundo]) {
993
+ if (parte instanceof construtos_1.Variavel) {
994
+ const nome = parte.simbolo.lexema;
995
+ this.gerenciadorEscopos.declarar(nome, {
996
+ nome,
997
+ tipo: 'qualquer',
998
+ imutavel: false,
999
+ valor: null,
1000
+ inicializada: true,
1001
+ usada: false,
1002
+ hashArquivo: declaracao.hashArquivo,
1003
+ linha: declaracao.linha,
1004
+ });
1005
+ }
1006
+ }
1007
+ }
1008
+ if (declaracao.corpo) {
1009
+ await declaracao.corpo.aceitar(this);
1010
+ }
1011
+ }
1012
+ finally {
1013
+ this.gerenciadorEscopos.desempilharEscopo();
1014
+ }
927
1015
  return Promise.resolve();
928
1016
  }
929
1017
  async visitarDeclaracaoSe(declaracao) {
@@ -1202,14 +1290,40 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1202
1290
  const nomeFuncao = entidadeChamadaVariavel.simbolo.lexema;
1203
1291
  // Lista de funções embutidas que não precisam ser declaradas
1204
1292
  const funcoesEmbutidas = [
1293
+ 'aleatorio',
1294
+ 'aleatorioEntre',
1295
+ 'algum',
1296
+ 'arredondar',
1297
+ 'clonar',
1298
+ 'encontrar',
1299
+ 'encontrarIndice',
1300
+ 'encontrarUltimo',
1301
+ 'encontrarUltimoIndice',
1302
+ 'escreva',
1303
+ 'filtrarPor',
1304
+ 'incluido',
1205
1305
  'inteiro',
1206
- 'real',
1306
+ 'intervalo',
1307
+ 'leia',
1308
+ 'longo',
1309
+ 'mapear',
1310
+ 'maximo',
1311
+ 'minimo',
1207
1312
  'numero',
1208
1313
  'número',
1314
+ 'ordenar',
1315
+ 'paraCada',
1316
+ 'primeiroEmCondicao',
1317
+ 'real',
1318
+ 'reduzir',
1319
+ 'somar',
1320
+ 'tamanho',
1209
1321
  'texto',
1210
- 'leia',
1211
- 'escreva',
1212
1322
  'tipo',
1323
+ 'todos',
1324
+ 'todosEmCondicao',
1325
+ 'tupla',
1326
+ 'vetor',
1213
1327
  ];
1214
1328
  // Classes/construtores geralmente começam com letra maiúscula
1215
1329
  const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
@@ -1435,6 +1549,9 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1435
1549
  return Promise.resolve();
1436
1550
  }
1437
1551
  visitarExpressaoRetornar(declaracao) {
1552
+ if (declaracao.valor) {
1553
+ this.marcarVariaveisUsadasEmExpressao(declaracao.valor);
1554
+ }
1438
1555
  return Promise.resolve(undefined);
1439
1556
  }
1440
1557
  visitarExpressaoDeVariavel(expressao) {
@@ -1517,7 +1634,8 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1517
1634
  if (nomeSuperclasse === declaracao.simbolo.lexema) {
1518
1635
  this.erro(superClasseVariavel.simbolo, `A classe '${declaracao.simbolo.lexema}' não pode herdar de si mesma.`);
1519
1636
  }
1520
- else if (!this.classesDeclaradas.has(nomeSuperclasse) && !this.classesExternasConhecidas.has(nomeSuperclasse)) {
1637
+ else if (!this.classesDeclaradas.has(nomeSuperclasse) &&
1638
+ !this.classesExternasConhecidas.has(nomeSuperclasse)) {
1521
1639
  this.erro(superClasseVariavel.simbolo, `Superclasse '${nomeSuperclasse}' não foi declarada.`);
1522
1640
  }
1523
1641
  }
@@ -1554,8 +1672,26 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
1554
1672
  metodo.funcao.corpo.length === 0) {
1555
1673
  this.aviso(metodo.simbolo, `Método especifica tipo de retorno '${tipoRetornoMetodo}', mas não há qualquer retorno correspondente no corpo do método.`);
1556
1674
  }
1557
- for (const stmt of metodo.funcao.corpo) {
1558
- await stmt.aceitar(this);
1675
+ this.gerenciadorEscopos.empilharEscopo();
1676
+ try {
1677
+ for (const parametro of metodo.funcao.parametros) {
1678
+ this.gerenciadorEscopos.declarar(parametro.nome.lexema, {
1679
+ nome: parametro.nome.lexema,
1680
+ tipo: parametro.tipoDado || 'qualquer',
1681
+ imutavel: false,
1682
+ valor: undefined,
1683
+ inicializada: true,
1684
+ usada: true,
1685
+ hashArquivo: parametro.nome.hashArquivo,
1686
+ linha: parametro.nome.linha,
1687
+ });
1688
+ }
1689
+ for (const declaracao of metodo.funcao.corpo) {
1690
+ await declaracao.aceitar(this);
1691
+ }
1692
+ }
1693
+ finally {
1694
+ this.gerenciadorEscopos.desempilharEscopo();
1559
1695
  }
1560
1696
  }
1561
1697
  }
@@ -2676,7 +2812,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2676
2812
  construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
2677
2813
  break;
2678
2814
  default:
2679
- if (construtoTipado.tipo && construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
2815
+ if (construtoTipado.tipo &&
2816
+ construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
2680
2817
  const tipoCorrespondente = this.tiposDefinidosEmCodigo[construtoTipado.tipo];
2681
2818
  const possivelMetodo = tipoCorrespondente.metodos.filter((m) => m.simbolo.lexema === construtoTipado.simbolo.lexema);
2682
2819
  if (possivelMetodo.length > 0) {
@@ -3407,7 +3544,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3407
3544
  this.consumir(delegua_2.default.DOIS_PONTOS, "Esperado ':' após declaração do 'padrao'.");
3408
3545
  const declaracoes = [];
3409
3546
  do {
3410
- declaracoes.push(await this.resolverDeclaracao());
3547
+ declaracoes.push((await this.resolverDeclaracao()));
3411
3548
  } while (!this.verificarTipoSimboloAtual(delegua_2.default.CASO) &&
3412
3549
  !this.verificarTipoSimboloAtual(delegua_2.default.PADRAO) &&
3413
3550
  !this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA));
@@ -3480,7 +3617,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3480
3617
  const simboloNao = new simbolo_1.Simbolo(delegua_2.default.NEGACAO, 'nao', null, Number(simboloAssercao.linha), simboloAssercao.hashArquivo, simboloAssercao.colunaInicio, simboloAssercao.colunaFim);
3481
3618
  const condicaoNegada = new construtos_1.Unario(simboloAssercao.hashArquivo, simboloNao, condicao, 'ANTES');
3482
3619
  const declaracaoFalhar = new declaracoes_1.Falhar(simboloAssercao, mensagemFalha);
3483
- const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [declaracaoFalhar]);
3620
+ const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [
3621
+ declaracaoFalhar,
3622
+ ]);
3484
3623
  return new declaracoes_1.Se(condicaoNegada, blocoFalha);
3485
3624
  }
3486
3625
  async logicaComumFazer() {
@@ -3540,7 +3679,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3540
3679
  construtoCaminhoModulo = new construtos_1.Literal(identificadorModulo.hashArquivo, Number(identificadorModulo.linha), identificadorModulo.lexema);
3541
3680
  break;
3542
3681
  default:
3543
- throw this.erro(this.simbolos[this.atual], "Esperado caminho do módulo como texto ou identificador em declaração de importação.");
3682
+ throw this.erro(this.simbolos[this.atual], 'Esperado caminho do módulo como texto ou identificador em declaração de importação.');
3544
3683
  }
3545
3684
  const importar = new declaracoes_1.Importar(construtoCaminhoModulo);
3546
3685
  if (identificadorDeTudo !== null) {
@@ -3713,7 +3852,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3713
3852
  const caminhoEntao = (await this.resolverDeclaracao());
3714
3853
  let caminhoSenao = undefined;
3715
3854
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.SENAO, delegua_2.default.SENÃO)) {
3716
- caminhoSenao = await this.resolverDeclaracao();
3855
+ caminhoSenao = (await this.resolverDeclaracao());
3717
3856
  }
3718
3857
  return new declaracoes_1.Se(condicao, caminhoEntao, [], caminhoSenao);
3719
3858
  }
@@ -3848,11 +3987,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3848
3987
  const classeDefinida = this.tiposDefinidosEmCodigo[tipoObjeto];
3849
3988
  if (classeDefinida instanceof declaracoes_1.Classe) {
3850
3989
  const nomeMembro = entidadeChamada.simbolo.lexema;
3851
- const metodo = classeDefinida.metodos?.find(m => m.simbolo.lexema === nomeMembro);
3990
+ const metodo = classeDefinida.metodos?.find((m) => m.simbolo.lexema === nomeMembro);
3852
3991
  if (metodo) {
3853
3992
  return metodo.tipo || 'qualquer';
3854
3993
  }
3855
- const propriedade = classeDefinida.propriedades?.find(p => p.nome.lexema === nomeMembro);
3994
+ const propriedade = classeDefinida.propriedades?.find((p) => p.nome.lexema === nomeMembro);
3856
3995
  if (propriedade) {
3857
3996
  return propriedade.tipo || 'qualquer';
3858
3997
  }
@@ -3874,6 +4013,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3874
4013
  const propriedadeCorrespondente = tipoCorrespondente.propriedades[entidadeChamada.simbolo.lexema];
3875
4014
  return propriedadeCorrespondente.tipo;
3876
4015
  }
4016
+ // Chamada via 'isto': verificar métodos da classe em análise antes de checar primitivas.
4017
+ if (entidadeChamada.objeto instanceof construtos_1.Isto) {
4018
+ if (this.metodosClasseAtualEmAnalise) {
4019
+ const nomeMembro = entidadeChamada.simbolo.lexema;
4020
+ const metodo = this.metodosClasseAtualEmAnalise.find((m) => m.simbolo.lexema === nomeMembro);
4021
+ if (metodo) {
4022
+ return metodo.tipo || 'qualquer';
4023
+ }
4024
+ }
4025
+ return 'qualquer';
4026
+ }
3877
4027
  // Este caso ocorre quando a variável/constante é do tipo 'qualquer',
3878
4028
  // e a chamada normalmente é feita para uma primitiva.
3879
4029
  // A inferência, portanto, ocorre pelo uso da primitiva.
@@ -4016,7 +4166,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4016
4166
  }
4017
4167
  for (let [indice, identificador] of identificadores.entries()) {
4018
4168
  const tipoOriginal = tipo; // Preserva o tipo antes da inferência
4019
- tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4169
+ tipo =
4170
+ this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4020
4171
  if (tipo !== 'dicionário') {
4021
4172
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
4022
4173
  }
@@ -4084,7 +4235,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4084
4235
  let retorno = [];
4085
4236
  for (let [indice, identificador] of identificadores.entries()) {
4086
4237
  // Se tipo ainda não foi definido, infere.
4087
- tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4238
+ tipo =
4239
+ this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4088
4240
  if (tipo !== 'dicionário') {
4089
4241
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
4090
4242
  }
@@ -4383,7 +4535,21 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4383
4535
  }
4384
4536
  this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do operador.");
4385
4537
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do operador.");
4386
- const corpoOp = await this.blocoEscopo();
4538
+ const indiceAberturaCorpoOp = this.atual - 1;
4539
+ const quantidadeErrosAntesCorpoOp = this.erros.length;
4540
+ let corpoOp = [];
4541
+ try {
4542
+ corpoOp = await this.blocoEscopo();
4543
+ }
4544
+ catch (erro) {
4545
+ this.erros.push(erro);
4546
+ }
4547
+ if (this.erros.length > quantidadeErrosAntesCorpoOp) {
4548
+ this.atual =
4549
+ this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoOp);
4550
+ corpoOp = [];
4551
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
4552
+ }
4387
4553
  const corpoFuncaoOp = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloNomeMetodo.linha, paramsOp, corpoOp);
4388
4554
  const metodoOp = new declaracoes_1.FuncaoDeclaracao(simboloNomeMetodo, corpoFuncaoOp);
4389
4555
  metodoOp.estatico = ehEstatico;
@@ -4418,7 +4584,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4418
4584
  // Método de classe estrangeira não pode ter corpo.
4419
4585
  if (ehEstrangeira &&
4420
4586
  this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_ESQUERDA)) {
4421
- throw this.erro(this.simbolos[this.atual], "Métodos de classe estrangeira não podem ter corpo.");
4587
+ throw this.erro(this.simbolos[this.atual], 'Métodos de classe estrangeira não podem ter corpo.');
4422
4588
  }
4423
4589
  // Método é abstrato quando: (a) está dentro de um bloco `abstrato {}`,
4424
4590
  // ou (b) a classe é abstrata/estrangeira e o próximo token não é `{`.
@@ -4441,7 +4607,21 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4441
4607
  // Método concreto: com corpo.
4442
4608
  // Inferência de tipo de retorno igual a corpoDaFuncao().
4443
4609
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
4444
- const corpo = await this.blocoEscopo();
4610
+ const indiceAberturaCorpo = this.atual - 1;
4611
+ const quantidadeErrosAntesCorpo = this.erros.length;
4612
+ let corpo = [];
4613
+ try {
4614
+ corpo = await this.blocoEscopo();
4615
+ }
4616
+ catch (erro) {
4617
+ this.erros.push(erro);
4618
+ }
4619
+ if (this.erros.length > quantidadeErrosAntesCorpo) {
4620
+ this.atual =
4621
+ this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpo);
4622
+ corpo = [];
4623
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
4624
+ }
4445
4625
  let expressoesRetorna = [];
4446
4626
  for (const declaracao of corpo) {
4447
4627
  expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
@@ -4507,7 +4687,20 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4507
4687
  }
4508
4688
  this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do acessor.");
4509
4689
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do acessor.");
4510
- const corpoAcessor = await this.blocoEscopo();
4690
+ const indiceAberturaCorpoAcessor = this.atual - 1;
4691
+ const quantidadeErrosAntesCorpoAcessor = this.erros.length;
4692
+ let corpoAcessor = [];
4693
+ try {
4694
+ corpoAcessor = await this.blocoEscopo();
4695
+ }
4696
+ catch (erro) {
4697
+ this.erros.push(erro);
4698
+ }
4699
+ if (this.erros.length > quantidadeErrosAntesCorpoAcessor) {
4700
+ this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoAcessor);
4701
+ corpoAcessor = [];
4702
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
4703
+ }
4511
4704
  // Inferência de tipo de retorno
4512
4705
  let tipoAcessor = 'qualquer';
4513
4706
  let expressoesRetornaAcessor = [];
@@ -4572,6 +4765,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4572
4765
  }
4573
4766
  }
4574
4767
  };
4768
+ this.metodosClasseAtualEmAnalise = metodos;
4575
4769
  await compreenderMembros('publico', false);
4576
4770
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
4577
4771
  // Verificação em tempo de análise: classe deve implementar todos os contratos das interfaces.
@@ -4630,6 +4824,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4630
4824
  const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasses, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstrangeira, ehEstatica, implementaInterfaces, mesclas);
4631
4825
  this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
4632
4826
  this.superclasseAtual = undefined;
4827
+ this.metodosClasseAtualEmAnalise = undefined;
4633
4828
  return definicaoClasse;
4634
4829
  }
4635
4830
  /**
@@ -4777,6 +4972,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4777
4972
  * @returns Sempre retorna `void`.
4778
4973
  */
4779
4974
  sincronizar() {
4975
+ if (this.estaNoFinal()) {
4976
+ return;
4977
+ }
4780
4978
  this.avancarEDevolverAnterior(); // avança além do token com erro
4781
4979
  while (!this.estaNoFinal()) {
4782
4980
  // Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
@@ -4800,6 +4998,21 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4800
4998
  this.avancarEDevolverAnterior();
4801
4999
  }
4802
5000
  }
5001
+ encontrarIndiceAposFechamentoDeBloco(indiceAbertura) {
5002
+ let aberturasPendentes = 1;
5003
+ for (let indice = indiceAbertura + 1; indice < this.simbolos.length; indice++) {
5004
+ if (this.simbolos[indice].tipo === delegua_2.default.CHAVE_ESQUERDA) {
5005
+ aberturasPendentes++;
5006
+ }
5007
+ else if (this.simbolos[indice].tipo === delegua_2.default.CHAVE_DIREITA) {
5008
+ aberturasPendentes--;
5009
+ if (aberturasPendentes === 0) {
5010
+ return indice + 1;
5011
+ }
5012
+ }
5013
+ }
5014
+ return this.simbolos.length;
5015
+ }
4803
5016
  /**
4804
5017
  * Todas as resoluções triviais da linguagem, ou seja, todas as
4805
5018
  * resoluções que podem ocorrer dentro ou fora de um bloco.
@@ -6329,9 +6542,7 @@ class AvaliadorSintaticoPitugues {
6329
6542
  }
6330
6543
  // Modo formatação: {expressao:formato}
6331
6544
  if (mioloLimpo.includes(':')) {
6332
- const [variavel, formato] = mioloLimpo
6333
- .split(':')
6334
- .map(s => s.trim());
6545
+ const [variavel, formato] = mioloLimpo.split(':').map((s) => s.trim());
6335
6546
  if (variavel) {
6336
6547
  return `" + "{:${formato}}".formatar(${variavel}) + "`;
6337
6548
  }
@@ -6455,8 +6666,7 @@ class AvaliadorSintaticoPitugues {
6455
6666
  case pitugues_2.default.INTERPOLACAO:
6456
6667
  const simboloInterpolacao = this.avancarEDevolverAnterior();
6457
6668
  const conteudoOriginal = simboloInterpolacao.literal;
6458
- const codigoTransformado = this
6459
- .transformarInterpolacaoEmFormatacao(conteudoOriginal);
6669
+ const codigoTransformado = this.transformarInterpolacaoEmFormatacao(conteudoOriginal);
6460
6670
  const microLexador = new micro_lexador_pitugues_1.MicroLexadorPitugues();
6461
6671
  const retornoMicroLexador = microLexador.mapear(codigoTransformado);
6462
6672
  const microAvaliadorSintatico = new micro_avaliador_sintatico_pitugues_1.MicroAvaliadorSintaticoPitugues();
@@ -6669,7 +6879,7 @@ class AvaliadorSintaticoPitugues {
6669
6879
  while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
6670
6880
  const operador = this.simbolos[this.atual - 1];
6671
6881
  const expressaoOuCondicao = await this.seTernario();
6672
- this.consumir(pitugues_2.default.SENAO, `Esperado 'senão' ou 'senao' após caminho positivo em se ternário. Atual:
6882
+ this.consumir(pitugues_2.default.SENAO, `Esperado 'senão' ou 'senao' após caminho positivo em se ternário. Atual:
6673
6883
  ${this.simbolos[this.atual].lexema}.`);
6674
6884
  const expressaoSenao = await this.seTernario();
6675
6885
  expressaoEntao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, expressaoEntao, operador, expressaoSenao);
@@ -7981,7 +8191,10 @@ class AvaliadorSintaticoPortugolIpt extends avaliador_sintatico_base_1.Avaliador
7981
8191
  else if (this.verificarSeSimboloAtualEIgualA(portugol_ipt_1.default.DEFEITO)) {
7982
8192
  this.consumir(portugol_ipt_1.default.DOIS_PONTOS, "Esperado ':' após 'defeito'.");
7983
8193
  this.consumirQuebrasLinha();
7984
- const bloco = await this.resolverBloco([portugol_ipt_1.default.FIMESCOLHE, portugol_ipt_1.default.FIM]);
8194
+ const bloco = await this.resolverBloco([
8195
+ portugol_ipt_1.default.FIMESCOLHE,
8196
+ portugol_ipt_1.default.FIM,
8197
+ ]);
7985
8198
  caminhoPadrao = { condicoes: [], declaracoes: bloco.declaracoes };
7986
8199
  }
7987
8200
  else {
@@ -8710,11 +8923,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
8710
8923
  const simboloTente = this.simboloAnterior();
8711
8924
  const blocoTente = [];
8712
8925
  while (!this.estaNoFinal() &&
8713
- ![
8714
- prisma_1.default.PEGUE,
8715
- prisma_1.default.FINALMENTE,
8716
- prisma_1.default.FIM,
8717
- ].includes(this.simbolos[this.atual].tipo)) {
8926
+ ![prisma_1.default.PEGUE, prisma_1.default.FINALMENTE, prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo)) {
8718
8927
  blocoTente.push(await this.resolverDeclaracaoForaDeBloco());
8719
8928
  }
8720
8929
  let blocoPegue = null;
@@ -8982,7 +9191,8 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
8982
9191
  this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
8983
9192
  this.consumir(prisma_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
8984
9193
  const declaracoesCorpo = [];
8985
- while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
9194
+ while (!this.estaNoFinal() &&
9195
+ !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
8986
9196
  declaracoesCorpo.push(await this.resolverDeclaracaoForaDeBloco());
8987
9197
  }
8988
9198
  this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após o corpo do método.");
@@ -19332,7 +19542,7 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
19332
19542
  this.eInicializador = eInicializador;
19333
19543
  }
19334
19544
  aridade() {
19335
- return this.declaracao?.parametros?.filter(p => p.abrangencia !== 'multiplo').length || 0;
19545
+ return this.declaracao?.parametros?.filter((p) => p.abrangencia !== 'multiplo').length || 0;
19336
19546
  }
19337
19547
  /**
19338
19548
  * Método utilizado por Delégua para representar esta função quando impressa.
@@ -20752,7 +20962,8 @@ class InterpretadorBase {
20752
20962
  ];
20753
20963
  const valores = [];
20754
20964
  for (let propriedade of propriedadesValidas) {
20755
- if (expressao.hasOwnProperty(propriedade) && expressao[propriedade] !== undefined) {
20965
+ if (expressao.hasOwnProperty(propriedade) &&
20966
+ expressao[propriedade] !== undefined) {
20756
20967
  const valor = await this.avaliar(expressao[propriedade]);
20757
20968
  valores.push(valor);
20758
20969
  }
@@ -21101,7 +21312,9 @@ class InterpretadorBase {
21101
21312
  valor: valorDireito,
21102
21313
  imutavel: false,
21103
21314
  };
21104
- return await metodoASerChamado.chamar(this, [{ nome: null, valor: argumentoOperador }]);
21315
+ return await metodoASerChamado.chamar(this, [
21316
+ { nome: null, valor: argumentoOperador },
21317
+ ]);
21105
21318
  }
21106
21319
  }
21107
21320
  const tipoEsquerdo = esquerda?.hasOwnProperty('tipo')
@@ -21115,7 +21328,8 @@ class InterpretadorBase {
21115
21328
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21116
21329
  // Auto-promove para BigInt se qualquer operando for BigInt
21117
21330
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21118
- return this.converterParaBigInt(valorEsquerdo) ** this.converterParaBigInt(valorDireito);
21331
+ return (this.converterParaBigInt(valorEsquerdo) **
21332
+ this.converterParaBigInt(valorDireito));
21119
21333
  }
21120
21334
  const resultadoExponenciacao = Math.pow(valorEsquerdo, valorDireito);
21121
21335
  return resultadoExponenciacao;
@@ -21142,7 +21356,8 @@ class InterpretadorBase {
21142
21356
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21143
21357
  // Auto-promove para BigInt se qualquer operando for BigInt
21144
21358
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21145
- return this.converterParaBigInt(valorEsquerdo) - this.converterParaBigInt(valorDireito);
21359
+ return (this.converterParaBigInt(valorEsquerdo) -
21360
+ this.converterParaBigInt(valorDireito));
21146
21361
  }
21147
21362
  return Number(valorEsquerdo) - Number(valorDireito);
21148
21363
  case delegua_1.default.ADICAO:
@@ -21177,8 +21392,10 @@ class InterpretadorBase {
21177
21392
  }
21178
21393
  // TODO: Se tipo for 'qualquer', seria uma boa confiar nos operadores
21179
21394
  // tradicionais do JavaScript?
21180
- if (tipoEsquerdo === 'qualquer' || tipoDireito === 'qualquer' ||
21181
- tipoEsquerdo === 'nulo' || tipoDireito === 'nulo') {
21395
+ if (tipoEsquerdo === 'qualquer' ||
21396
+ tipoDireito === 'qualquer' ||
21397
+ tipoEsquerdo === 'nulo' ||
21398
+ tipoDireito === 'nulo') {
21182
21399
  return valorEsquerdo + valorDireito;
21183
21400
  }
21184
21401
  return this.paraTexto(valorEsquerdo) + this.paraTexto(valorDireito);
@@ -21267,7 +21484,8 @@ class InterpretadorBase {
21267
21484
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21268
21485
  // Auto-promove para BigInt se qualquer operando for BigInt
21269
21486
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21270
- return this.converterParaBigInt(valorEsquerdo) & this.converterParaBigInt(valorDireito);
21487
+ return (this.converterParaBigInt(valorEsquerdo) &
21488
+ this.converterParaBigInt(valorDireito));
21271
21489
  }
21272
21490
  return Number(valorEsquerdo) & Number(valorDireito);
21273
21491
  case delegua_1.default.CIRCUMFLEXO:
@@ -21277,7 +21495,8 @@ class InterpretadorBase {
21277
21495
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21278
21496
  // Auto-promove para BigInt se qualquer operando for BigInt
21279
21497
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21280
- return this.converterParaBigInt(valorEsquerdo) ^ this.converterParaBigInt(valorDireito);
21498
+ return (this.converterParaBigInt(valorEsquerdo) ^
21499
+ this.converterParaBigInt(valorDireito));
21281
21500
  }
21282
21501
  return Number(valorEsquerdo) ^ Number(valorDireito);
21283
21502
  case delegua_1.default.BIT_OR:
@@ -21287,21 +21506,28 @@ class InterpretadorBase {
21287
21506
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21288
21507
  // Auto-promove para BigInt se qualquer operando for BigInt
21289
21508
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21290
- return this.converterParaBigInt(valorEsquerdo) | this.converterParaBigInt(valorDireito);
21509
+ return (this.converterParaBigInt(valorEsquerdo) |
21510
+ this.converterParaBigInt(valorDireito));
21291
21511
  }
21292
21512
  return Number(valorEsquerdo) | Number(valorDireito);
21293
21513
  case delegua_1.default.MENOR_MENOR:
21294
21514
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21295
21515
  // Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
21296
- if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint' || Number(valorDireito) >= 32) {
21297
- return this.converterParaBigInt(valorEsquerdo) << this.converterParaBigInt(valorDireito);
21516
+ if (typeof valorEsquerdo === 'bigint' ||
21517
+ typeof valorDireito === 'bigint' ||
21518
+ Number(valorDireito) >= 32) {
21519
+ return (this.converterParaBigInt(valorEsquerdo) <<
21520
+ this.converterParaBigInt(valorDireito));
21298
21521
  }
21299
21522
  return Number(valorEsquerdo) << Number(valorDireito);
21300
21523
  case delegua_1.default.MAIOR_MAIOR:
21301
21524
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21302
21525
  // Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
21303
- if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint' || Number(valorDireito) >= 32) {
21304
- return this.converterParaBigInt(valorEsquerdo) >> this.converterParaBigInt(valorDireito);
21526
+ if (typeof valorEsquerdo === 'bigint' ||
21527
+ typeof valorDireito === 'bigint' ||
21528
+ Number(valorDireito) >= 32) {
21529
+ return (this.converterParaBigInt(valorEsquerdo) >>
21530
+ this.converterParaBigInt(valorDireito));
21305
21531
  }
21306
21532
  return Number(valorEsquerdo) >> Number(valorDireito);
21307
21533
  case delegua_1.default.DIFERENTE:
@@ -23448,7 +23674,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23448
23674
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23449
23675
  if (objeto.constructor === Object) {
23450
23676
  if (expressao.nomeMetodo in primitivas_dicionario_1.default) {
23451
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomeMetodo].implementacao;
23677
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomeMetodo]
23678
+ .implementacao;
23452
23679
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.nomeMetodo, 'dicionário');
23453
23680
  }
23454
23681
  return objeto[expressao.nomeMetodo] || null;
@@ -23487,7 +23714,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23487
23714
  case delegua_1.default.NUMERO:
23488
23715
  case delegua_1.default.NÚMERO:
23489
23716
  if (expressao.nomeMetodo in primitivas_numero_1.default) {
23490
- const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.nomeMetodo].implementacao;
23717
+ const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.nomeMetodo]
23718
+ .implementacao;
23491
23719
  if (metodoDePrimitivaNumero) {
23492
23720
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaNumero, expressao.nomeMetodo, tipoObjeto);
23493
23721
  }
@@ -23500,7 +23728,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23500
23728
  break;
23501
23729
  case delegua_1.default.TEXTO:
23502
23730
  if (expressao.nomeMetodo in primitivas_texto_1.default) {
23503
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.nomeMetodo].implementacao;
23731
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.nomeMetodo]
23732
+ .implementacao;
23504
23733
  if (metodoDePrimitivaTexto) {
23505
23734
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.nomeMetodo, 'texto');
23506
23735
  }
@@ -23520,7 +23749,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23520
23749
  case delegua_1.default.VETOR_QUALQUER:
23521
23750
  case delegua_1.default.VETOR_TEXTO:
23522
23751
  if (expressao.nomeMetodo in primitivas_vetor_1.default) {
23523
- const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.nomeMetodo].implementacao;
23752
+ const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.nomeMetodo]
23753
+ .implementacao;
23524
23754
  if (metodoDePrimitivaVetor) {
23525
23755
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaVetor, expressao.nomeMetodo, tipoObjeto);
23526
23756
  }
@@ -23621,7 +23851,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23621
23851
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23622
23852
  if (objeto.constructor === Object) {
23623
23853
  if (expressao.simbolo.lexema in primitivas_dicionario_1.default) {
23624
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.simbolo.lexema].implementacao;
23854
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.simbolo.lexema]
23855
+ .implementacao;
23625
23856
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.simbolo.lexema, 'dicionário');
23626
23857
  }
23627
23858
  return objeto[expressao.simbolo.lexema];
@@ -23634,7 +23865,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23634
23865
  return funcaoExt.funcaoPorExtensao(objeto);
23635
23866
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo texto.`);
23636
23867
  }
23637
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema].implementacao;
23868
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema]
23869
+ .implementacao;
23638
23870
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.simbolo.lexema, 'texto');
23639
23871
  }
23640
23872
  // A partir daqui, presume-se que o objeto é uma das estruturas
@@ -23659,7 +23891,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23659
23891
  return funcaoExt.funcaoPorExtensao(objeto);
23660
23892
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23661
23893
  }
23662
- const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.simbolo.lexema].implementacao;
23894
+ const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.simbolo.lexema]
23895
+ .implementacao;
23663
23896
  if (metodoDePrimitivaNumero) {
23664
23897
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaNumero, expressao.simbolo.lexema, 'número');
23665
23898
  }
@@ -23672,7 +23905,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23672
23905
  return funcaoExt.funcaoPorExtensao(objeto);
23673
23906
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23674
23907
  }
23675
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema].implementacao;
23908
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema]
23909
+ .implementacao;
23676
23910
  if (metodoDePrimitivaTexto) {
23677
23911
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.simbolo.lexema, 'texto');
23678
23912
  }
@@ -23692,7 +23926,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23692
23926
  return funcaoExt.funcaoPorExtensao(objeto);
23693
23927
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23694
23928
  }
23695
- const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.simbolo.lexema].implementacao;
23929
+ const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.simbolo.lexema]
23930
+ .implementacao;
23696
23931
  if (metodoDePrimitivaVetor) {
23697
23932
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaVetor, expressao.simbolo.lexema, tipoObjeto);
23698
23933
  }
@@ -23740,7 +23975,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23740
23975
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23741
23976
  if (objeto.constructor === Object) {
23742
23977
  if (expressao.nomePropriedade in primitivas_dicionario_1.default) {
23743
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomePropriedade].implementacao;
23978
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomePropriedade]
23979
+ .implementacao;
23744
23980
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.nomePropriedade, 'dicionário');
23745
23981
  }
23746
23982
  return objeto[expressao.nomePropriedade] || null;
@@ -24416,9 +24652,9 @@ class PilhaEscoposExecucao {
24416
24652
  }
24417
24653
  espacoMemoriaAncestral.valores[simbolo.lexema] = {
24418
24654
  valor,
24419
- tipo: (variavel.tipo === 'nulo' && !variavel.tipoExplicito)
24655
+ tipo: variavel.tipo === 'nulo' && !variavel.tipoExplicito
24420
24656
  ? (0, inferenciador_1.inferirTipoVariavel)(valor)
24421
- : (variavel.tipo || (0, inferenciador_1.inferirTipoVariavel)(valor)),
24657
+ : variavel.tipo || (0, inferenciador_1.inferirTipoVariavel)(valor),
24422
24658
  imutavel: false,
24423
24659
  tipoExplicito: variavel.tipoExplicito,
24424
24660
  };
@@ -24439,9 +24675,7 @@ class PilhaEscoposExecucao {
24439
24675
  }
24440
24676
  const tipoAtual = variavel && variavel.hasOwnProperty('tipo') ? variavel.tipo : null;
24441
24677
  const deveLiberarTipo = tipoAtual === 'nulo' && !variavel.tipoExplicito;
24442
- const tipoInferido = tipoAtual && !deveLiberarTipo
24443
- ? tipoAtual
24444
- : (0, inferenciador_1.inferirTipoVariavel)(valor);
24678
+ const tipoInferido = tipoAtual && !deveLiberarTipo ? tipoAtual : (0, inferenciador_1.inferirTipoVariavel)(valor);
24445
24679
  const tipo = (tipoInferido || 'objeto').toLowerCase();
24446
24680
  const valorResolvido = this.converterValor(tipo, valor);
24447
24681
  if (indice !== undefined && indice !== null) {
@@ -24713,7 +24947,9 @@ class LexadorCalango {
24713
24947
  const linhaPrimeiroCaracter = this.linha;
24714
24948
  // Restringe leitura à linha atual (como analisarNumero), evitando
24715
24949
  // que avancar() mude this.linha e corrompa o cálculo do substring.
24716
- while (this.simboloAtual() !== "'" && this.linha === linhaPrimeiroCaracter && !this.eFinalDoCodigo()) {
24950
+ while (this.simboloAtual() !== "'" &&
24951
+ this.linha === linhaPrimeiroCaracter &&
24952
+ !this.eFinalDoCodigo()) {
24717
24953
  this.avancar();
24718
24954
  }
24719
24955
  if (this.linha !== linhaPrimeiroCaracter || this.eFinalDoCodigo()) {
@@ -27789,10 +28025,12 @@ class Lexador {
27789
28025
  break;
27790
28026
  }
27791
28027
  }
27792
- valor += hex.length === 2 ? String.fromCharCode(parseInt(hex, 16)) : '\\x' + hex;
28028
+ valor +=
28029
+ hex.length === 2 ? String.fromCharCode(parseInt(hex, 16)) : '\\x' + hex;
27793
28030
  break;
27794
28031
  }
27795
- case '\0': break; // barra invertida no fim de linha: ignora e continua na próxima linha
28032
+ case '\0':
28033
+ break; // barra invertida no fim de linha: ignora e continua na próxima linha
27796
28034
  default:
27797
28035
  valor += '\\' + proximoCaractere;
27798
28036
  break;
@@ -45904,13 +46142,19 @@ class TradutorElixir {
45904
46142
  }
45905
46143
  mapearTipoParaTypespec(tipo) {
45906
46144
  switch (tipo) {
45907
- case 'texto': return 'String.t()';
46145
+ case 'texto':
46146
+ return 'String.t()';
45908
46147
  case 'numero':
45909
- case 'inteiro': return 'integer()';
45910
- case 'real': return 'float()';
45911
- case 'logico': return 'boolean()';
45912
- case 'vazio': return 'no_return()';
45913
- default: return 'term()';
46148
+ case 'inteiro':
46149
+ return 'integer()';
46150
+ case 'real':
46151
+ return 'float()';
46152
+ case 'logico':
46153
+ return 'boolean()';
46154
+ case 'vazio':
46155
+ return 'no_return()';
46156
+ default:
46157
+ return 'term()';
45914
46158
  }
45915
46159
  }
45916
46160
  /**
@@ -45999,11 +46243,15 @@ class TradutorElixir {
45999
46243
  this.moduloAtual = nomeModulo;
46000
46244
  if (declaracao.estrangeira) {
46001
46245
  // Classe estrangeira: emitir @callback para cada método, definindo a interface esperada do módulo.
46002
- resultado += this.adicionarIndentacao() + `@moduledoc "Classe estrangeira — implementação externa."\n`;
46246
+ resultado +=
46247
+ this.adicionarIndentacao() +
46248
+ `@moduledoc "Classe estrangeira — implementação externa."\n`;
46003
46249
  for (const metodo of declaracao.metodos) {
46004
46250
  const params = metodo.funcao.parametros.map(() => 'term()').join(', ');
46005
46251
  const retorno = this.mapearTipoParaTypespec(metodo.funcao.tipo);
46006
- resultado += this.adicionarIndentacao() + `@callback ${metodo.simbolo.lexema}(${params}) :: ${retorno}\n`;
46252
+ resultado +=
46253
+ this.adicionarIndentacao() +
46254
+ `@callback ${metodo.simbolo.lexema}(${params}) :: ${retorno}\n`;
46007
46255
  }
46008
46256
  }
46009
46257
  else {
@@ -48480,22 +48728,38 @@ class TradutorPortugolIpt {
48480
48728
  // ── Operadores ───────────────────────────────────────────────────────────────
48481
48729
  traduzirOperador(tipo) {
48482
48730
  switch (tipo) {
48483
- case portugol_ipt_1.default.ADICAO: return '+';
48484
- case portugol_ipt_1.default.SUBTRACAO: return '-';
48485
- case portugol_ipt_1.default.MULTIPLICACAO: return '*';
48486
- case portugol_ipt_1.default.DIVISAO: return '/';
48487
- case portugol_ipt_1.default.MODULO: return '%';
48488
- case portugol_ipt_1.default.EXPONENCIACAO: return '**';
48489
- case portugol_ipt_1.default.IGUAL: return '==';
48490
- case portugol_ipt_1.default.DIFERENTE: return '!=';
48491
- case portugol_ipt_1.default.MAIOR: return '>';
48492
- case portugol_ipt_1.default.MAIOR_IGUAL: return '>=';
48493
- case portugol_ipt_1.default.MENOR: return '<';
48494
- case portugol_ipt_1.default.MENOR_IGUAL: return '<=';
48495
- case portugol_ipt_1.default.E: return '&&';
48496
- case portugol_ipt_1.default.OU: return '||';
48497
- case portugol_ipt_1.default.XOU: return '^^';
48498
- default: return tipo;
48731
+ case portugol_ipt_1.default.ADICAO:
48732
+ return '+';
48733
+ case portugol_ipt_1.default.SUBTRACAO:
48734
+ return '-';
48735
+ case portugol_ipt_1.default.MULTIPLICACAO:
48736
+ return '*';
48737
+ case portugol_ipt_1.default.DIVISAO:
48738
+ return '/';
48739
+ case portugol_ipt_1.default.MODULO:
48740
+ return '%';
48741
+ case portugol_ipt_1.default.EXPONENCIACAO:
48742
+ return '**';
48743
+ case portugol_ipt_1.default.IGUAL:
48744
+ return '==';
48745
+ case portugol_ipt_1.default.DIFERENTE:
48746
+ return '!=';
48747
+ case portugol_ipt_1.default.MAIOR:
48748
+ return '>';
48749
+ case portugol_ipt_1.default.MAIOR_IGUAL:
48750
+ return '>=';
48751
+ case portugol_ipt_1.default.MENOR:
48752
+ return '<';
48753
+ case portugol_ipt_1.default.MENOR_IGUAL:
48754
+ return '<=';
48755
+ case portugol_ipt_1.default.E:
48756
+ return '&&';
48757
+ case portugol_ipt_1.default.OU:
48758
+ return '||';
48759
+ case portugol_ipt_1.default.XOU:
48760
+ return '^^';
48761
+ default:
48762
+ return tipo;
48499
48763
  }
48500
48764
  }
48501
48765
  // ── Construtos ───────────────────────────────────────────────────────────────
@@ -48537,10 +48801,13 @@ class TradutorPortugolIpt {
48537
48801
  traduzirConstrutoUnario(unario) {
48538
48802
  const operando = this.traduzirConstruto(unario.operando);
48539
48803
  switch (unario.operador.tipo) {
48540
- case portugol_ipt_1.default.SUBTRACAO: return `-${operando}`;
48804
+ case portugol_ipt_1.default.SUBTRACAO:
48805
+ return `-${operando}`;
48541
48806
  case portugol_ipt_1.default.NEGACAO:
48542
- case portugol_ipt_1.default.NAO: return `!(${operando})`;
48543
- default: return `!(${operando})`;
48807
+ case portugol_ipt_1.default.NAO:
48808
+ return `!(${operando})`;
48809
+ default:
48810
+ return `!(${operando})`;
48544
48811
  }
48545
48812
  }
48546
48813
  traduzirConstrutoAtribuir(atribuir) {
@@ -48585,24 +48852,36 @@ class TradutorPortugolIpt {
48585
48852
  }
48586
48853
  tipoParaDelégua(tipo) {
48587
48854
  switch (tipo) {
48588
- case 'inteiro': return 'inteiro';
48589
- case 'texto': return 'texto';
48590
- case 'real': return 'real';
48855
+ case 'inteiro':
48856
+ return 'inteiro';
48857
+ case 'texto':
48858
+ return 'texto';
48859
+ case 'real':
48860
+ return 'real';
48591
48861
  case 'lógico':
48592
- case 'logico': return 'logico';
48593
- case 'caracter': return 'caracter';
48594
- default: return tipo;
48862
+ case 'logico':
48863
+ return 'logico';
48864
+ case 'caracter':
48865
+ return 'caracter';
48866
+ default:
48867
+ return tipo;
48595
48868
  }
48596
48869
  }
48597
48870
  valorPadraoPorTipo(tipo) {
48598
48871
  switch (tipo) {
48599
- case 'inteiro': return '0';
48600
- case 'texto': return "''";
48601
- case 'real': return '0.0';
48872
+ case 'inteiro':
48873
+ return '0';
48874
+ case 'texto':
48875
+ return "''";
48876
+ case 'real':
48877
+ return '0.0';
48602
48878
  case 'lógico':
48603
- case 'logico': return 'falso';
48604
- case 'caracter': return "' '";
48605
- default: return 'nulo';
48879
+ case 'logico':
48880
+ return 'falso';
48881
+ case 'caracter':
48882
+ return "' '";
48883
+ default:
48884
+ return 'nulo';
48606
48885
  }
48607
48886
  }
48608
48887
  traduzirDeclaracaoVar(declaracaoVar) {
@@ -48695,9 +48974,7 @@ class TradutorPortugolIpt {
48695
48974
  init = this.traduzirDeclaracao(ini);
48696
48975
  }
48697
48976
  }
48698
- const cond = declaracaoPara.condicao
48699
- ? this.traduzirConstruto(declaracaoPara.condicao)
48700
- : '';
48977
+ const cond = declaracaoPara.condicao ? this.traduzirConstruto(declaracaoPara.condicao) : '';
48701
48978
  const incr = declaracaoPara.incrementar
48702
48979
  ? this.traduzirConstruto(declaracaoPara.incrementar)
48703
48980
  : '';
@@ -48717,7 +48994,8 @@ class TradutorPortugolIpt {
48717
48994
  this.indentacao += 4;
48718
48995
  if (caminho.condicoes && caminho.condicoes.length > 0) {
48719
48996
  for (const cond of caminho.condicoes) {
48720
- resultado += ' '.repeat(this.indentacao) + `caso ${this.traduzirConstruto(cond)}:\n`;
48997
+ resultado +=
48998
+ ' '.repeat(this.indentacao) + `caso ${this.traduzirConstruto(cond)}:\n`;
48721
48999
  }
48722
49000
  }
48723
49001
  else {
@@ -49731,7 +50009,9 @@ class TradutorReversoCalango {
49731
50009
  .map((parametro) => this.traduzirParametro(parametro))
49732
50010
  .filter((p) => p)
49733
50011
  .join(', ');
49734
- const tipoRetorno = declaracaoFuncao.tipo && declaracaoFuncao.tipo !== 'qualquer' && declaracaoFuncao.tipo !== 'vazio'
50012
+ const tipoRetorno = declaracaoFuncao.tipo &&
50013
+ declaracaoFuncao.tipo !== 'qualquer' &&
50014
+ declaracaoFuncao.tipo !== 'vazio'
49735
50015
  ? `: ${declaracaoFuncao.tipo}`
49736
50016
  : '';
49737
50017
  let resultado = `funcao ${declaracaoFuncao.simbolo.lexema}(${parametros})${tipoRetorno} `;
@@ -50259,10 +50539,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50259
50539
  return node.text;
50260
50540
  }
50261
50541
  visitFile_input(ctx) {
50262
- return ctx.stmt().map((s) => this.visit(s)).join('\n');
50542
+ return ctx
50543
+ .stmt()
50544
+ .map((s) => this.visit(s))
50545
+ .join('\n');
50263
50546
  }
50264
50547
  visitSimple_stmt(ctx) {
50265
- return ctx.small_stmt().map((s) => this.visit(s)).join('; ');
50548
+ return ctx
50549
+ .small_stmt()
50550
+ .map((s) => this.visit(s))
50551
+ .join('; ');
50266
50552
  }
50267
50553
  visitExpr_stmt(ctx) {
50268
50554
  const lhs = this.visit(ctx.testlist_star_expr());
@@ -50277,11 +50563,7 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50277
50563
  const op = this.visitAugassign(ctx.augassign());
50278
50564
  const testlist = ctx.testlist();
50279
50565
  const yieldExpr = ctx.yield_expr();
50280
- const rhs = testlist
50281
- ? this.visit(testlist)
50282
- : yieldExpr
50283
- ? this.visit(yieldExpr)
50284
- : '';
50566
+ const rhs = testlist ? this.visit(testlist) : yieldExpr ? this.visit(yieldExpr) : '';
50285
50567
  return `${lhs} ${op} ${rhs}`;
50286
50568
  }
50287
50569
  return lhs;
@@ -50318,10 +50600,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50318
50600
  return ctx.text;
50319
50601
  }
50320
50602
  visitTestlist_star_expr(ctx) {
50321
- return ctx.test().map((t) => this.visit(t)).join(', ');
50603
+ return ctx
50604
+ .test()
50605
+ .map((t) => this.visit(t))
50606
+ .join(', ');
50322
50607
  }
50323
50608
  visitTestlist(ctx) {
50324
- return ctx.test().map((t) => this.visit(t)).join(', ');
50609
+ return ctx
50610
+ .test()
50611
+ .map((t) => this.visit(t))
50612
+ .join(', ');
50325
50613
  }
50326
50614
  visitTest(ctx) {
50327
50615
  const orTests = ctx.or_test();
@@ -50334,10 +50622,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50334
50622
  return this.visitChildren(ctx);
50335
50623
  }
50336
50624
  visitOr_test(ctx) {
50337
- return ctx.and_test().map((t) => this.visit(t)).join(' ou ');
50625
+ return ctx
50626
+ .and_test()
50627
+ .map((t) => this.visit(t))
50628
+ .join(' ou ');
50338
50629
  }
50339
50630
  visitAnd_test(ctx) {
50340
- return ctx.not_test().map((t) => this.visit(t)).join(' e ');
50631
+ return ctx
50632
+ .not_test()
50633
+ .map((t) => this.visit(t))
50634
+ .join(' e ');
50341
50635
  }
50342
50636
  visitNot_test(ctx) {
50343
50637
  if (ctx.NOT()) {
@@ -50523,7 +50817,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50523
50817
  return ctx.text;
50524
50818
  }
50525
50819
  visitArglist(ctx) {
50526
- return ctx.argument().map((a) => this.visit(a)).join(', ');
50820
+ return ctx
50821
+ .argument()
50822
+ .map((a) => this.visit(a))
50823
+ .join(', ');
50527
50824
  }
50528
50825
  visitArgument(ctx) {
50529
50826
  const testes = ctx.test();
@@ -50541,7 +50838,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50541
50838
  if (compFor) {
50542
50839
  return this.traduzirCompreensao(ctx.test(0), compFor);
50543
50840
  }
50544
- return ctx.test().map((t) => this.visit(t)).join(', ');
50841
+ return ctx
50842
+ .test()
50843
+ .map((t) => this.visit(t))
50844
+ .join(', ');
50545
50845
  }
50546
50846
  traduzirCompreensao(exprCtx, compFor) {
50547
50847
  const variavel = this.visit(compFor.exprlist());
@@ -50598,7 +50898,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50598
50898
  return tests.map((t) => this.visit(t)).join(', ');
50599
50899
  }
50600
50900
  visitSubscriptlist(ctx) {
50601
- return ctx.subscript().map((s) => this.visitSubscript(s)).join(', ');
50901
+ return ctx
50902
+ .subscript()
50903
+ .map((s) => this.visitSubscript(s))
50904
+ .join(', ');
50602
50905
  }
50603
50906
  visitSubscript(ctx) {
50604
50907
  const tests = ctx.test();