@designliquido/delegua 1.18.3 → 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 (105) 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.map +1 -1
  10. package/avaliador-sintatico/avaliador-sintatico.js +21 -15
  11. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js +17 -9
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +3 -6
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +4 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +3 -6
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  28. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  29. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +1 -4
  30. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  31. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
  32. package/bibliotecas/dialetos/pitugues/primitivas-texto.js +15 -16
  33. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  34. package/bibliotecas/dialetos/prisma/biblioteca-global.js +4 -12
  35. package/bibliotecas/dialetos/prisma/biblioteca-global.js.map +1 -1
  36. package/bibliotecas/dialetos/tenda/biblioteca-global.d.ts.map +1 -1
  37. package/bibliotecas/dialetos/tenda/biblioteca-global.js +141 -47
  38. package/bibliotecas/dialetos/tenda/biblioteca-global.js.map +1 -1
  39. package/bin/package.json +1 -1
  40. package/construtos/ajuda-como-construto.d.ts.map +1 -1
  41. package/construtos/ajuda-como-construto.js.map +1 -1
  42. package/estilizador/quebrador-linha.d.ts.map +1 -1
  43. package/estilizador/quebrador-linha.js.map +1 -1
  44. package/estilizador/regras/regra-convencao-nomenclatura.d.ts.map +1 -1
  45. package/estilizador/regras/regra-convencao-nomenclatura.js.map +1 -1
  46. package/estilizador/regras/regra-explicitar-tipos-parametros.d.ts.map +1 -1
  47. package/estilizador/regras/regra-explicitar-tipos-parametros.js.map +1 -1
  48. package/estilizador/regras/regra-paradigma-consistente.d.ts.map +1 -1
  49. package/estilizador/regras/regra-paradigma-consistente.js.map +1 -1
  50. package/interfaces/declaracoes/caminho-se-senao-interface.d.ts +2 -2
  51. package/interfaces/estilizador/opcoes-paradigma-consistente-interface.d.ts +1 -1
  52. package/interfaces/estilizador/regra-estilizacao-interface.d.ts +2 -2
  53. package/interfaces/formatador/index.d.ts +1 -1
  54. package/interfaces/formatador/opcoes-formatador-delegua-interface.d.ts +1 -1
  55. package/interpretador/dialetos/calango/interpretador-calango.d.ts.map +1 -1
  56. package/interpretador/dialetos/calango/interpretador-calango.js.map +1 -1
  57. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  58. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  59. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  60. package/interpretador/dialetos/pitugues/comum.js +10 -14
  61. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  62. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  63. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +1 -0
  64. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  65. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  66. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +91 -39
  67. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  68. package/interpretador/dialetos/tenda/interpretador-tenda.d.ts.map +1 -1
  69. package/interpretador/dialetos/tenda/interpretador-tenda.js.map +1 -1
  70. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  71. package/interpretador/estruturas/delegua-funcao.js +1 -1
  72. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  73. package/interpretador/interpretador-base.d.ts.map +1 -1
  74. package/interpretador/interpretador-base.js +29 -13
  75. package/interpretador/interpretador-base.js.map +1 -1
  76. package/interpretador/interpretador.d.ts.map +1 -1
  77. package/interpretador/interpretador.js +20 -10
  78. package/interpretador/interpretador.js.map +1 -1
  79. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  80. package/interpretador/pilha-escopos-execucao.js +3 -5
  81. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  82. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  83. package/lexador/dialetos/lexador-calango.js +3 -1
  84. package/lexador/dialetos/lexador-calango.js.map +1 -1
  85. package/lexador/lexador.d.ts.map +1 -1
  86. package/lexador/lexador.js +4 -2
  87. package/lexador/lexador.js.map +1 -1
  88. package/lexador/palavras-reservadas.d.ts.map +1 -1
  89. package/lexador/palavras-reservadas.js.map +1 -1
  90. package/package.json +1 -1
  91. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  92. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  93. package/tradutores/tradutor-elixir.d.ts.map +1 -1
  94. package/tradutores/tradutor-elixir.js +18 -8
  95. package/tradutores/tradutor-elixir.js.map +1 -1
  96. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  97. package/tradutores/tradutor-portugol-ipt.js +65 -35
  98. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  99. package/tradutores/tradutor-reverso-calango.d.ts.map +1 -1
  100. package/tradutores/tradutor-reverso-calango.js +3 -1
  101. package/tradutores/tradutor-reverso-calango.js.map +1 -1
  102. package/tradutores/tradutor-reverso-python.d.ts.map +1 -1
  103. package/tradutores/tradutor-reverso-python.js +37 -14
  104. package/tradutores/tradutor-reverso-python.js.map +1 -1
  105. package/umd/delegua.js +366 -134
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
  }
@@ -3878,7 +4017,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3878
4017
  if (entidadeChamada.objeto instanceof construtos_1.Isto) {
3879
4018
  if (this.metodosClasseAtualEmAnalise) {
3880
4019
  const nomeMembro = entidadeChamada.simbolo.lexema;
3881
- const metodo = this.metodosClasseAtualEmAnalise.find(m => m.simbolo.lexema === nomeMembro);
4020
+ const metodo = this.metodosClasseAtualEmAnalise.find((m) => m.simbolo.lexema === nomeMembro);
3882
4021
  if (metodo) {
3883
4022
  return metodo.tipo || 'qualquer';
3884
4023
  }
@@ -4027,7 +4166,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4027
4166
  }
4028
4167
  for (let [indice, identificador] of identificadores.entries()) {
4029
4168
  const tipoOriginal = tipo; // Preserva o tipo antes da inferência
4030
- tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4169
+ tipo =
4170
+ this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4031
4171
  if (tipo !== 'dicionário') {
4032
4172
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
4033
4173
  }
@@ -4095,7 +4235,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4095
4235
  let retorno = [];
4096
4236
  for (let [indice, identificador] of identificadores.entries()) {
4097
4237
  // Se tipo ainda não foi definido, infere.
4098
- tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4238
+ tipo =
4239
+ this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo) ?? tipo;
4099
4240
  if (tipo !== 'dicionário') {
4100
4241
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
4101
4242
  }
@@ -4404,7 +4545,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4404
4545
  this.erros.push(erro);
4405
4546
  }
4406
4547
  if (this.erros.length > quantidadeErrosAntesCorpoOp) {
4407
- this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoOp);
4548
+ this.atual =
4549
+ this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoOp);
4408
4550
  corpoOp = [];
4409
4551
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
4410
4552
  }
@@ -4442,7 +4584,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4442
4584
  // Método de classe estrangeira não pode ter corpo.
4443
4585
  if (ehEstrangeira &&
4444
4586
  this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_ESQUERDA)) {
4445
- 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.');
4446
4588
  }
4447
4589
  // Método é abstrato quando: (a) está dentro de um bloco `abstrato {}`,
4448
4590
  // ou (b) a classe é abstrata/estrangeira e o próximo token não é `{`.
@@ -4475,7 +4617,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4475
4617
  this.erros.push(erro);
4476
4618
  }
4477
4619
  if (this.erros.length > quantidadeErrosAntesCorpo) {
4478
- this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpo);
4620
+ this.atual =
4621
+ this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpo);
4479
4622
  corpo = [];
4480
4623
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
4481
4624
  }
@@ -4553,8 +4696,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
4553
4696
  catch (erro) {
4554
4697
  this.erros.push(erro);
4555
4698
  }
4556
- if (this.erros.length >
4557
- quantidadeErrosAntesCorpoAcessor) {
4699
+ if (this.erros.length > quantidadeErrosAntesCorpoAcessor) {
4558
4700
  this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoAcessor);
4559
4701
  corpoAcessor = [];
4560
4702
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
@@ -6400,9 +6542,7 @@ class AvaliadorSintaticoPitugues {
6400
6542
  }
6401
6543
  // Modo formatação: {expressao:formato}
6402
6544
  if (mioloLimpo.includes(':')) {
6403
- const [variavel, formato] = mioloLimpo
6404
- .split(':')
6405
- .map(s => s.trim());
6545
+ const [variavel, formato] = mioloLimpo.split(':').map((s) => s.trim());
6406
6546
  if (variavel) {
6407
6547
  return `" + "{:${formato}}".formatar(${variavel}) + "`;
6408
6548
  }
@@ -6526,8 +6666,7 @@ class AvaliadorSintaticoPitugues {
6526
6666
  case pitugues_2.default.INTERPOLACAO:
6527
6667
  const simboloInterpolacao = this.avancarEDevolverAnterior();
6528
6668
  const conteudoOriginal = simboloInterpolacao.literal;
6529
- const codigoTransformado = this
6530
- .transformarInterpolacaoEmFormatacao(conteudoOriginal);
6669
+ const codigoTransformado = this.transformarInterpolacaoEmFormatacao(conteudoOriginal);
6531
6670
  const microLexador = new micro_lexador_pitugues_1.MicroLexadorPitugues();
6532
6671
  const retornoMicroLexador = microLexador.mapear(codigoTransformado);
6533
6672
  const microAvaliadorSintatico = new micro_avaliador_sintatico_pitugues_1.MicroAvaliadorSintaticoPitugues();
@@ -6740,7 +6879,7 @@ class AvaliadorSintaticoPitugues {
6740
6879
  while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
6741
6880
  const operador = this.simbolos[this.atual - 1];
6742
6881
  const expressaoOuCondicao = await this.seTernario();
6743
- 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:
6744
6883
  ${this.simbolos[this.atual].lexema}.`);
6745
6884
  const expressaoSenao = await this.seTernario();
6746
6885
  expressaoEntao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, expressaoEntao, operador, expressaoSenao);
@@ -8052,7 +8191,10 @@ class AvaliadorSintaticoPortugolIpt extends avaliador_sintatico_base_1.Avaliador
8052
8191
  else if (this.verificarSeSimboloAtualEIgualA(portugol_ipt_1.default.DEFEITO)) {
8053
8192
  this.consumir(portugol_ipt_1.default.DOIS_PONTOS, "Esperado ':' após 'defeito'.");
8054
8193
  this.consumirQuebrasLinha();
8055
- 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
+ ]);
8056
8198
  caminhoPadrao = { condicoes: [], declaracoes: bloco.declaracoes };
8057
8199
  }
8058
8200
  else {
@@ -8781,11 +8923,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
8781
8923
  const simboloTente = this.simboloAnterior();
8782
8924
  const blocoTente = [];
8783
8925
  while (!this.estaNoFinal() &&
8784
- ![
8785
- prisma_1.default.PEGUE,
8786
- prisma_1.default.FINALMENTE,
8787
- prisma_1.default.FIM,
8788
- ].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)) {
8789
8927
  blocoTente.push(await this.resolverDeclaracaoForaDeBloco());
8790
8928
  }
8791
8929
  let blocoPegue = null;
@@ -9053,7 +9191,8 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
9053
9191
  this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
9054
9192
  this.consumir(prisma_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
9055
9193
  const declaracoesCorpo = [];
9056
- while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
9194
+ while (!this.estaNoFinal() &&
9195
+ !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
9057
9196
  declaracoesCorpo.push(await this.resolverDeclaracaoForaDeBloco());
9058
9197
  }
9059
9198
  this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após o corpo do método.");
@@ -19403,7 +19542,7 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
19403
19542
  this.eInicializador = eInicializador;
19404
19543
  }
19405
19544
  aridade() {
19406
- return this.declaracao?.parametros?.filter(p => p.abrangencia !== 'multiplo').length || 0;
19545
+ return this.declaracao?.parametros?.filter((p) => p.abrangencia !== 'multiplo').length || 0;
19407
19546
  }
19408
19547
  /**
19409
19548
  * Método utilizado por Delégua para representar esta função quando impressa.
@@ -20823,7 +20962,8 @@ class InterpretadorBase {
20823
20962
  ];
20824
20963
  const valores = [];
20825
20964
  for (let propriedade of propriedadesValidas) {
20826
- if (expressao.hasOwnProperty(propriedade) && expressao[propriedade] !== undefined) {
20965
+ if (expressao.hasOwnProperty(propriedade) &&
20966
+ expressao[propriedade] !== undefined) {
20827
20967
  const valor = await this.avaliar(expressao[propriedade]);
20828
20968
  valores.push(valor);
20829
20969
  }
@@ -21172,7 +21312,9 @@ class InterpretadorBase {
21172
21312
  valor: valorDireito,
21173
21313
  imutavel: false,
21174
21314
  };
21175
- return await metodoASerChamado.chamar(this, [{ nome: null, valor: argumentoOperador }]);
21315
+ return await metodoASerChamado.chamar(this, [
21316
+ { nome: null, valor: argumentoOperador },
21317
+ ]);
21176
21318
  }
21177
21319
  }
21178
21320
  const tipoEsquerdo = esquerda?.hasOwnProperty('tipo')
@@ -21186,7 +21328,8 @@ class InterpretadorBase {
21186
21328
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21187
21329
  // Auto-promove para BigInt se qualquer operando for BigInt
21188
21330
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21189
- return this.converterParaBigInt(valorEsquerdo) ** this.converterParaBigInt(valorDireito);
21331
+ return (this.converterParaBigInt(valorEsquerdo) **
21332
+ this.converterParaBigInt(valorDireito));
21190
21333
  }
21191
21334
  const resultadoExponenciacao = Math.pow(valorEsquerdo, valorDireito);
21192
21335
  return resultadoExponenciacao;
@@ -21213,7 +21356,8 @@ class InterpretadorBase {
21213
21356
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21214
21357
  // Auto-promove para BigInt se qualquer operando for BigInt
21215
21358
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21216
- return this.converterParaBigInt(valorEsquerdo) - this.converterParaBigInt(valorDireito);
21359
+ return (this.converterParaBigInt(valorEsquerdo) -
21360
+ this.converterParaBigInt(valorDireito));
21217
21361
  }
21218
21362
  return Number(valorEsquerdo) - Number(valorDireito);
21219
21363
  case delegua_1.default.ADICAO:
@@ -21248,8 +21392,10 @@ class InterpretadorBase {
21248
21392
  }
21249
21393
  // TODO: Se tipo for 'qualquer', seria uma boa confiar nos operadores
21250
21394
  // tradicionais do JavaScript?
21251
- if (tipoEsquerdo === 'qualquer' || tipoDireito === 'qualquer' ||
21252
- tipoEsquerdo === 'nulo' || tipoDireito === 'nulo') {
21395
+ if (tipoEsquerdo === 'qualquer' ||
21396
+ tipoDireito === 'qualquer' ||
21397
+ tipoEsquerdo === 'nulo' ||
21398
+ tipoDireito === 'nulo') {
21253
21399
  return valorEsquerdo + valorDireito;
21254
21400
  }
21255
21401
  return this.paraTexto(valorEsquerdo) + this.paraTexto(valorDireito);
@@ -21338,7 +21484,8 @@ class InterpretadorBase {
21338
21484
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21339
21485
  // Auto-promove para BigInt se qualquer operando for BigInt
21340
21486
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21341
- return this.converterParaBigInt(valorEsquerdo) & this.converterParaBigInt(valorDireito);
21487
+ return (this.converterParaBigInt(valorEsquerdo) &
21488
+ this.converterParaBigInt(valorDireito));
21342
21489
  }
21343
21490
  return Number(valorEsquerdo) & Number(valorDireito);
21344
21491
  case delegua_1.default.CIRCUMFLEXO:
@@ -21348,7 +21495,8 @@ class InterpretadorBase {
21348
21495
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21349
21496
  // Auto-promove para BigInt se qualquer operando for BigInt
21350
21497
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21351
- return this.converterParaBigInt(valorEsquerdo) ^ this.converterParaBigInt(valorDireito);
21498
+ return (this.converterParaBigInt(valorEsquerdo) ^
21499
+ this.converterParaBigInt(valorDireito));
21352
21500
  }
21353
21501
  return Number(valorEsquerdo) ^ Number(valorDireito);
21354
21502
  case delegua_1.default.BIT_OR:
@@ -21358,21 +21506,28 @@ class InterpretadorBase {
21358
21506
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21359
21507
  // Auto-promove para BigInt se qualquer operando for BigInt
21360
21508
  if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint') {
21361
- return this.converterParaBigInt(valorEsquerdo) | this.converterParaBigInt(valorDireito);
21509
+ return (this.converterParaBigInt(valorEsquerdo) |
21510
+ this.converterParaBigInt(valorDireito));
21362
21511
  }
21363
21512
  return Number(valorEsquerdo) | Number(valorDireito);
21364
21513
  case delegua_1.default.MENOR_MENOR:
21365
21514
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21366
21515
  // Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
21367
- if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint' || Number(valorDireito) >= 32) {
21368
- 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));
21369
21521
  }
21370
21522
  return Number(valorEsquerdo) << Number(valorDireito);
21371
21523
  case delegua_1.default.MAIOR_MAIOR:
21372
21524
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
21373
21525
  // Auto-promove para BigInt (interno para longo) se qualquer operando for BigInt ou se deslocamento >= 32
21374
- if (typeof valorEsquerdo === 'bigint' || typeof valorDireito === 'bigint' || Number(valorDireito) >= 32) {
21375
- 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));
21376
21531
  }
21377
21532
  return Number(valorEsquerdo) >> Number(valorDireito);
21378
21533
  case delegua_1.default.DIFERENTE:
@@ -23519,7 +23674,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23519
23674
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23520
23675
  if (objeto.constructor === Object) {
23521
23676
  if (expressao.nomeMetodo in primitivas_dicionario_1.default) {
23522
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomeMetodo].implementacao;
23677
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomeMetodo]
23678
+ .implementacao;
23523
23679
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.nomeMetodo, 'dicionário');
23524
23680
  }
23525
23681
  return objeto[expressao.nomeMetodo] || null;
@@ -23558,7 +23714,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23558
23714
  case delegua_1.default.NUMERO:
23559
23715
  case delegua_1.default.NÚMERO:
23560
23716
  if (expressao.nomeMetodo in primitivas_numero_1.default) {
23561
- const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.nomeMetodo].implementacao;
23717
+ const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.nomeMetodo]
23718
+ .implementacao;
23562
23719
  if (metodoDePrimitivaNumero) {
23563
23720
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaNumero, expressao.nomeMetodo, tipoObjeto);
23564
23721
  }
@@ -23571,7 +23728,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23571
23728
  break;
23572
23729
  case delegua_1.default.TEXTO:
23573
23730
  if (expressao.nomeMetodo in primitivas_texto_1.default) {
23574
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.nomeMetodo].implementacao;
23731
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.nomeMetodo]
23732
+ .implementacao;
23575
23733
  if (metodoDePrimitivaTexto) {
23576
23734
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.nomeMetodo, 'texto');
23577
23735
  }
@@ -23591,7 +23749,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23591
23749
  case delegua_1.default.VETOR_QUALQUER:
23592
23750
  case delegua_1.default.VETOR_TEXTO:
23593
23751
  if (expressao.nomeMetodo in primitivas_vetor_1.default) {
23594
- const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.nomeMetodo].implementacao;
23752
+ const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.nomeMetodo]
23753
+ .implementacao;
23595
23754
  if (metodoDePrimitivaVetor) {
23596
23755
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaVetor, expressao.nomeMetodo, tipoObjeto);
23597
23756
  }
@@ -23692,7 +23851,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23692
23851
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23693
23852
  if (objeto.constructor === Object) {
23694
23853
  if (expressao.simbolo.lexema in primitivas_dicionario_1.default) {
23695
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.simbolo.lexema].implementacao;
23854
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.simbolo.lexema]
23855
+ .implementacao;
23696
23856
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.simbolo.lexema, 'dicionário');
23697
23857
  }
23698
23858
  return objeto[expressao.simbolo.lexema];
@@ -23705,7 +23865,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23705
23865
  return funcaoExt.funcaoPorExtensao(objeto);
23706
23866
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo texto.`);
23707
23867
  }
23708
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema].implementacao;
23868
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema]
23869
+ .implementacao;
23709
23870
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.simbolo.lexema, 'texto');
23710
23871
  }
23711
23872
  // A partir daqui, presume-se que o objeto é uma das estruturas
@@ -23730,7 +23891,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23730
23891
  return funcaoExt.funcaoPorExtensao(objeto);
23731
23892
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23732
23893
  }
23733
- const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.simbolo.lexema].implementacao;
23894
+ const metodoDePrimitivaNumero = primitivas_numero_1.default[expressao.simbolo.lexema]
23895
+ .implementacao;
23734
23896
  if (metodoDePrimitivaNumero) {
23735
23897
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaNumero, expressao.simbolo.lexema, 'número');
23736
23898
  }
@@ -23743,7 +23905,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23743
23905
  return funcaoExt.funcaoPorExtensao(objeto);
23744
23906
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23745
23907
  }
23746
- const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema].implementacao;
23908
+ const metodoDePrimitivaTexto = primitivas_texto_1.default[expressao.simbolo.lexema]
23909
+ .implementacao;
23747
23910
  if (metodoDePrimitivaTexto) {
23748
23911
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaTexto, expressao.simbolo.lexema, 'texto');
23749
23912
  }
@@ -23763,7 +23926,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23763
23926
  return funcaoExt.funcaoPorExtensao(objeto);
23764
23927
  throw new excecoes_1.ErroEmTempoDeExecucao(expressao.simbolo, `Método de primitiva '${expressao.simbolo.lexema}' não existe para o tipo ${tipoObjeto}.`);
23765
23928
  }
23766
- const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.simbolo.lexema].implementacao;
23929
+ const metodoDePrimitivaVetor = primitivas_vetor_1.default[expressao.simbolo.lexema]
23930
+ .implementacao;
23767
23931
  if (metodoDePrimitivaVetor) {
23768
23932
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaVetor, expressao.simbolo.lexema, tipoObjeto);
23769
23933
  }
@@ -23811,7 +23975,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
23811
23975
  // Objeto simples do JavaScript, ou dicionário de Delégua.
23812
23976
  if (objeto.constructor === Object) {
23813
23977
  if (expressao.nomePropriedade in primitivas_dicionario_1.default) {
23814
- const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomePropriedade].implementacao;
23978
+ const metodoDePrimitivaDicionario = primitivas_dicionario_1.default[expressao.nomePropriedade]
23979
+ .implementacao;
23815
23980
  return new estruturas_1.MetodoPrimitiva(nomeObjeto, objeto, metodoDePrimitivaDicionario, expressao.nomePropriedade, 'dicionário');
23816
23981
  }
23817
23982
  return objeto[expressao.nomePropriedade] || null;
@@ -24487,9 +24652,9 @@ class PilhaEscoposExecucao {
24487
24652
  }
24488
24653
  espacoMemoriaAncestral.valores[simbolo.lexema] = {
24489
24654
  valor,
24490
- tipo: (variavel.tipo === 'nulo' && !variavel.tipoExplicito)
24655
+ tipo: variavel.tipo === 'nulo' && !variavel.tipoExplicito
24491
24656
  ? (0, inferenciador_1.inferirTipoVariavel)(valor)
24492
- : (variavel.tipo || (0, inferenciador_1.inferirTipoVariavel)(valor)),
24657
+ : variavel.tipo || (0, inferenciador_1.inferirTipoVariavel)(valor),
24493
24658
  imutavel: false,
24494
24659
  tipoExplicito: variavel.tipoExplicito,
24495
24660
  };
@@ -24510,9 +24675,7 @@ class PilhaEscoposExecucao {
24510
24675
  }
24511
24676
  const tipoAtual = variavel && variavel.hasOwnProperty('tipo') ? variavel.tipo : null;
24512
24677
  const deveLiberarTipo = tipoAtual === 'nulo' && !variavel.tipoExplicito;
24513
- const tipoInferido = tipoAtual && !deveLiberarTipo
24514
- ? tipoAtual
24515
- : (0, inferenciador_1.inferirTipoVariavel)(valor);
24678
+ const tipoInferido = tipoAtual && !deveLiberarTipo ? tipoAtual : (0, inferenciador_1.inferirTipoVariavel)(valor);
24516
24679
  const tipo = (tipoInferido || 'objeto').toLowerCase();
24517
24680
  const valorResolvido = this.converterValor(tipo, valor);
24518
24681
  if (indice !== undefined && indice !== null) {
@@ -24784,7 +24947,9 @@ class LexadorCalango {
24784
24947
  const linhaPrimeiroCaracter = this.linha;
24785
24948
  // Restringe leitura à linha atual (como analisarNumero), evitando
24786
24949
  // que avancar() mude this.linha e corrompa o cálculo do substring.
24787
- while (this.simboloAtual() !== "'" && this.linha === linhaPrimeiroCaracter && !this.eFinalDoCodigo()) {
24950
+ while (this.simboloAtual() !== "'" &&
24951
+ this.linha === linhaPrimeiroCaracter &&
24952
+ !this.eFinalDoCodigo()) {
24788
24953
  this.avancar();
24789
24954
  }
24790
24955
  if (this.linha !== linhaPrimeiroCaracter || this.eFinalDoCodigo()) {
@@ -27860,10 +28025,12 @@ class Lexador {
27860
28025
  break;
27861
28026
  }
27862
28027
  }
27863
- valor += hex.length === 2 ? String.fromCharCode(parseInt(hex, 16)) : '\\x' + hex;
28028
+ valor +=
28029
+ hex.length === 2 ? String.fromCharCode(parseInt(hex, 16)) : '\\x' + hex;
27864
28030
  break;
27865
28031
  }
27866
- 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
27867
28034
  default:
27868
28035
  valor += '\\' + proximoCaractere;
27869
28036
  break;
@@ -45975,13 +46142,19 @@ class TradutorElixir {
45975
46142
  }
45976
46143
  mapearTipoParaTypespec(tipo) {
45977
46144
  switch (tipo) {
45978
- case 'texto': return 'String.t()';
46145
+ case 'texto':
46146
+ return 'String.t()';
45979
46147
  case 'numero':
45980
- case 'inteiro': return 'integer()';
45981
- case 'real': return 'float()';
45982
- case 'logico': return 'boolean()';
45983
- case 'vazio': return 'no_return()';
45984
- 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()';
45985
46158
  }
45986
46159
  }
45987
46160
  /**
@@ -46070,11 +46243,15 @@ class TradutorElixir {
46070
46243
  this.moduloAtual = nomeModulo;
46071
46244
  if (declaracao.estrangeira) {
46072
46245
  // Classe estrangeira: emitir @callback para cada método, definindo a interface esperada do módulo.
46073
- resultado += this.adicionarIndentacao() + `@moduledoc "Classe estrangeira — implementação externa."\n`;
46246
+ resultado +=
46247
+ this.adicionarIndentacao() +
46248
+ `@moduledoc "Classe estrangeira — implementação externa."\n`;
46074
46249
  for (const metodo of declaracao.metodos) {
46075
46250
  const params = metodo.funcao.parametros.map(() => 'term()').join(', ');
46076
46251
  const retorno = this.mapearTipoParaTypespec(metodo.funcao.tipo);
46077
- resultado += this.adicionarIndentacao() + `@callback ${metodo.simbolo.lexema}(${params}) :: ${retorno}\n`;
46252
+ resultado +=
46253
+ this.adicionarIndentacao() +
46254
+ `@callback ${metodo.simbolo.lexema}(${params}) :: ${retorno}\n`;
46078
46255
  }
46079
46256
  }
46080
46257
  else {
@@ -48551,22 +48728,38 @@ class TradutorPortugolIpt {
48551
48728
  // ── Operadores ───────────────────────────────────────────────────────────────
48552
48729
  traduzirOperador(tipo) {
48553
48730
  switch (tipo) {
48554
- case portugol_ipt_1.default.ADICAO: return '+';
48555
- case portugol_ipt_1.default.SUBTRACAO: return '-';
48556
- case portugol_ipt_1.default.MULTIPLICACAO: return '*';
48557
- case portugol_ipt_1.default.DIVISAO: return '/';
48558
- case portugol_ipt_1.default.MODULO: return '%';
48559
- case portugol_ipt_1.default.EXPONENCIACAO: return '**';
48560
- case portugol_ipt_1.default.IGUAL: return '==';
48561
- case portugol_ipt_1.default.DIFERENTE: return '!=';
48562
- case portugol_ipt_1.default.MAIOR: return '>';
48563
- case portugol_ipt_1.default.MAIOR_IGUAL: return '>=';
48564
- case portugol_ipt_1.default.MENOR: return '<';
48565
- case portugol_ipt_1.default.MENOR_IGUAL: return '<=';
48566
- case portugol_ipt_1.default.E: return '&&';
48567
- case portugol_ipt_1.default.OU: return '||';
48568
- case portugol_ipt_1.default.XOU: return '^^';
48569
- 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;
48570
48763
  }
48571
48764
  }
48572
48765
  // ── Construtos ───────────────────────────────────────────────────────────────
@@ -48608,10 +48801,13 @@ class TradutorPortugolIpt {
48608
48801
  traduzirConstrutoUnario(unario) {
48609
48802
  const operando = this.traduzirConstruto(unario.operando);
48610
48803
  switch (unario.operador.tipo) {
48611
- case portugol_ipt_1.default.SUBTRACAO: return `-${operando}`;
48804
+ case portugol_ipt_1.default.SUBTRACAO:
48805
+ return `-${operando}`;
48612
48806
  case portugol_ipt_1.default.NEGACAO:
48613
- case portugol_ipt_1.default.NAO: return `!(${operando})`;
48614
- default: return `!(${operando})`;
48807
+ case portugol_ipt_1.default.NAO:
48808
+ return `!(${operando})`;
48809
+ default:
48810
+ return `!(${operando})`;
48615
48811
  }
48616
48812
  }
48617
48813
  traduzirConstrutoAtribuir(atribuir) {
@@ -48656,24 +48852,36 @@ class TradutorPortugolIpt {
48656
48852
  }
48657
48853
  tipoParaDelégua(tipo) {
48658
48854
  switch (tipo) {
48659
- case 'inteiro': return 'inteiro';
48660
- case 'texto': return 'texto';
48661
- case 'real': return 'real';
48855
+ case 'inteiro':
48856
+ return 'inteiro';
48857
+ case 'texto':
48858
+ return 'texto';
48859
+ case 'real':
48860
+ return 'real';
48662
48861
  case 'lógico':
48663
- case 'logico': return 'logico';
48664
- case 'caracter': return 'caracter';
48665
- default: return tipo;
48862
+ case 'logico':
48863
+ return 'logico';
48864
+ case 'caracter':
48865
+ return 'caracter';
48866
+ default:
48867
+ return tipo;
48666
48868
  }
48667
48869
  }
48668
48870
  valorPadraoPorTipo(tipo) {
48669
48871
  switch (tipo) {
48670
- case 'inteiro': return '0';
48671
- case 'texto': return "''";
48672
- case 'real': return '0.0';
48872
+ case 'inteiro':
48873
+ return '0';
48874
+ case 'texto':
48875
+ return "''";
48876
+ case 'real':
48877
+ return '0.0';
48673
48878
  case 'lógico':
48674
- case 'logico': return 'falso';
48675
- case 'caracter': return "' '";
48676
- default: return 'nulo';
48879
+ case 'logico':
48880
+ return 'falso';
48881
+ case 'caracter':
48882
+ return "' '";
48883
+ default:
48884
+ return 'nulo';
48677
48885
  }
48678
48886
  }
48679
48887
  traduzirDeclaracaoVar(declaracaoVar) {
@@ -48766,9 +48974,7 @@ class TradutorPortugolIpt {
48766
48974
  init = this.traduzirDeclaracao(ini);
48767
48975
  }
48768
48976
  }
48769
- const cond = declaracaoPara.condicao
48770
- ? this.traduzirConstruto(declaracaoPara.condicao)
48771
- : '';
48977
+ const cond = declaracaoPara.condicao ? this.traduzirConstruto(declaracaoPara.condicao) : '';
48772
48978
  const incr = declaracaoPara.incrementar
48773
48979
  ? this.traduzirConstruto(declaracaoPara.incrementar)
48774
48980
  : '';
@@ -48788,7 +48994,8 @@ class TradutorPortugolIpt {
48788
48994
  this.indentacao += 4;
48789
48995
  if (caminho.condicoes && caminho.condicoes.length > 0) {
48790
48996
  for (const cond of caminho.condicoes) {
48791
- resultado += ' '.repeat(this.indentacao) + `caso ${this.traduzirConstruto(cond)}:\n`;
48997
+ resultado +=
48998
+ ' '.repeat(this.indentacao) + `caso ${this.traduzirConstruto(cond)}:\n`;
48792
48999
  }
48793
49000
  }
48794
49001
  else {
@@ -49802,7 +50009,9 @@ class TradutorReversoCalango {
49802
50009
  .map((parametro) => this.traduzirParametro(parametro))
49803
50010
  .filter((p) => p)
49804
50011
  .join(', ');
49805
- const tipoRetorno = declaracaoFuncao.tipo && declaracaoFuncao.tipo !== 'qualquer' && declaracaoFuncao.tipo !== 'vazio'
50012
+ const tipoRetorno = declaracaoFuncao.tipo &&
50013
+ declaracaoFuncao.tipo !== 'qualquer' &&
50014
+ declaracaoFuncao.tipo !== 'vazio'
49806
50015
  ? `: ${declaracaoFuncao.tipo}`
49807
50016
  : '';
49808
50017
  let resultado = `funcao ${declaracaoFuncao.simbolo.lexema}(${parametros})${tipoRetorno} `;
@@ -50330,10 +50539,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50330
50539
  return node.text;
50331
50540
  }
50332
50541
  visitFile_input(ctx) {
50333
- return ctx.stmt().map((s) => this.visit(s)).join('\n');
50542
+ return ctx
50543
+ .stmt()
50544
+ .map((s) => this.visit(s))
50545
+ .join('\n');
50334
50546
  }
50335
50547
  visitSimple_stmt(ctx) {
50336
- return ctx.small_stmt().map((s) => this.visit(s)).join('; ');
50548
+ return ctx
50549
+ .small_stmt()
50550
+ .map((s) => this.visit(s))
50551
+ .join('; ');
50337
50552
  }
50338
50553
  visitExpr_stmt(ctx) {
50339
50554
  const lhs = this.visit(ctx.testlist_star_expr());
@@ -50348,11 +50563,7 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50348
50563
  const op = this.visitAugassign(ctx.augassign());
50349
50564
  const testlist = ctx.testlist();
50350
50565
  const yieldExpr = ctx.yield_expr();
50351
- const rhs = testlist
50352
- ? this.visit(testlist)
50353
- : yieldExpr
50354
- ? this.visit(yieldExpr)
50355
- : '';
50566
+ const rhs = testlist ? this.visit(testlist) : yieldExpr ? this.visit(yieldExpr) : '';
50356
50567
  return `${lhs} ${op} ${rhs}`;
50357
50568
  }
50358
50569
  return lhs;
@@ -50389,10 +50600,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50389
50600
  return ctx.text;
50390
50601
  }
50391
50602
  visitTestlist_star_expr(ctx) {
50392
- return ctx.test().map((t) => this.visit(t)).join(', ');
50603
+ return ctx
50604
+ .test()
50605
+ .map((t) => this.visit(t))
50606
+ .join(', ');
50393
50607
  }
50394
50608
  visitTestlist(ctx) {
50395
- return ctx.test().map((t) => this.visit(t)).join(', ');
50609
+ return ctx
50610
+ .test()
50611
+ .map((t) => this.visit(t))
50612
+ .join(', ');
50396
50613
  }
50397
50614
  visitTest(ctx) {
50398
50615
  const orTests = ctx.or_test();
@@ -50405,10 +50622,16 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50405
50622
  return this.visitChildren(ctx);
50406
50623
  }
50407
50624
  visitOr_test(ctx) {
50408
- 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 ');
50409
50629
  }
50410
50630
  visitAnd_test(ctx) {
50411
- 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 ');
50412
50635
  }
50413
50636
  visitNot_test(ctx) {
50414
50637
  if (ctx.NOT()) {
@@ -50594,7 +50817,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50594
50817
  return ctx.text;
50595
50818
  }
50596
50819
  visitArglist(ctx) {
50597
- return ctx.argument().map((a) => this.visit(a)).join(', ');
50820
+ return ctx
50821
+ .argument()
50822
+ .map((a) => this.visit(a))
50823
+ .join(', ');
50598
50824
  }
50599
50825
  visitArgument(ctx) {
50600
50826
  const testes = ctx.test();
@@ -50612,7 +50838,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50612
50838
  if (compFor) {
50613
50839
  return this.traduzirCompreensao(ctx.test(0), compFor);
50614
50840
  }
50615
- return ctx.test().map((t) => this.visit(t)).join(', ');
50841
+ return ctx
50842
+ .test()
50843
+ .map((t) => this.visit(t))
50844
+ .join(', ');
50616
50845
  }
50617
50846
  traduzirCompreensao(exprCtx, compFor) {
50618
50847
  const variavel = this.visit(compFor.exprlist());
@@ -50669,7 +50898,10 @@ class TradutorReversoPython extends AbstractParseTreeVisitor_1.AbstractParseTree
50669
50898
  return tests.map((t) => this.visit(t)).join(', ');
50670
50899
  }
50671
50900
  visitSubscriptlist(ctx) {
50672
- return ctx.subscript().map((s) => this.visitSubscript(s)).join(', ');
50901
+ return ctx
50902
+ .subscript()
50903
+ .map((s) => this.visitSubscript(s))
50904
+ .join(', ');
50673
50905
  }
50674
50906
  visitSubscript(ctx) {
50675
50907
  const tests = ctx.test();