@designliquido/delegua 0.42.3 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico-base.js.map +1 -1
  3. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  4. package/analisador-semantico/analisador-semantico.js +7 -1
  5. package/analisador-semantico/analisador-semantico.js.map +1 -1
  6. package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
  7. package/analisador-semantico/pilha-variaveis.js.map +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  10. package/avaliador-sintatico/avaliador-sintatico.d.ts +0 -1
  11. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  12. package/avaliador-sintatico/avaliador-sintatico.js +48 -39
  13. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +6 -3
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +16 -3
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +255 -56
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  25. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts.map +1 -1
  26. package/avaliador-sintatico/micro-avaliador-sintatico-base.js.map +1 -1
  27. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  28. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  29. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  30. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  31. package/bibliotecas/biblioteca-global.d.ts +6 -5
  32. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  33. package/bibliotecas/biblioteca-global.js +56 -22
  34. package/bibliotecas/biblioteca-global.js.map +1 -1
  35. package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts.map +1 -1
  36. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +5 -3
  37. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
  38. package/bibliotecas/dialetos/egua-classico/index.d.ts.map +1 -1
  39. package/bibliotecas/dialetos/egua-classico/index.js.map +1 -1
  40. package/bibliotecas/dialetos/egua-classico/matematica.js +26 -8
  41. package/bibliotecas/dialetos/egua-classico/matematica.js.map +1 -1
  42. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  43. package/bibliotecas/primitivas-texto.js +5 -7
  44. package/bibliotecas/primitivas-texto.js.map +1 -1
  45. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  46. package/bibliotecas/primitivas-vetor.js +15 -30
  47. package/bibliotecas/primitivas-vetor.js.map +1 -1
  48. package/bin/package.json +1 -1
  49. package/construtos/acesso-metodo.d.ts.map +1 -1
  50. package/construtos/acesso-metodo.js.map +1 -1
  51. package/construtos/atribuicao-por-indice.d.ts.map +1 -1
  52. package/construtos/atribuicao-por-indice.js.map +1 -1
  53. package/construtos/binario.d.ts.map +1 -1
  54. package/construtos/binario.js +4 -2
  55. package/construtos/binario.js.map +1 -1
  56. package/construtos/decorador.d.ts.map +1 -1
  57. package/construtos/decorador.js.map +1 -1
  58. package/construtos/fim-para.d.ts.map +1 -1
  59. package/construtos/fim-para.js.map +1 -1
  60. package/construtos/formatacao-escrita.d.ts.map +1 -1
  61. package/construtos/formatacao-escrita.js.map +1 -1
  62. package/construtos/literal.d.ts.map +1 -1
  63. package/construtos/literal.js.map +1 -1
  64. package/construtos/referencia-funcao.d.ts.map +1 -1
  65. package/construtos/referencia-funcao.js.map +1 -1
  66. package/construtos/super.d.ts.map +1 -1
  67. package/construtos/super.js.map +1 -1
  68. package/construtos/tuplas/index.d.ts.map +1 -1
  69. package/construtos/tuplas/index.js.map +1 -1
  70. package/construtos/tuplas/septeto.d.ts.map +1 -1
  71. package/construtos/tuplas/septeto.js.map +1 -1
  72. package/construtos/variavel.d.ts.map +1 -1
  73. package/construtos/variavel.js.map +1 -1
  74. package/construtos/vetor.d.ts.map +1 -1
  75. package/construtos/vetor.js.map +1 -1
  76. package/declaracoes/aleatorio.d.ts.map +1 -1
  77. package/declaracoes/aleatorio.js.map +1 -1
  78. package/declaracoes/comentario.d.ts.map +1 -1
  79. package/declaracoes/comentario.js.map +1 -1
  80. package/declaracoes/const-multiplo.d.ts.map +1 -1
  81. package/declaracoes/const-multiplo.js.map +1 -1
  82. package/declaracoes/escolha.d.ts.map +1 -1
  83. package/declaracoes/escolha.js.map +1 -1
  84. package/declaracoes/para-cada.d.ts.map +1 -1
  85. package/declaracoes/para-cada.js.map +1 -1
  86. package/declaracoes/var-multiplo.d.ts.map +1 -1
  87. package/declaracoes/var-multiplo.js.map +1 -1
  88. package/formatadores/formatador-delegua.d.ts.map +1 -1
  89. package/formatadores/formatador-delegua.js.map +1 -1
  90. package/formatadores/formatador-pitugues.d.ts.map +1 -1
  91. package/formatadores/formatador-pitugues.js.map +1 -1
  92. package/geracao-identificadores/index.d.ts.map +1 -1
  93. package/geracao-identificadores/index.js.map +1 -1
  94. package/inferenciador.d.ts.map +1 -1
  95. package/inferenciador.js.map +1 -1
  96. package/informacao-variavel-ou-constante.js +1 -1
  97. package/informacao-variavel-ou-constante.js.map +1 -1
  98. package/interfaces/avaliador-sintatico-interface.d.ts.map +1 -1
  99. package/interfaces/primitiva-interface.d.ts +1 -1
  100. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  101. package/interpretador/comum.d.ts.map +1 -1
  102. package/interpretador/comum.js.map +1 -1
  103. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  104. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +24 -8
  105. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  106. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  107. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +4 -2
  108. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  109. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  110. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +26 -9
  111. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  112. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  113. package/interpretador/estruturas/delegua-funcao.js +12 -4
  114. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  115. package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
  116. package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
  117. package/interpretador/estruturas/funcao-padrao.d.ts.map +1 -1
  118. package/interpretador/estruturas/funcao-padrao.js.map +1 -1
  119. package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
  120. package/interpretador/estruturas/objeto-delegua-classe.js +2 -1
  121. package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
  122. package/interpretador/interpretador-base.d.ts.map +1 -1
  123. package/interpretador/interpretador-base.js +88 -36
  124. package/interpretador/interpretador-base.js.map +1 -1
  125. package/interpretador/interpretador-com-depuracao.d.ts.map +1 -1
  126. package/interpretador/interpretador-com-depuracao.js +14 -6
  127. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  128. package/interpretador/interpretador.d.ts.map +1 -1
  129. package/interpretador/interpretador.js +13 -5
  130. package/interpretador/interpretador.js.map +1 -1
  131. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  132. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  133. package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
  134. package/lexador/dialetos/lexador-egua-classico.js +3 -1
  135. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  136. package/lexador/dialetos/lexador-guarani.d.ts.map +1 -1
  137. package/lexador/dialetos/lexador-guarani.js +6 -2
  138. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  139. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  140. package/lexador/dialetos/lexador-pitugues.js +4 -2
  141. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  142. package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
  143. package/lexador/dialetos/lexador-portugol-ipt.js +4 -2
  144. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  145. package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
  146. package/lexador/lexador-base-linha-unica.js.map +1 -1
  147. package/lexador/lexador-base.d.ts.map +1 -1
  148. package/lexador/lexador-base.js.map +1 -1
  149. package/lexador/lexador.d.ts.map +1 -1
  150. package/lexador/lexador.js +3 -1
  151. package/lexador/lexador.js.map +1 -1
  152. package/lexador/micro-lexador.d.ts.map +1 -1
  153. package/lexador/micro-lexador.js +3 -1
  154. package/lexador/micro-lexador.js.map +1 -1
  155. package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
  156. package/lexador/traducao/lexador-javascript.js.map +1 -1
  157. package/package.json +1 -1
  158. package/tradutores/python/python3-lexer.d.ts.map +1 -1
  159. package/tradutores/python/python3-lexer.js +2 -1
  160. package/tradutores/python/python3-lexer.js.map +1 -1
  161. package/tradutores/python/python3-parser.d.ts.map +1 -1
  162. package/tradutores/python/python3-parser.js +17 -8
  163. package/tradutores/python/python3-parser.js.map +1 -1
  164. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  165. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  166. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  167. package/tradutores/tradutor-assemblyscript.js +22 -8
  168. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  169. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  170. package/tradutores/tradutor-javascript.js +24 -8
  171. package/tradutores/tradutor-javascript.js.map +1 -1
  172. package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
  173. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  174. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  175. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  176. package/tradutores/tradutor-python.d.ts.map +1 -1
  177. package/tradutores/tradutor-python.js +7 -5
  178. package/tradutores/tradutor-python.js.map +1 -1
  179. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  180. package/tradutores/tradutor-reverso-javascript.js +2 -1
  181. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  182. package/umd/delegua.js +617 -253
package/umd/delegua.js CHANGED
@@ -306,7 +306,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
306
306
  throw this.erro(this.simbolos[this.atual], `Tipo de dados desconhecido: '${this.simbolos[this.atual].lexema}'.`);
307
307
  }
308
308
  if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
309
- const tiposVetores = ['inteiro[]', 'numero[]', 'número[]', 'qualquer[]', 'real[]', 'texto[]'];
309
+ const tiposVetores = [
310
+ 'inteiro[]',
311
+ 'numero[]',
312
+ 'número[]',
313
+ 'qualquer[]',
314
+ 'real[]',
315
+ 'texto[]',
316
+ ];
310
317
  this.avancarEDevolverAnterior();
311
318
  if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
312
319
  throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
@@ -404,8 +411,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
404
411
  case delegua_2.default.EXPRESSAO_REGULAR:
405
412
  let valor = '';
406
413
  let linhaAtual = this.simbolos[this.atual].linha;
407
- let eParExpressaoRegular = this.simbolos.filter((l) => l.linha === linhaAtual && l.tipo === delegua_2.default.EXPRESSAO_REGULAR)
408
- .length %
414
+ let eParExpressaoRegular = this.simbolos.filter((l) => l.linha === linhaAtual && l.tipo === delegua_2.default.EXPRESSAO_REGULAR).length %
409
415
  2 ===
410
416
  0;
411
417
  if (eParExpressaoRegular) {
@@ -658,16 +664,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
658
664
  if (informacoesPossivelFuncaoBibliotecaGlobal !== undefined) {
659
665
  const erros = this.validarArgumentosEntidadeChamada(informacoesPossivelFuncaoBibliotecaGlobal.argumentos, argumentos);
660
666
  if (erros.length > 0) {
661
- throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => mensagem += `${erro}\n`, '')}`);
667
+ throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => (mensagem += `${erro}\n`), '')}`);
662
668
  }
663
669
  return entidadeChamadaResolvidaVariavel;
664
670
  }
665
671
  }
666
- if (tipoPrimitiva !== undefined && this.primitivasConhecidas.hasOwnProperty(entidadeChamadaResolvidaVariavel.simbolo.lexema)) {
672
+ if (tipoPrimitiva !== undefined &&
673
+ this.primitivasConhecidas.hasOwnProperty(entidadeChamadaResolvidaVariavel.simbolo.lexema)) {
667
674
  var informacoesPrimitiva = this.primitivasConhecidas[entidadeChamadaResolvidaVariavel.simbolo.lexema];
668
675
  const erros = this.validarArgumentosEntidadeChamada(informacoesPrimitiva.argumentos, argumentos);
669
676
  if (erros.length > 0) {
670
- throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => mensagem += `${erro}\n`, '')}`);
677
+ throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => (mensagem += `${erro}\n`), '')}`);
671
678
  }
672
679
  return entidadeChamadaResolvidaVariavel;
673
680
  }
@@ -865,7 +872,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
865
872
  blocoEscopo() {
866
873
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
867
874
  let declaracoes = [];
868
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
875
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
876
+ !this.estaNoFinal()) {
869
877
  const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
870
878
  if (Array.isArray(retornoDeclaracao)) {
871
879
  declaracoes = declaracoes.concat(retornoDeclaracao);
@@ -919,7 +927,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
919
927
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
920
928
  const caminhos = [];
921
929
  let caminhoPadrao = null;
922
- while (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
930
+ while (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.CHAVE_DIREITA) &&
931
+ !this.estaNoFinal()) {
923
932
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CASO)) {
924
933
  const caminhoCondicoes = [this.expressao()];
925
934
  this.consumir(delegua_2.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
@@ -1314,7 +1323,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1314
1323
  }
1315
1324
  switch (inicializador.constructor.name) {
1316
1325
  case 'AcessoIndiceVariavel':
1317
- const entidadeChamadaAcessoIndiceVariavel = inicializador.entidadeChamada;
1326
+ const entidadeChamadaAcessoIndiceVariavel = inicializador
1327
+ .entidadeChamada;
1318
1328
  // Este condicional ocorre com chamadas aninhadas. Por exemplo, `vetor[1][2]`.
1319
1329
  if (entidadeChamadaAcessoIndiceVariavel.constructor.name === 'AcessoIndiceVariavel') {
1320
1330
  return this.logicaComumInferenciaTiposVariaveisEConstantes(entidadeChamadaAcessoIndiceVariavel, tipo);
@@ -1331,8 +1341,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1331
1341
  const entidadeChamadaAcessoMetodo = entidadeChamadaChamada;
1332
1342
  return entidadeChamadaAcessoMetodo.tipoRetornoMetodo;
1333
1343
  case 'AcessoMetodoOuPropriedade':
1334
- // Este caso ocorre quando a variável/constante é do tipo 'qualquer',
1335
- // e a chamada normalmente é feita para uma primitiva.
1344
+ // Este caso ocorre quando a variável/constante é do tipo 'qualquer',
1345
+ // e a chamada normalmente é feita para uma primitiva.
1336
1346
  // A inferência, portanto, ocorre pelo uso da primitiva.
1337
1347
  const entidadeChamadaAcessoMetodoOuPropriedade = entidadeChamadaChamada;
1338
1348
  if (this.primitivasConhecidas.hasOwnProperty(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema)) {
@@ -1368,9 +1378,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1368
1378
  case 'Noneto':
1369
1379
  case 'Deceto':
1370
1380
  return delegua_1.default.TUPLA;
1371
- case "ImportarBiblioteca":
1372
- case "ModuloDeclaracoes":
1373
- return "módulo";
1381
+ case 'ImportarBiblioteca':
1382
+ case 'ModuloDeclaracoes':
1383
+ return 'módulo';
1374
1384
  default:
1375
1385
  return inicializador.tipo;
1376
1386
  }
@@ -1411,7 +1421,6 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1411
1421
  throw this.erro(this.simbolos[this.atual], 'Quantidade de identificadores à esquerda do igual é diferente da quantidade de valores à direita.');
1412
1422
  }
1413
1423
  for (let [indice, identificador] of identificadores.entries()) {
1414
- // Se tipo ainda não foi definido, infere.
1415
1424
  tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
1416
1425
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(identificador.lexema, tipo));
1417
1426
  retorno.push(new declaracoes_1.Var(identificador, inicializadores[indice], tipo, Array.from(this.pilhaDecoradores)));
@@ -1629,7 +1638,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1629
1638
  this.pilhaDecoradores = [];
1630
1639
  const metodos = [];
1631
1640
  const propriedades = [];
1632
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
1641
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
1642
+ !this.estaNoFinal()) {
1633
1643
  // Se o símbolo atual é arroba, é um decorador.
1634
1644
  // Caso contrário, verificamos o próximo símbolo.
1635
1645
  if (this.simbolos[this.atual].tipo === delegua_2.default.ARROBA) {
@@ -1721,92 +1731,91 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1721
1731
  }
1722
1732
  /**
1723
1733
  * Inicializa o primeiro nível da pilha de escopos, normalmente com ítens da biblioteca global.
1724
- * TODO: Esta abordagem deve ser depreciada, em favor do novo suporte a referências de funções.
1725
1734
  */
1726
1735
  inicializarPilhaEscopos() {
1727
1736
  this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
1728
1737
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
1729
1738
  // Funções nativas de Delégua
1730
1739
  this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorio', 'inteiro', [
1731
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número')
1740
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número'),
1732
1741
  ]));
1733
1742
  this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorioEntre', 'inteiro', [
1734
1743
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('minimo', 'número'),
1735
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('maximo', 'número')
1744
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('maximo', 'número'),
1736
1745
  ]));
1737
1746
  this.pilhaEscopos.definirInformacoesVariavel('algum', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('algum', 'lógico', [
1738
1747
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1739
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função')
1748
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
1740
1749
  ]));
1741
1750
  this.pilhaEscopos.definirInformacoesVariavel('encontrar', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrar', 'qualquer', [
1742
1751
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1743
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função')
1752
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
1744
1753
  ]));
1745
1754
  this.pilhaEscopos.definirInformacoesVariavel('encontrarIndice', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarIndice', 'inteiro', [
1746
1755
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1747
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função')
1756
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
1748
1757
  ]));
1749
1758
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarUltimo', 'inteiro', [
1750
1759
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1751
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função')
1760
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
1752
1761
  ]));
1753
1762
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarUltimoIndice', 'inteiro', [
1754
1763
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1755
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função')
1764
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
1756
1765
  ]));
1757
1766
  this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('filtrarPor', 'qualquer[]', [
1758
1767
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1759
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função')
1768
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
1760
1769
  ]));
1761
1770
  this.pilhaEscopos.definirInformacoesVariavel('incluido', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('incluido', 'lógico', [
1762
1771
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1763
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer')
1772
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer'),
1764
1773
  ]));
1765
1774
  this.pilhaEscopos.definirInformacoesVariavel('inteiro', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inteiro', 'inteiro', [
1766
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer')
1775
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer'),
1767
1776
  ]));
1768
1777
  this.pilhaEscopos.definirInformacoesVariavel('mapear', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('mapear', 'qualquer[]', [
1769
1778
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1770
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoMapeamento', 'função')
1779
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoMapeamento', 'função'),
1771
1780
  ]));
1772
1781
  this.pilhaEscopos.definirInformacoesVariavel('numero', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número', [
1773
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer')
1782
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
1774
1783
  ]));
1775
1784
  this.pilhaEscopos.definirInformacoesVariavel('número', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número', [
1776
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer')
1785
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
1777
1786
  ]));
1778
1787
  this.pilhaEscopos.definirInformacoesVariavel('ordenar', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('ordenar', 'qualquer[]', [
1779
1788
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1780
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoOrdenacao', 'função')
1789
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoOrdenacao', 'função'),
1781
1790
  ]));
1782
1791
  this.pilhaEscopos.definirInformacoesVariavel('paraCada', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('paraCada', 'qualquer[]', [
1783
1792
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1784
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função')
1793
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
1785
1794
  ]));
1786
1795
  this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondicao', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('primeiroEmCondicao', 'qualquer', [
1787
1796
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1788
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função')
1797
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
1789
1798
  ]));
1790
1799
  this.pilhaEscopos.definirInformacoesVariavel('real', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('real', 'número', [
1791
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer')
1800
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
1792
1801
  ]));
1793
1802
  this.pilhaEscopos.definirInformacoesVariavel('reduzir', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('reduzir', 'qualquer', [
1794
1803
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1795
1804
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoReducao', 'função'),
1796
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorInicial', 'qualquer')
1805
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorInicial', 'qualquer'),
1797
1806
  ]));
1798
1807
  this.pilhaEscopos.definirInformacoesVariavel('tamanho', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('tamanho', 'inteiro', [
1799
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('objeto', 'qualquer')
1808
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('objeto', 'qualquer'),
1800
1809
  ]));
1801
1810
  this.pilhaEscopos.definirInformacoesVariavel('texto', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('texto', 'texto', [
1802
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer')
1811
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
1803
1812
  ]));
1804
1813
  this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('todosEmCondicao', 'lógico', [
1805
1814
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1806
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoCondicional', 'função')
1815
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoCondicional', 'função'),
1807
1816
  ]));
1808
1817
  this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('tupla', 'tupla', [
1809
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]')
1818
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
1810
1819
  ]));
1811
1820
  // TODO: Escrever algum tipo de validação aqui.
1812
1821
  for (const tipos of Object.values(this.tiposDeFerramentasExternas)) {
@@ -2191,7 +2200,8 @@ class AvaliadorSintaticoEguaClassico {
2191
2200
  }
2192
2201
  blocoEscopo() {
2193
2202
  const declaracoes = [];
2194
- while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2203
+ while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) &&
2204
+ !this.estaNoFinal()) {
2195
2205
  declaracoes.push(this.resolverDeclaracaoForaDeBloco());
2196
2206
  }
2197
2207
  this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
@@ -2296,7 +2306,8 @@ class AvaliadorSintaticoEguaClassico {
2296
2306
  this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
2297
2307
  const caminhos = [];
2298
2308
  let caminhoPadrao = null;
2299
- while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2309
+ while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA) &&
2310
+ !this.estaNoFinal()) {
2300
2311
  if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CASO)) {
2301
2312
  const caminhoCondicoes = [this.expressao()];
2302
2313
  this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
@@ -2458,7 +2469,8 @@ class AvaliadorSintaticoEguaClassico {
2458
2469
  }
2459
2470
  this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
2460
2471
  const metodos = [];
2461
- while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2472
+ while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) &&
2473
+ !this.estaNoFinal()) {
2462
2474
  metodos.push(this.funcao('método'));
2463
2475
  }
2464
2476
  this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
@@ -2514,6 +2526,9 @@ const declaracoes_1 = require("../../declaracoes");
2514
2526
  const erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
2515
2527
  const lexador_1 = require("../../lexador");
2516
2528
  const inferenciador_1 = require("../../inferenciador");
2529
+ const pilha_escopos_1 = require("../pilha-escopos");
2530
+ const informacao_escopo_1 = require("../informacao-escopo");
2531
+ const informacao_variavel_ou_constante_1 = require("../../informacao-variavel-ou-constante");
2517
2532
  const pitugues_1 = __importDefault(require("../../tipos-de-simbolos/pitugues"));
2518
2533
  /**
2519
2534
  * O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
@@ -2529,6 +2544,77 @@ class AvaliadorSintaticoPitugues {
2529
2544
  this.blocos = 0;
2530
2545
  this.performance = performance;
2531
2546
  this.escopos = [];
2547
+ this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
2548
+ this.primitivasConhecidas = {};
2549
+ this.tiposDefinidosEmCodigo = {};
2550
+ }
2551
+ logicaComumInferenciaTiposVariaveisEConstantes(inicializador, tipo) {
2552
+ if (tipo !== 'qualquer') {
2553
+ return tipo;
2554
+ }
2555
+ switch (inicializador.constructor.name) {
2556
+ case 'AcessoIndiceVariavel':
2557
+ const entidadeChamadaAcessoIndiceVariavel = inicializador
2558
+ .entidadeChamada;
2559
+ // Este condicional ocorre com chamadas aninhadas. Por exemplo, `vetor[1][2]`.
2560
+ if (entidadeChamadaAcessoIndiceVariavel.constructor.name === 'AcessoIndiceVariavel') {
2561
+ return this.logicaComumInferenciaTiposVariaveisEConstantes(entidadeChamadaAcessoIndiceVariavel, tipo);
2562
+ }
2563
+ if (entidadeChamadaAcessoIndiceVariavel.tipo.endsWith('[]')) {
2564
+ return entidadeChamadaAcessoIndiceVariavel.tipo.slice(0, -2);
2565
+ }
2566
+ // Normalmente, `entidadeChamadaAcessoIndiceVariavel.tipo` aqui será 'vetor'.
2567
+ return 'qualquer';
2568
+ case 'Chamada':
2569
+ const entidadeChamadaChamada = inicializador.entidadeChamada;
2570
+ switch (entidadeChamadaChamada.constructor.name) {
2571
+ case 'AcessoMetodo':
2572
+ const entidadeChamadaAcessoMetodo = entidadeChamadaChamada;
2573
+ return entidadeChamadaAcessoMetodo.tipoRetornoMetodo;
2574
+ case 'AcessoMetodoOuPropriedade':
2575
+ // Este caso ocorre quando a variável/constante é do tipo 'qualquer',
2576
+ // e a chamada normalmente é feita para uma primitiva.
2577
+ // A inferência, portanto, ocorre pelo uso da primitiva.
2578
+ const entidadeChamadaAcessoMetodoOuPropriedade = entidadeChamadaChamada;
2579
+ if (this.primitivasConhecidas.hasOwnProperty(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema)) {
2580
+ return this.primitivasConhecidas[entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema].tipo;
2581
+ }
2582
+ throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaAcessoMetodoOuPropriedade.simbolo, `Primitiva '${entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema}' não existe.`);
2583
+ case 'AcessoPropriedade':
2584
+ const entidadeChamadaAcessoPropriedade = entidadeChamadaChamada;
2585
+ return entidadeChamadaAcessoPropriedade.tipoRetornoPropriedade;
2586
+ case 'ArgumentoReferenciaFuncao':
2587
+ // TODO: Voltar aqui se necessário.
2588
+ return 'qualquer';
2589
+ case 'ReferenciaFuncao':
2590
+ const entidadeChamadaReferenciaFuncao = entidadeChamadaChamada;
2591
+ return entidadeChamadaReferenciaFuncao.tipo;
2592
+ case 'Variavel':
2593
+ const entidadeChamadaVariavel = entidadeChamadaChamada;
2594
+ return entidadeChamadaVariavel.tipo;
2595
+ }
2596
+ break;
2597
+ case 'FuncaoConstruto':
2598
+ const funcaoConstruto = inicializador;
2599
+ return `função<${funcaoConstruto.tipo}>`;
2600
+ case 'Leia':
2601
+ return 'texto';
2602
+ case 'Dupla':
2603
+ case 'Trio':
2604
+ case 'Quarteto':
2605
+ case 'Quinteto':
2606
+ case 'Sexteto':
2607
+ case 'Septeto':
2608
+ case 'Octeto':
2609
+ case 'Noneto':
2610
+ case 'Deceto':
2611
+ return 'tupla';
2612
+ case 'ImportarBiblioteca':
2613
+ case 'ModuloDeclaracoes':
2614
+ return 'módulo';
2615
+ default:
2616
+ return inicializador.tipo;
2617
+ }
2532
2618
  }
2533
2619
  expressaoLeia() {
2534
2620
  const simboloLeia = this.simbolos[this.atual];
@@ -2574,8 +2660,8 @@ class AvaliadorSintaticoPitugues {
2574
2660
  let retorno = [];
2575
2661
  for (let [indice, identificador] of identificadores.entries()) {
2576
2662
  // Se tipo ainda não foi definido, infere.
2577
- // tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
2578
- // this.pilhaEscopos.definirTipoVariavel(identificador.lexema, tipo);
2663
+ tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
2664
+ this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(identificador.lexema, tipo));
2579
2665
  retorno.push(new declaracoes_1.Const(identificador, inicializadores[indice], tipo
2580
2666
  // TODO: Discutir decoradores com comunidade.
2581
2667
  // Array.from(this.pilhaDecoradores)
@@ -2590,10 +2676,12 @@ class AvaliadorSintaticoPitugues {
2590
2676
  declaracaoDeVariaveis() {
2591
2677
  const identificadores = [];
2592
2678
  let retorno = [];
2679
+ let tipo = 'qualquer';
2593
2680
  do {
2594
2681
  identificadores.push(this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome de variável.'));
2595
2682
  } while (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.VIRGULA));
2596
2683
  if (!this.verificarSeSimboloAtualEIgualA(pitugues_1.default.IGUAL)) {
2684
+ // Inicialização de variáveis sem valor.
2597
2685
  for (let [indice, identificador] of identificadores.entries()) {
2598
2686
  retorno.push(new declaracoes_1.Var(identificador, null));
2599
2687
  }
@@ -2608,9 +2696,11 @@ class AvaliadorSintaticoPitugues {
2608
2696
  throw this.erro(this.simboloAtual(), 'Quantidade de identificadores à esquerda do igual é diferente da quantidade de valores à direita.');
2609
2697
  }
2610
2698
  for (let [indice, identificador] of identificadores.entries()) {
2611
- retorno.push(new declaracoes_1.Var(identificador, inicializadores[indice]));
2699
+ const inicializador = inicializadores[indice];
2700
+ tipo = this.logicaComumInferenciaTiposVariaveisEConstantes(inicializadores[indice], tipo);
2701
+ this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(identificador.lexema, tipo));
2702
+ retorno.push(new declaracoes_1.Var(identificador, inicializador, tipo));
2612
2703
  }
2613
- this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PONTO_E_VIRGULA);
2614
2704
  return retorno;
2615
2705
  }
2616
2706
  sincronizar() {
@@ -2682,9 +2772,6 @@ class AvaliadorSintaticoPitugues {
2682
2772
  const simboloAtual = this.simbolos[this.atual];
2683
2773
  let valores = [];
2684
2774
  switch (simboloAtual.tipo) {
2685
- case pitugues_1.default.SUPER:
2686
- const simboloSuper = this.avancarEDevolverAnterior();
2687
- return new construtos_1.Super(this.hashArquivo, simboloSuper, this.superclasseAtual);
2688
2775
  case pitugues_1.default.COLCHETE_ESQUERDO:
2689
2776
  this.avancarEDevolverAnterior();
2690
2777
  if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.COLCHETE_DIREITO)) {
@@ -2724,14 +2811,18 @@ class AvaliadorSintaticoPitugues {
2724
2811
  case pitugues_1.default.FUNÇÃO:
2725
2812
  const simboloFuncao = this.avancarEDevolverAnterior();
2726
2813
  const corpoDaFuncao = this.corpoDaFuncao(simboloFuncao.lexema);
2727
- // this.pilhaEscopos.definirTipoVariavel(simboloFuncao.lexema, 'função');
2814
+ this.pilhaEscopos.definirInformacoesVariavel(simboloFuncao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simboloFuncao.lexema, 'função'));
2728
2815
  return corpoDaFuncao;
2816
+ case pitugues_1.default.IMPORTAR:
2817
+ return this.declaracaoImportar();
2729
2818
  case pitugues_1.default.NULO:
2730
2819
  this.avancarEDevolverAnterior();
2731
2820
  return new construtos_1.Literal(this.hashArquivo, simboloAtual.linha, null);
2732
2821
  case pitugues_1.default.ISTO:
2733
2822
  const simboloIsto = this.avancarEDevolverAnterior();
2734
2823
  return new construtos_1.Isto(this.hashArquivo, simboloAtual.linha, simboloIsto);
2824
+ case pitugues_1.default.LEIA:
2825
+ return this.expressaoLeia();
2735
2826
  case pitugues_1.default.NUMERO:
2736
2827
  case pitugues_1.default.TEXTO:
2737
2828
  const simboloLiteral = this.avancarEDevolverAnterior();
@@ -2740,14 +2831,22 @@ class AvaliadorSintaticoPitugues {
2740
2831
  return new construtos_1.Literal(this.hashArquivo, Number(simboloLiteral.linha), simboloLiteral.literal, tipoDadosElementar);
2741
2832
  case pitugues_1.default.IDENTIFICADOR:
2742
2833
  const simboloIdentificador = this.avancarEDevolverAnterior();
2743
- return new construtos_1.Variavel(this.hashArquivo, simboloIdentificador);
2834
+ let tipoOperando;
2835
+ if (simboloIdentificador.lexema in this.tiposDefinidosEmCodigo) {
2836
+ tipoOperando = simboloIdentificador.lexema;
2837
+ }
2838
+ else {
2839
+ tipoOperando = this.pilhaEscopos.obterTipoVariavelPorNome(simboloIdentificador.lexema);
2840
+ }
2841
+ return new construtos_1.Variavel(this.hashArquivo, simboloIdentificador, tipoOperando);
2744
2842
  case pitugues_1.default.PARENTESE_ESQUERDO:
2745
2843
  this.avancarEDevolverAnterior();
2746
2844
  const expressao = this.expressao();
2747
2845
  this.consumir(pitugues_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
2748
2846
  return new construtos_1.Agrupamento(this.hashArquivo, simboloAtual.linha, expressao);
2749
- case pitugues_1.default.IMPORTAR:
2750
- return this.declaracaoImportar();
2847
+ case pitugues_1.default.SUPER:
2848
+ const simboloSuper = this.avancarEDevolverAnterior();
2849
+ return new construtos_1.Super(this.hashArquivo, simboloSuper, this.superclasseAtual);
2751
2850
  }
2752
2851
  throw this.erro(this.simboloAtual(), 'Esperado expressão.');
2753
2852
  }
@@ -2911,9 +3010,8 @@ class AvaliadorSintaticoPitugues {
2911
3010
  }
2912
3011
  return expressao;
2913
3012
  }
3013
+ // TODO: Depreciar.
2914
3014
  expressao() {
2915
- if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.LEIA))
2916
- return this.expressaoLeia();
2917
3015
  return this.atribuir();
2918
3016
  }
2919
3017
  declaracaoEscreva() {
@@ -2931,6 +3029,7 @@ class AvaliadorSintaticoPitugues {
2931
3029
  return new declaracoes_1.Expressao(expressao);
2932
3030
  }
2933
3031
  blocoEscopo() {
3032
+ this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
2934
3033
  let declaracoes = [];
2935
3034
  let simboloAtual = this.simboloAtual();
2936
3035
  const simboloAnterior = this.simboloAnterior();
@@ -2954,28 +3053,27 @@ class AvaliadorSintaticoPitugues {
2954
3053
  `Esperado: >= ${espacosIndentacaoLinhaAnterior}. ` +
2955
3054
  `Atual: ${espacosIndentacaoLinhaAtual}`);
2956
3055
  }
2957
- else {
2958
- // Indentação ok, é um bloco de escopo.
2959
- // Inclui todas as declarações cujas linhas tenham o mesmo número de espaços
2960
- // de indentação do bloco.
2961
- // Se `simboloAtual` for definido em algum momento como indefinido,
2962
- // Significa que o código acabou, então o bloco também acabou.
2963
- const espacosIndentacaoBloco = espacosIndentacaoLinhaAtual;
2964
- while (espacosIndentacaoLinhaAtual === espacosIndentacaoBloco) {
2965
- const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
2966
- if (Array.isArray(retornoDeclaracao)) {
2967
- declaracoes = declaracoes.concat(retornoDeclaracao);
2968
- }
2969
- else {
2970
- declaracoes.push(retornoDeclaracao);
2971
- }
2972
- simboloAtual = this.simboloAtual();
2973
- if (!simboloAtual)
2974
- break;
2975
- espacosIndentacaoLinhaAtual = this.pragmas[simboloAtual.linha].espacosIndentacao;
3056
+ // Indentação ok, é um bloco de escopo.
3057
+ // Inclui todas as declarações cujas linhas tenham o mesmo número de espaços
3058
+ // de indentação do bloco.
3059
+ // Se `simboloAtual` for definido em algum momento como indefinido,
3060
+ // Significa que o código acabou, então o bloco também acabou.
3061
+ const espacosIndentacaoBloco = espacosIndentacaoLinhaAtual;
3062
+ while (espacosIndentacaoLinhaAtual === espacosIndentacaoBloco) {
3063
+ const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
3064
+ if (Array.isArray(retornoDeclaracao)) {
3065
+ declaracoes = declaracoes.concat(retornoDeclaracao);
3066
+ }
3067
+ else {
3068
+ declaracoes.push(retornoDeclaracao);
2976
3069
  }
3070
+ simboloAtual = this.simboloAtual();
3071
+ if (!simboloAtual)
3072
+ break;
3073
+ espacosIndentacaoLinhaAtual = this.pragmas[simboloAtual.linha].espacosIndentacao;
2977
3074
  }
2978
3075
  }
3076
+ this.pilhaEscopos.removerUltimo();
2979
3077
  return declaracoes;
2980
3078
  }
2981
3079
  declaracaoEnquanto() {
@@ -3041,30 +3139,54 @@ class AvaliadorSintaticoPitugues {
3041
3139
  this.blocos -= 1;
3042
3140
  }
3043
3141
  }
3142
+ declaracaoParaCada(simboloPara) {
3143
+ const nomeVariavelIteracao = this.consumir(pitugues_1.default.IDENTIFICADOR, "Esperado identificador de variável de iteração para instrução 'para cada'.");
3144
+ if (!this.verificarSeSimboloAtualEIgualA(pitugues_1.default.DE, pitugues_1.default.EM)) {
3145
+ throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução 'para cada'.");
3146
+ }
3147
+ const vetor = this.expressao();
3148
+ if (!vetor.hasOwnProperty('tipo')) {
3149
+ throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
3150
+ }
3151
+ const tipoVetor = vetor.tipo;
3152
+ if (!tipoVetor.endsWith('[]') && tipoVetor !== 'vetor') {
3153
+ throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
3154
+ }
3155
+ this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelIteracao.lexema, tipoVetor.slice(0, -2)));
3156
+ // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
3157
+ const corpo = this.resolverDeclaracao();
3158
+ return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), nomeVariavelIteracao.lexema, vetor, corpo);
3159
+ }
3160
+ declaracaoParaTradicional(simboloPara) {
3161
+ let inicializador;
3162
+ if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PONTO_E_VIRGULA)) {
3163
+ inicializador = null;
3164
+ }
3165
+ else if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.VARIAVEL)) {
3166
+ inicializador = this.declaracaoDeVariaveis();
3167
+ }
3168
+ else {
3169
+ inicializador = this.declaracaoExpressao();
3170
+ }
3171
+ let condicao = null;
3172
+ if (!this.verificarTipoSimboloAtual(pitugues_1.default.PONTO_E_VIRGULA)) {
3173
+ condicao = this.expressao();
3174
+ }
3175
+ let incrementar = null;
3176
+ if (this.simbolos[this.atual].tipo !== pitugues_1.default.DOIS_PONTOS) {
3177
+ incrementar = this.expressao();
3178
+ }
3179
+ const corpo = this.resolverDeclaracao();
3180
+ return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
3181
+ }
3044
3182
  declaracaoPara() {
3045
3183
  try {
3046
3184
  const simboloPara = this.simboloAnterior();
3047
3185
  this.blocos += 1;
3048
- let inicializador;
3049
- if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.PONTO_E_VIRGULA)) {
3050
- inicializador = null;
3051
- }
3052
- else if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.VARIAVEL)) {
3053
- inicializador = this.declaracaoDeVariaveis();
3054
- }
3055
- else {
3056
- inicializador = this.declaracaoExpressao();
3057
- }
3058
- let condicao = null;
3059
- if (!this.verificarTipoSimboloAtual(pitugues_1.default.PONTO_E_VIRGULA)) {
3060
- condicao = this.expressao();
3061
- }
3062
- let incrementar = null;
3063
- if (this.simbolos[this.atual].tipo !== pitugues_1.default.DOIS_PONTOS) {
3064
- incrementar = this.expressao();
3186
+ if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.CADA)) {
3187
+ return this.declaracaoParaCada(simboloPara);
3065
3188
  }
3066
- const corpo = this.resolverDeclaracao();
3067
- return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
3189
+ return this.declaracaoParaTradicional(simboloPara);
3068
3190
  }
3069
3191
  catch (erro) {
3070
3192
  throw erro;
@@ -3207,17 +3329,18 @@ class AvaliadorSintaticoPitugues {
3207
3329
  const parametro = {};
3208
3330
  if (this.simboloAtual().tipo === pitugues_1.default.MULTIPLICACAO) {
3209
3331
  this.consumir(pitugues_1.default.MULTIPLICACAO, null);
3210
- parametro['tipo'] = 'multiplo';
3332
+ parametro.abrangencia = 'multiplo';
3211
3333
  }
3212
3334
  else {
3213
- parametro['tipo'] = 'padrao';
3335
+ parametro.abrangencia = 'padrao';
3214
3336
  }
3215
- parametro['nome'] = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
3337
+ parametro.nome = this.consumir(pitugues_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
3216
3338
  if (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.IGUAL)) {
3217
- parametro['valorPadrao'] = this.primario();
3339
+ parametro.valorPadrao = this.primario();
3218
3340
  }
3341
+ this.pilhaEscopos.definirInformacoesVariavel(parametro.nome.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(parametro.nome.lexema, parametro.tipoDado || 'qualquer'));
3219
3342
  parametros.push(parametro);
3220
- if (parametro['tipo'] === 'multiplo')
3343
+ if (parametro.abrangencia === 'multiplo')
3221
3344
  break;
3222
3345
  } while (this.verificarSeSimboloAtualEIgualA(pitugues_1.default.VIRGULA));
3223
3346
  return parametros;
@@ -3277,12 +3400,100 @@ class AvaliadorSintaticoPitugues {
3277
3400
  return null;
3278
3401
  }
3279
3402
  }
3403
+ registrarTiposBibliotecasEPrimitivas() {
3404
+ this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
3405
+ this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
3406
+ // Funções nativas de Delégua
3407
+ this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorio', 'inteiro', [
3408
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número'),
3409
+ ]));
3410
+ this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorioEntre', 'inteiro', [
3411
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('minimo', 'número'),
3412
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('maximo', 'número'),
3413
+ ]));
3414
+ this.pilhaEscopos.definirInformacoesVariavel('algum', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('algum', 'lógico', [
3415
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3416
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
3417
+ ]));
3418
+ this.pilhaEscopos.definirInformacoesVariavel('encontrar', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrar', 'qualquer', [
3419
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3420
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
3421
+ ]));
3422
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarIndice', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarIndice', 'inteiro', [
3423
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3424
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
3425
+ ]));
3426
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarUltimo', 'inteiro', [
3427
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3428
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
3429
+ ]));
3430
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('encontrarUltimoIndice', 'inteiro', [
3431
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3432
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoPesquisa', 'função'),
3433
+ ]));
3434
+ this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('filtrarPor', 'qualquer[]', [
3435
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3436
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
3437
+ ]));
3438
+ this.pilhaEscopos.definirInformacoesVariavel('incluido', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('incluido', 'lógico', [
3439
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3440
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer'),
3441
+ ]));
3442
+ this.pilhaEscopos.definirInformacoesVariavel('inteiro', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inteiro', 'inteiro', [
3443
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valor', 'qualquer'),
3444
+ ]));
3445
+ this.pilhaEscopos.definirInformacoesVariavel('mapear', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('mapear', 'qualquer[]', [
3446
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3447
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoMapeamento', 'função'),
3448
+ ]));
3449
+ this.pilhaEscopos.definirInformacoesVariavel('numero', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número', [
3450
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
3451
+ ]));
3452
+ this.pilhaEscopos.definirInformacoesVariavel('número', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número', [
3453
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
3454
+ ]));
3455
+ this.pilhaEscopos.definirInformacoesVariavel('ordenar', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('ordenar', 'qualquer[]', [
3456
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3457
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoOrdenacao', 'função'),
3458
+ ]));
3459
+ this.pilhaEscopos.definirInformacoesVariavel('paraCada', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('paraCada', 'qualquer[]', [
3460
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3461
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
3462
+ ]));
3463
+ this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondicao', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('primeiroEmCondicao', 'qualquer', [
3464
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3465
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoFiltragem', 'função'),
3466
+ ]));
3467
+ this.pilhaEscopos.definirInformacoesVariavel('real', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('real', 'número', [
3468
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
3469
+ ]));
3470
+ this.pilhaEscopos.definirInformacoesVariavel('reduzir', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('reduzir', 'qualquer', [
3471
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3472
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoReducao', 'função'),
3473
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorInicial', 'qualquer'),
3474
+ ]));
3475
+ this.pilhaEscopos.definirInformacoesVariavel('tamanho', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('tamanho', 'inteiro', [
3476
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('objeto', 'qualquer'),
3477
+ ]));
3478
+ this.pilhaEscopos.definirInformacoesVariavel('texto', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('texto', 'texto', [
3479
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('valorParaConverter', 'qualquer'),
3480
+ ]));
3481
+ this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('todosEmCondicao', 'lógico', [
3482
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3483
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoCondicional', 'função'),
3484
+ ]));
3485
+ this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('tupla', 'tupla', [
3486
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('vetor', 'qualquer[]'),
3487
+ ]));
3488
+ }
3280
3489
  analisar(retornoLexador, hashArquivo) {
3281
3490
  const inicioAnalise = (0, browser_process_hrtime_1.default)();
3282
3491
  this.erros = [];
3283
3492
  this.atual = 0;
3284
3493
  this.blocos = 0;
3285
3494
  this.escopos = [];
3495
+ this.registrarTiposBibliotecasEPrimitivas();
3496
+ this.tiposDefinidosEmCodigo = {};
3286
3497
  this.hashArquivo = hashArquivo || 0;
3287
3498
  this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
3288
3499
  this.pragmas = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.pragmas) || {};
@@ -3309,7 +3520,7 @@ class AvaliadorSintaticoPitugues {
3309
3520
  }
3310
3521
  exports.AvaliadorSintaticoPitugues = AvaliadorSintaticoPitugues;
3311
3522
 
3312
- },{"../../construtos":42,"../../declaracoes":82,"../../inferenciador":105,"../../lexador":154,"../../tipos-de-simbolos/pitugues":169,"../erro-avaliador-sintatico":7,"browser-process-hrtime":342}],5:[function(require,module,exports){
3523
+ },{"../../construtos":42,"../../declaracoes":82,"../../inferenciador":105,"../../informacao-variavel-ou-constante":106,"../../lexador":154,"../../tipos-de-simbolos/pitugues":169,"../erro-avaliador-sintatico":7,"../informacao-escopo":9,"../pilha-escopos":12,"browser-process-hrtime":342}],5:[function(require,module,exports){
3313
3524
  "use strict";
3314
3525
  var __importDefault = (this && this.__importDefault) || function (mod) {
3315
3526
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -4001,7 +4212,9 @@ async function aleatorioEntre(interpretador, minimo, maximo) {
4001
4212
  if (arguments.length <= 0) {
4002
4213
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A função recebe ao menos um parâmetro.'));
4003
4214
  }
4004
- const valorMinimo = minimo.hasOwnProperty('valor') ? minimo.valor : minimo;
4215
+ const valorMinimo = minimo.hasOwnProperty('valor')
4216
+ ? minimo.valor
4217
+ : minimo;
4005
4218
  if (arguments.length === 2) {
4006
4219
  if (typeof valorMinimo !== 'number') {
4007
4220
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'O parâmetro deve ser um número.'));
@@ -4011,7 +4224,9 @@ async function aleatorioEntre(interpretador, minimo, maximo) {
4011
4224
  if (arguments.length > 3) {
4012
4225
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'A quantidade de parâmetros máxima para esta função é 2.'));
4013
4226
  }
4014
- const valorMaximo = maximo.hasOwnProperty('valor') ? maximo.valor : maximo;
4227
+ const valorMaximo = maximo.hasOwnProperty('valor')
4228
+ ? maximo.valor
4229
+ : maximo;
4015
4230
  if (typeof valorMinimo !== 'number' || typeof valorMaximo !== 'number') {
4016
4231
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Os dois parâmetros devem ser do tipo número.'));
4017
4232
  }
@@ -4026,7 +4241,9 @@ async function aleatorioEntre(interpretador, minimo, maximo) {
4026
4241
  */
4027
4242
  async function algum(interpretador, vetor, funcaoPesquisa) {
4028
4243
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4029
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor') ? funcaoPesquisa.valor : funcaoPesquisa;
4244
+ const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
4245
+ ? funcaoPesquisa.valor
4246
+ : funcaoPesquisa;
4030
4247
  if (!Array.isArray(valorVetor)) {
4031
4248
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
4032
4249
  }
@@ -4050,7 +4267,9 @@ async function algum(interpretador, vetor, funcaoPesquisa) {
4050
4267
  */
4051
4268
  async function encontrar(interpretador, vetor, funcaoPesquisa) {
4052
4269
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4053
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor') ? funcaoPesquisa.valor : funcaoPesquisa;
4270
+ const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
4271
+ ? funcaoPesquisa.valor
4272
+ : funcaoPesquisa;
4054
4273
  if (!Array.isArray(valorVetor)) {
4055
4274
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
4056
4275
  }
@@ -4074,7 +4293,9 @@ async function encontrar(interpretador, vetor, funcaoPesquisa) {
4074
4293
  */
4075
4294
  async function encontrarIndice(interpretador, vetor, funcaoPesquisa) {
4076
4295
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4077
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor') ? funcaoPesquisa.valor : funcaoPesquisa;
4296
+ const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
4297
+ ? funcaoPesquisa.valor
4298
+ : funcaoPesquisa;
4078
4299
  if (!Array.isArray(valorVetor)) {
4079
4300
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
4080
4301
  }
@@ -4098,7 +4319,9 @@ async function encontrarIndice(interpretador, vetor, funcaoPesquisa) {
4098
4319
  */
4099
4320
  async function encontrarUltimo(interpretador, vetor, funcaoPesquisa) {
4100
4321
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4101
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor') ? funcaoPesquisa.valor : funcaoPesquisa;
4322
+ const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
4323
+ ? funcaoPesquisa.valor
4324
+ : funcaoPesquisa;
4102
4325
  if (!Array.isArray(valorVetor)) {
4103
4326
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
4104
4327
  }
@@ -4121,7 +4344,9 @@ async function encontrarUltimo(interpretador, vetor, funcaoPesquisa) {
4121
4344
  */
4122
4345
  async function encontrarUltimoIndice(interpretador, vetor, funcaoPesquisa) {
4123
4346
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4124
- const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor') ? funcaoPesquisa.valor : funcaoPesquisa;
4347
+ const valorFuncaoPesquisa = funcaoPesquisa.hasOwnProperty('valor')
4348
+ ? funcaoPesquisa.valor
4349
+ : funcaoPesquisa;
4125
4350
  if (!Array.isArray(valorVetor)) {
4126
4351
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
4127
4352
  }
@@ -4146,7 +4371,9 @@ async function filtrarPor(interpretador, vetor, funcaoFiltragem) {
4146
4371
  if (vetor === null || vetor === undefined)
4147
4372
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() não pode ser nulo.'));
4148
4373
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4149
- const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor') ? funcaoFiltragem.valor : funcaoFiltragem;
4374
+ const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
4375
+ ? funcaoFiltragem.valor
4376
+ : funcaoFiltragem;
4150
4377
  if (!Array.isArray(valorVetor)) {
4151
4378
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função filtrarPor() deve ser um vetor.'));
4152
4379
  }
@@ -4155,7 +4382,9 @@ async function filtrarPor(interpretador, vetor, funcaoFiltragem) {
4155
4382
  }
4156
4383
  const resultados = [];
4157
4384
  for (let indice = 0; indice < valorVetor.length; ++indice) {
4158
- const deveRetornarValor = await valorFuncaoFiltragem.chamar(interpretador, [valorVetor[indice]]);
4385
+ const deveRetornarValor = await valorFuncaoFiltragem.chamar(interpretador, [
4386
+ valorVetor[indice],
4387
+ ]);
4159
4388
  if (deveRetornarValor === false)
4160
4389
  continue;
4161
4390
  resultados.push(valorVetor[indice]);
@@ -4200,28 +4429,34 @@ function validacaoComumNumeros(valorParaConverter) {
4200
4429
  async function inteiro(interpretador, valorParaConverter) {
4201
4430
  if (valorParaConverter === null || valorParaConverter === undefined)
4202
4431
  return Promise.resolve(0);
4203
- const valor = valorParaConverter.hasOwnProperty('valor') ? valorParaConverter.valor : valorParaConverter;
4432
+ const valor = valorParaConverter.hasOwnProperty('valor')
4433
+ ? valorParaConverter.valor
4434
+ : valorParaConverter;
4204
4435
  const resultadoValidacao = validacaoComumNumeros(valor);
4205
4436
  return resultadoValidacao || Promise.resolve(parseInt(valor));
4206
4437
  }
4207
4438
  /**
4208
- *
4209
- * @param interpretador
4210
- * @param vetor
4211
- * @param funcaoMapeamento
4212
- * @returns
4439
+ * Dado um vetor e uma função de mapeamento, executa a função de mapeamento
4440
+ * passando como argumento cada elemento do vetor.
4441
+ * @param interpretador A instância do interpretador.
4442
+ * @param vetor O vetor
4443
+ * @param funcaoMapeamento A função de mapeamento.
4444
+ * @returns O resultado acumulado da execução da função de mapeamento.
4213
4445
  */
4214
4446
  async function mapear(interpretador, vetor, funcaoMapeamento) {
4215
4447
  if (vetor === null || vetor === undefined)
4216
4448
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função mapear() não pode ser nulo.'));
4217
4449
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4218
- const valorFuncaoMapeamento = funcaoMapeamento.hasOwnProperty('valor') ? funcaoMapeamento.valor : funcaoMapeamento;
4450
+ const valorFuncaoMapeamento = funcaoMapeamento.hasOwnProperty('valor')
4451
+ ? funcaoMapeamento.valor
4452
+ : funcaoMapeamento;
4219
4453
  // TODO: As lógicas de validação abaixo deixam de fazer sentido com a validação de argumentos feita
4220
4454
  // na avaliação sintática. Estudar remoção.
4221
4455
  if (!Array.isArray(valorVetor)) {
4222
4456
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função mapear() deve ser um vetor.'));
4223
4457
  }
4224
- if (valorFuncaoMapeamento.constructor.name !== 'DeleguaFuncao') {
4458
+ const nomeConstrutorFuncaoMapeamento = valorFuncaoMapeamento.constructor.name.replaceAll('_', '');
4459
+ if (nomeConstrutorFuncaoMapeamento !== 'DeleguaFuncao') {
4225
4460
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função mapear() deve ser uma função.'));
4226
4461
  }
4227
4462
  const resultados = [];
@@ -4239,7 +4474,9 @@ async function mapear(interpretador, vetor, funcaoMapeamento) {
4239
4474
  async function numero(interpretador, valorParaConverter) {
4240
4475
  if (valorParaConverter === null || valorParaConverter === undefined)
4241
4476
  return Promise.resolve(0);
4242
- const valor = valorParaConverter.hasOwnProperty('valor') ? valorParaConverter.valor : valorParaConverter;
4477
+ const valor = valorParaConverter.hasOwnProperty('valor')
4478
+ ? valorParaConverter.valor
4479
+ : valorParaConverter;
4243
4480
  const resultadoValidacao = validacaoComumNumeros(valor);
4244
4481
  return resultadoValidacao || Promise.resolve(Number(valor));
4245
4482
  }
@@ -4279,7 +4516,9 @@ async function paraCada(interpretador, vetor, funcaoFiltragem) {
4279
4516
  if (vetor === null || vetor === undefined)
4280
4517
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função paraCada() não pode ser nulo.'));
4281
4518
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4282
- const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor') ? funcaoFiltragem.valor : funcaoFiltragem;
4519
+ const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
4520
+ ? funcaoFiltragem.valor
4521
+ : funcaoFiltragem;
4283
4522
  // TODO: As lógicas de validação abaixo deixam de fazer sentido com a validação de argumentos feita
4284
4523
  // na avaliação sintática. Estudar remoção.
4285
4524
  if (!Array.isArray(valorVetor)) {
@@ -4303,7 +4542,9 @@ async function primeiroEmCondicao(interpretador, vetor, funcaoFiltragem) {
4303
4542
  if (vetor === null || vetor === undefined)
4304
4543
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() não pode ser nulo.'));
4305
4544
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4306
- const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor') ? funcaoFiltragem.valor : funcaoFiltragem;
4545
+ const valorFuncaoFiltragem = funcaoFiltragem.hasOwnProperty('valor')
4546
+ ? funcaoFiltragem.valor
4547
+ : funcaoFiltragem;
4307
4548
  if (!Array.isArray(valorVetor)) {
4308
4549
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função primeiroEmCondicao() deve ser um vetor.'));
4309
4550
  }
@@ -4311,7 +4552,9 @@ async function primeiroEmCondicao(interpretador, vetor, funcaoFiltragem) {
4311
4552
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O segundo parâmetro da função primeiroEmCondicao() deve ser uma função.'));
4312
4553
  }
4313
4554
  for (let indice = 0; indice < valorVetor.length; ++indice) {
4314
- const valorResolvido = await valorFuncaoFiltragem.chamar(interpretador, [valorVetor[indice]]);
4555
+ const valorResolvido = await valorFuncaoFiltragem.chamar(interpretador, [
4556
+ valorVetor[indice],
4557
+ ]);
4315
4558
  if (valorResolvido !== null) {
4316
4559
  return valorResolvido;
4317
4560
  }
@@ -4343,7 +4586,9 @@ async function real(interpretador, numero) {
4343
4586
  */
4344
4587
  async function reduzir(interpretador, vetor, funcaoReducao, valorInicial = null) {
4345
4588
  const valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
4346
- const valorFuncaoReducao = funcaoReducao.hasOwnProperty('valor') ? funcaoReducao.valor : funcaoReducao;
4589
+ const valorFuncaoReducao = funcaoReducao.hasOwnProperty('valor')
4590
+ ? funcaoReducao.valor
4591
+ : funcaoReducao;
4347
4592
  const valorPadrao = valorInicial.hasOwnProperty('valor') ? valorInicial.valor : valorInicial;
4348
4593
  if (!Array.isArray(valorVetor)) {
4349
4594
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, 'Parâmetro inválido. O primeiro parâmetro da função deve ser um vetor.'));
@@ -4544,7 +4789,7 @@ exports.default = {
4544
4789
  tipoRetorno: 'texto[]',
4545
4790
  argumentos: [
4546
4791
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('divisor', 'texto'),
4547
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('limite', 'número')
4792
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('limite', 'número'),
4548
4793
  ],
4549
4794
  implementacao: (interpretador, texto, divisor, limite) => {
4550
4795
  if (limite) {
@@ -4557,15 +4802,13 @@ exports.default = {
4557
4802
  tipoRetorno: 'texto',
4558
4803
  argumentos: [
4559
4804
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inicio', 'número'),
4560
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número')
4805
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número'),
4561
4806
  ],
4562
4807
  implementacao: (interpretador, texto, inicio, fim) => Promise.resolve(texto.slice(inicio, fim)),
4563
4808
  },
4564
4809
  inclui: {
4565
4810
  tipoRetorno: 'texto',
4566
- argumentos: [
4567
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'texto')
4568
- ],
4811
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'texto')],
4569
4812
  implementacao: (interpretador, texto, elemento) => Promise.resolve(texto.includes(elemento)),
4570
4813
  },
4571
4814
  inverter: {
@@ -4587,7 +4830,7 @@ exports.default = {
4587
4830
  tipoRetorno: 'texto',
4588
4831
  argumentos: [
4589
4832
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'texto'),
4590
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('substituto', 'texto')
4833
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('substituto', 'texto'),
4591
4834
  ],
4592
4835
  implementacao: (interpretador, texto, elemento, substituto) => Promise.resolve(texto.replace(elemento, substituto)),
4593
4836
  },
@@ -4595,7 +4838,7 @@ exports.default = {
4595
4838
  tipoRetorno: 'texto',
4596
4839
  argumentos: [
4597
4840
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inicio', 'número'),
4598
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número')
4841
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número'),
4599
4842
  ],
4600
4843
  implementacao: (interpretador, texto, inicio, fim) => Promise.resolve(texto.slice(inicio, fim)),
4601
4844
  },
@@ -4613,9 +4856,7 @@ const informacao_variavel_ou_constante_1 = require("../informacao-variavel-ou-co
4613
4856
  exports.default = {
4614
4857
  adicionar: {
4615
4858
  tipoRetorno: 'qualquer[]',
4616
- argumentos: [
4617
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')
4618
- ],
4859
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')],
4619
4860
  implementacao: (interpretador, vetor, elemento) => {
4620
4861
  vetor.push(elemento);
4621
4862
  return Promise.resolve(vetor);
@@ -4623,18 +4864,14 @@ exports.default = {
4623
4864
  },
4624
4865
  concatenar: {
4625
4866
  tipoRetorno: 'qualquer[]',
4626
- argumentos: [
4627
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('outroVetor', 'qualquer[]')
4628
- ],
4867
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('outroVetor', 'qualquer[]')],
4629
4868
  implementacao: (interpretador, vetor, outroVetor) => {
4630
4869
  return Promise.resolve(vetor.concat(outroVetor));
4631
4870
  },
4632
4871
  },
4633
4872
  empilhar: {
4634
4873
  tipoRetorno: 'qualquer[]',
4635
- argumentos: [
4636
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')
4637
- ],
4874
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')],
4638
4875
  implementacao: (interpretador, vetor, elemento) => {
4639
4876
  vetor.push(elemento);
4640
4877
  return Promise.resolve(vetor);
@@ -4645,7 +4882,7 @@ exports.default = {
4645
4882
  argumentos: [
4646
4883
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inicio', 'qualquer'),
4647
4884
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('excluirQuantidade', 'número'),
4648
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('itens', 'qualquer[]')
4885
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('itens', 'qualquer[]'),
4649
4886
  ],
4650
4887
  implementacao: (interpretador, vetor, inicio, excluirQuantidade, ...itens) => {
4651
4888
  let elementos = [];
@@ -4664,15 +4901,13 @@ exports.default = {
4664
4901
  tipoRetorno: 'qualquer[]',
4665
4902
  argumentos: [
4666
4903
  new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('inicio', 'número'),
4667
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número')
4904
+ new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('fim', 'número'),
4668
4905
  ],
4669
4906
  implementacao: (interpretador, vetor, inicio, fim) => Promise.resolve(vetor.slice(inicio, fim)),
4670
4907
  },
4671
4908
  filtrarPor: {
4672
4909
  tipoRetorno: 'qualquer[]',
4673
- argumentos: [
4674
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcao', 'função')
4675
- ],
4910
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcao', 'função')],
4676
4911
  implementacao: async (interpretador, vetor, funcao) => {
4677
4912
  if (funcao === undefined || funcao === null) {
4678
4913
  return Promise.reject("É necessário passar uma função para o método 'filtrarPor'");
@@ -4688,9 +4923,7 @@ exports.default = {
4688
4923
  },
4689
4924
  inclui: {
4690
4925
  tipoRetorno: 'lógico',
4691
- argumentos: [
4692
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')
4693
- ],
4926
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')],
4694
4927
  implementacao: (interpretador, vetor, elemento) => Promise.resolve(vetor.includes(elemento)),
4695
4928
  },
4696
4929
  inverter: {
@@ -4700,16 +4933,12 @@ exports.default = {
4700
4933
  },
4701
4934
  juntar: {
4702
4935
  tipoRetorno: 'texto',
4703
- argumentos: [
4704
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('separador', 'texto')
4705
- ],
4936
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('separador', 'texto')],
4706
4937
  implementacao: (interpretador, vetor, separador) => Promise.resolve(vetor.join(separador)),
4707
4938
  },
4708
4939
  mapear: {
4709
4940
  tipoRetorno: 'qualquer[]',
4710
- argumentos: [
4711
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcao', 'função')
4712
- ],
4941
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcao', 'função')],
4713
4942
  implementacao: async (interpretador, vetor, funcao) => {
4714
4943
  if (funcao === undefined || funcao === null) {
4715
4944
  return Promise.reject("É necessário passar uma função para o método 'mapear'");
@@ -4724,14 +4953,15 @@ exports.default = {
4724
4953
  },
4725
4954
  ordenar: {
4726
4955
  tipoRetorno: 'qualquer[]',
4727
- argumentos: [
4728
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoOrdenacao', 'função')
4729
- ],
4956
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('funcaoOrdenacao', 'função')],
4730
4957
  implementacao: async (interpretador, vetor, funcaoOrdenacao) => {
4731
4958
  if (funcaoOrdenacao !== undefined && funcaoOrdenacao !== null) {
4732
4959
  for (let i = 0; i < vetor.length - 1; i++) {
4733
4960
  for (let j = 1; j < vetor.length; j++) {
4734
- if ((await funcaoOrdenacao.chamar(interpretador, [vetor[j - 1], vetor[j]])) > 0) {
4961
+ if ((await funcaoOrdenacao.chamar(interpretador, [
4962
+ vetor[j - 1],
4963
+ vetor[j],
4964
+ ])) > 0) {
4735
4965
  const aux = vetor[j];
4736
4966
  vetor[j] = vetor[j - 1];
4737
4967
  vetor[j - 1] = aux;
@@ -4748,9 +4978,7 @@ exports.default = {
4748
4978
  },
4749
4979
  remover: {
4750
4980
  tipoRetorno: 'qualquer[]',
4751
- argumentos: [
4752
- new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')
4753
- ],
4981
+ argumentos: [new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('elemento', 'qualquer')],
4754
4982
  implementacao: (interpretador, vetor, elemento) => {
4755
4983
  const index = vetor.indexOf(elemento);
4756
4984
  if (index !== -1)
@@ -5036,7 +5264,8 @@ class Binario {
5036
5264
  this.tipo = this.deduzirTipo();
5037
5265
  }
5038
5266
  deduzirTipo() {
5039
- if (['logico', 'lógico'].includes(this.esquerda.tipo) || ['logico', 'lógico'].includes(this.direita.tipo)) {
5267
+ if (['logico', 'lógico'].includes(this.esquerda.tipo) ||
5268
+ ['logico', 'lógico'].includes(this.direita.tipo)) {
5040
5269
  return 'lógico';
5041
5270
  }
5042
5271
  if (this.esquerda.tipo === 'texto' || this.direita.tipo === 'texto') {
@@ -5045,7 +5274,8 @@ class Binario {
5045
5274
  if (this.esquerda.tipo === 'inteiro' && this.direita.tipo === 'inteiro') {
5046
5275
  return 'inteiro';
5047
5276
  }
5048
- if (['numero', 'número'].includes(this.esquerda.tipo) || ['numero', 'número'].includes(this.direita.tipo)) {
5277
+ if (['numero', 'número'].includes(this.esquerda.tipo) ||
5278
+ ['numero', 'número'].includes(this.direita.tipo)) {
5049
5279
  return 'número';
5050
5280
  }
5051
5281
  return 'qualquer';
@@ -7594,7 +7824,7 @@ class InformacaoVariavelOuConstante {
7594
7824
  this.argumentos = argumentos;
7595
7825
  }
7596
7826
  toString() {
7597
- return `InformacaoVariavelOuConstante(nome=${this.nome}, tipo=${this.tipo}, argumentos=${this.argumentos.map(arg => arg.toString()).join(', ')})`;
7827
+ return `InformacaoVariavelOuConstante(nome=${this.nome}, tipo=${this.tipo}, argumentos=${this.argumentos.map((arg) => arg.toString()).join(', ')})`;
7598
7828
  }
7599
7829
  }
7600
7830
  exports.InformacaoVariavelOuConstante = InformacaoVariavelOuConstante;
@@ -7945,7 +8175,9 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
7945
8175
  const argumentosResolvidos = [];
7946
8176
  for (let i = indiceArgumentoAtual; i < argumentos.length; i++) {
7947
8177
  const argumentoAtual = argumentos[i];
7948
- argumentosResolvidos.push(argumentoAtual && argumentoAtual.hasOwnProperty('valor') ? argumentoAtual.valor : argumentoAtual);
8178
+ argumentosResolvidos.push(argumentoAtual && argumentoAtual.hasOwnProperty('valor')
8179
+ ? argumentoAtual.valor
8180
+ : argumentoAtual);
7949
8181
  }
7950
8182
  return argumentosResolvidos;
7951
8183
  }
@@ -7958,14 +8190,19 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
7958
8190
  if (parametro.abrangencia === 'multiplo') {
7959
8191
  const argumentosResolvidos = this.resolverParametrosEspalhados(argumentos, i);
7960
8192
  // TODO: Verificar se `imutavel` é `true` aqui mesmo.
7961
- ambiente.valores[nome] = { tipo: 'vetor', valor: argumentosResolvidos, imutavel: true };
8193
+ ambiente.valores[nome] = {
8194
+ tipo: 'vetor',
8195
+ valor: argumentosResolvidos,
8196
+ imutavel: true,
8197
+ };
7962
8198
  }
7963
8199
  else {
7964
8200
  let argumento = argumentos[i];
7965
8201
  if (argumento.valor === null) {
7966
8202
  argumentos[i].valor = parametro['padrao'] ? parametro['padrao'].valor : null;
7967
8203
  }
7968
- ambiente.valores[nome] = argumento && argumento.hasOwnProperty('valor') ? argumento.valor : argumento;
8204
+ ambiente.valores[nome] =
8205
+ argumento && argumento.hasOwnProperty('valor') ? argumento.valor : argumento;
7969
8206
  // Se o argumento é `DeleguaFuncao`, para habilitar o recurso de _currying_,
7970
8207
  // copiamos seu valor para o escopo atual. Nem sempre podemos contar com a tipagem explícita aqui.
7971
8208
  if (argumento.valor && ['funcao', 'função'].includes(argumento.valor.tipo)) {
@@ -7985,7 +8222,8 @@ class DeleguaFuncao extends chamavel_1.Chamavel {
7985
8222
  };
7986
8223
  // TODO: Apenass Potigol usa isso até então.
7987
8224
  // Estudar mover isso para o dialeto.
7988
- if (this.instancia.classe.dialetoRequerExpansaoPropriedadesEspacoVariaveis && this.nome !== 'construtor') {
8225
+ if (this.instancia.classe.dialetoRequerExpansaoPropriedadesEspacoVariaveis &&
8226
+ this.nome !== 'construtor') {
7989
8227
  for (let [nomeCampo, valorCampo] of Object.entries(this.instancia.propriedades)) {
7990
8228
  ambiente.valores[nomeCampo] = {
7991
8229
  valor: valorCampo,
@@ -8286,7 +8524,8 @@ class ObjetoDeleguaClasse {
8286
8524
  throw new excecoes_1.ErroEmTempoDeExecucao(null, `Propriedade "${nomePropriedade}" não existe neste objeto.`);
8287
8525
  }
8288
8526
  definir(simbolo, valor) {
8289
- if (this.classe.dialetoRequerDeclaracaoPropriedades && !this.propriedades.hasOwnProperty(simbolo.lexema)) {
8527
+ if (this.classe.dialetoRequerDeclaracaoPropriedades &&
8528
+ !this.propriedades.hasOwnProperty(simbolo.lexema)) {
8290
8529
  throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, `Propriedade "${simbolo.lexema}" não foi definida na declaração da classe ${this.classe.simboloOriginal.lexema}.`);
8291
8530
  }
8292
8531
  this.propriedades[simbolo.lexema] = valor;
@@ -8416,7 +8655,8 @@ class InterpretadorBase {
8416
8655
  this.diretorioBase = diretorioBase;
8417
8656
  this.performance = performance;
8418
8657
  this.funcaoDeRetorno = funcaoDeRetorno || console.log;
8419
- this.funcaoDeRetornoMesmaLinha = funcaoDeRetornoMesmaLinha || process.stdout.write.bind(process.stdout);
8658
+ this.funcaoDeRetornoMesmaLinha =
8659
+ funcaoDeRetornoMesmaLinha || process.stdout.write.bind(process.stdout);
8420
8660
  this.erros = [];
8421
8661
  this.declaracoes = [];
8422
8662
  this.resultadoInterpretador = [];
@@ -8550,7 +8790,9 @@ class InterpretadorBase {
8550
8790
  textoFinal = textoFinal.replace('${' + elemento.variavel + '}', this.paraTexto((_b = elemento === null || elemento === void 0 ? void 0 : elemento.valor) === null || _b === void 0 ? void 0 : _b.valor));
8551
8791
  }
8552
8792
  else {
8553
- const valor = ((_c = elemento === null || elemento === void 0 ? void 0 : elemento.valor) === null || _c === void 0 ? void 0 : _c.hasOwnProperty('valor')) ? elemento === null || elemento === void 0 ? void 0 : elemento.valor.valor : elemento === null || elemento === void 0 ? void 0 : elemento.valor;
8793
+ const valor = ((_c = elemento === null || elemento === void 0 ? void 0 : elemento.valor) === null || _c === void 0 ? void 0 : _c.hasOwnProperty('valor'))
8794
+ ? elemento === null || elemento === void 0 ? void 0 : elemento.valor.valor
8795
+ : elemento === null || elemento === void 0 ? void 0 : elemento.valor;
8554
8796
  textoFinal = textoFinal.replace('${' + elemento.variavel + '}', `${this.paraTexto(valor)}`);
8555
8797
  }
8556
8798
  });
@@ -8602,7 +8844,8 @@ class InterpretadorBase {
8602
8844
  return true;
8603
8845
  }
8604
8846
  verificarOperandoNumero(operador, operando) {
8605
- if (typeof operando === primitivos_1.default.NUMERO || operando.tipo === delegua_2.default.NUMERO)
8847
+ if (typeof operando === primitivos_1.default.NUMERO ||
8848
+ operando.tipo === delegua_2.default.NUMERO)
8606
8849
  return;
8607
8850
  throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operando precisa ser um número.', Number(operador.linha));
8608
8851
  }
@@ -8655,11 +8898,15 @@ class InterpretadorBase {
8655
8898
  let resultado = '';
8656
8899
  const conteudo = await this.avaliar(declaracao.expressao);
8657
8900
  const valorConteudo = (conteudo === null || conteudo === void 0 ? void 0 : conteudo.hasOwnProperty('valor')) ? conteudo.valor : conteudo;
8658
- const tipoConteudo = conteudo.hasOwnProperty('tipo') ? conteudo.tipo : typeof conteudo;
8901
+ const tipoConteudo = conteudo.hasOwnProperty('tipo')
8902
+ ? conteudo.tipo
8903
+ : typeof conteudo;
8659
8904
  resultado = valorConteudo;
8660
8905
  if ([delegua_2.default.NUMERO, primitivos_1.default.NUMERO].includes(tipoConteudo) &&
8661
8906
  declaracao.casasDecimais > 0) {
8662
- resultado = valorConteudo.toLocaleString('pt', { maximumFractionDigits: declaracao.casasDecimais });
8907
+ resultado = valorConteudo.toLocaleString('pt', {
8908
+ maximumFractionDigits: declaracao.casasDecimais,
8909
+ });
8663
8910
  }
8664
8911
  if (declaracao.espacos > 0) {
8665
8912
  resultado += ' '.repeat(declaracao.espacos);
@@ -8718,14 +8965,19 @@ class InterpretadorBase {
8718
8965
  const direita = await this.avaliar(expressao.direita);
8719
8966
  const valorEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('valor')) ? esquerda.valor : esquerda;
8720
8967
  const valorDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('valor')) ? direita.valor : direita;
8721
- const tipoEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('tipo')) ? esquerda.tipo : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
8722
- const tipoDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('tipo')) ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
8968
+ const tipoEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('tipo'))
8969
+ ? esquerda.tipo
8970
+ : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
8971
+ const tipoDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('tipo'))
8972
+ ? direita.tipo
8973
+ : (0, inferenciador_1.inferirTipoVariavel)(direita);
8723
8974
  switch (expressao.operador.tipo) {
8724
8975
  case delegua_1.default.EXPONENCIACAO:
8725
8976
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
8726
8977
  return Math.pow(valorEsquerdo, valorDireito);
8727
8978
  case delegua_1.default.MAIOR:
8728
- if (this.tiposNumericos.includes(tipoEsquerdo) && this.tiposNumericos.includes(tipoDireito)) {
8979
+ if (this.tiposNumericos.includes(tipoEsquerdo) &&
8980
+ this.tiposNumericos.includes(tipoDireito)) {
8729
8981
  return Number(valorEsquerdo) > Number(valorDireito);
8730
8982
  }
8731
8983
  return String(valorEsquerdo) > String(valorDireito);
@@ -8733,7 +8985,8 @@ class InterpretadorBase {
8733
8985
  this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
8734
8986
  return Number(valorEsquerdo) >= Number(valorDireito);
8735
8987
  case delegua_1.default.MENOR:
8736
- if (this.tiposNumericos.includes(tipoEsquerdo) && this.tiposNumericos.includes(tipoDireito)) {
8988
+ if (this.tiposNumericos.includes(tipoEsquerdo) &&
8989
+ this.tiposNumericos.includes(tipoDireito)) {
8737
8990
  return Number(valorEsquerdo) < Number(valorDireito);
8738
8991
  }
8739
8992
  return String(valorEsquerdo) < String(valorDireito);
@@ -8746,7 +8999,8 @@ class InterpretadorBase {
8746
8999
  return Number(valorEsquerdo) - Number(valorDireito);
8747
9000
  case delegua_1.default.ADICAO:
8748
9001
  case delegua_1.default.MAIS_IGUAL:
8749
- if (this.tiposNumericos.includes(tipoEsquerdo) && this.tiposNumericos.includes(tipoDireito)) {
9002
+ if (this.tiposNumericos.includes(tipoEsquerdo) &&
9003
+ this.tiposNumericos.includes(tipoDireito)) {
8750
9004
  return Number(valorEsquerdo) + Number(valorDireito);
8751
9005
  }
8752
9006
  // TODO: Se tipo for 'qualquer', seria uma boa confiar nos operadores
@@ -8765,11 +9019,13 @@ class InterpretadorBase {
8765
9019
  return Math.floor(Number(valorEsquerdo) / Number(valorDireito));
8766
9020
  case delegua_1.default.MULTIPLICACAO:
8767
9021
  case delegua_1.default.MULTIPLICACAO_IGUAL:
8768
- if (tipoEsquerdo === delegua_2.default.TEXTO || tipoDireito === delegua_2.default.TEXTO) {
9022
+ if (tipoEsquerdo === delegua_2.default.TEXTO ||
9023
+ tipoDireito === delegua_2.default.TEXTO) {
8769
9024
  // Sem ambos os valores resolvem como texto, multiplica normal.
8770
9025
  // Se apenas um resolve como texto, o outro repete o
8771
9026
  // texto n vezes, sendo n o valor do outro.
8772
- if (tipoEsquerdo === delegua_2.default.TEXTO && tipoDireito === delegua_2.default.TEXTO) {
9027
+ if (tipoEsquerdo === delegua_2.default.TEXTO &&
9028
+ tipoDireito === delegua_2.default.TEXTO) {
8773
9029
  return Number(valorEsquerdo) * Number(valorDireito);
8774
9030
  }
8775
9031
  if (tipoEsquerdo === delegua_2.default.TEXTO) {
@@ -8841,7 +9097,8 @@ class InterpretadorBase {
8841
9097
  try {
8842
9098
  const variavelEntidadeChamada = await this.avaliar(expressao.entidadeChamada);
8843
9099
  if (variavelEntidadeChamada === null) {
8844
- return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.parentese, 'Chamada de função ou método inexistente: ' + String(expressao.entidadeChamada), expressao.linha));
9100
+ return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.parentese, 'Chamada de função ou método inexistente: ' +
9101
+ String(expressao.entidadeChamada), expressao.linha));
8845
9102
  }
8846
9103
  const entidadeChamada = variavelEntidadeChamada.hasOwnProperty('valor')
8847
9104
  ? variavelEntidadeChamada.valor
@@ -8853,7 +9110,9 @@ class InterpretadorBase {
8853
9110
  return await this.chamarMetodoPrimitiva(expressao, entidadeChamada);
8854
9111
  }
8855
9112
  const argumentos = await this.resolverArgumentosChamada(expressao);
8856
- const aridade = entidadeChamada.aridade ? entidadeChamada.aridade() : entidadeChamada.length;
9113
+ const aridade = entidadeChamada.aridade
9114
+ ? entidadeChamada.aridade()
9115
+ : entidadeChamada.length;
8857
9116
  // Completar os argumentos não preenchidos com valores indefinidos.
8858
9117
  if (argumentos.length < aridade) {
8859
9118
  const diferenca = aridade - argumentos.length;
@@ -8866,7 +9125,9 @@ class InterpretadorBase {
8866
9125
  }
8867
9126
  if (entidadeChamada instanceof estruturas_1.FuncaoPadrao) {
8868
9127
  try {
8869
- return entidadeChamada.chamar(this, argumentos.map((a) => a && a.valor && a.valor.hasOwnProperty('valor') ? a.valor.valor : a === null || a === void 0 ? void 0 : a.valor), expressao.entidadeChamada.simbolo);
9128
+ return entidadeChamada.chamar(this, argumentos.map((a) => a && a.valor && a.valor.hasOwnProperty('valor')
9129
+ ? a.valor.valor
9130
+ : a === null || a === void 0 ? void 0 : a.valor), expressao.entidadeChamada.simbolo);
8870
9131
  }
8871
9132
  catch (erro) {
8872
9133
  this.erros.push({
@@ -8879,7 +9140,8 @@ class InterpretadorBase {
8879
9140
  // Por algum motivo misterioso, `entidadeChamada instanceof Chamavel` dá `false` em Liquido,
8880
9141
  // mesmo que esteja tudo certo com `DeleguaFuncao`,
8881
9142
  // então precisamos testar o nome do construtor também.
8882
- if (entidadeChamada instanceof estruturas_1.Chamavel || entidadeChamada.constructor.name === 'DeleguaFuncao') {
9143
+ if (entidadeChamada instanceof estruturas_1.Chamavel ||
9144
+ entidadeChamada.constructor.name === 'DeleguaFuncao') {
8883
9145
  const retornoEntidadeChamada = await entidadeChamada.chamar(this, argumentos);
8884
9146
  return retornoEntidadeChamada;
8885
9147
  }
@@ -8932,7 +9194,9 @@ class InterpretadorBase {
8932
9194
  // Nunca será método aqui: apenas propriedade.
8933
9195
  const alvoPropriedade = expressao.alvo;
8934
9196
  const variavelObjeto = await this.avaliar(alvoPropriedade.objeto);
8935
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
9197
+ const objeto = variavelObjeto.hasOwnProperty('valor')
9198
+ ? variavelObjeto.valor
9199
+ : variavelObjeto;
8936
9200
  const valor = await this.avaliar(expressao.valor);
8937
9201
  if (objeto.constructor.name === 'ObjetoDeleguaClasse') {
8938
9202
  const objetoDeleguaClasse = objeto;
@@ -8961,7 +9225,8 @@ class InterpretadorBase {
8961
9225
  return direita.includes(esquerda);
8962
9226
  }
8963
9227
  else if (direita !== null && typeof direita === 'object') {
8964
- return esquerda in direita || (direita.valor !== undefined && esquerda in direita.valor);
9228
+ return (esquerda in direita ||
9229
+ (direita.valor !== undefined && esquerda in direita.valor));
8965
9230
  }
8966
9231
  throw new excecoes_1.ErroEmTempoDeExecucao(esquerda, "Tipo de chamada inválida com 'em'.", expressao.linha);
8967
9232
  }
@@ -8986,7 +9251,8 @@ class InterpretadorBase {
8986
9251
  }
8987
9252
  let retornoExecucao;
8988
9253
  while (!(retornoExecucao instanceof quebras_1.Quebra)) {
8989
- if (declaracao.condicao !== null && !this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
9254
+ if (declaracao.condicao !== null &&
9255
+ !this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
8990
9256
  break;
8991
9257
  }
8992
9258
  try {
@@ -9018,11 +9284,14 @@ class InterpretadorBase {
9018
9284
  // laço de repetição.
9019
9285
  declaracao.posicaoAtual = 0;
9020
9286
  const vetorResolvido = await this.avaliar(declaracao.vetor);
9021
- const valorVetorResolvido = vetorResolvido.hasOwnProperty('valor') ? vetorResolvido.valor : vetorResolvido;
9287
+ const valorVetorResolvido = vetorResolvido.hasOwnProperty('valor')
9288
+ ? vetorResolvido.valor
9289
+ : vetorResolvido;
9022
9290
  if (!Array.isArray(valorVetorResolvido)) {
9023
9291
  return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
9024
9292
  }
9025
- while (!(retornoExecucao instanceof quebras_1.Quebra) && declaracao.posicaoAtual < valorVetorResolvido.length) {
9293
+ while (!(retornoExecucao instanceof quebras_1.Quebra) &&
9294
+ declaracao.posicaoAtual < valorVetorResolvido.length) {
9026
9295
  try {
9027
9296
  this.pilhaEscoposExecucao.definirVariavel(declaracao.nomeVariavelIteracao, valorVetorResolvido[declaracao.posicaoAtual]);
9028
9297
  retornoExecucao = await this.executar(declaracao.corpo);
@@ -9068,7 +9337,8 @@ class InterpretadorBase {
9068
9337
  }
9069
9338
  async visitarDeclaracaoEnquanto(declaracao) {
9070
9339
  let retornoExecucao;
9071
- while (!(retornoExecucao instanceof quebras_1.Quebra) && this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
9340
+ while (!(retornoExecucao instanceof quebras_1.Quebra) &&
9341
+ this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
9072
9342
  try {
9073
9343
  retornoExecucao = await this.executar(declaracao.corpo);
9074
9344
  if (retornoExecucao instanceof quebras_1.SustarQuebra) {
@@ -9091,7 +9361,9 @@ class InterpretadorBase {
9091
9361
  }
9092
9362
  async visitarDeclaracaoEscolha(declaracao) {
9093
9363
  const condicaoEscolha = await this.avaliar(declaracao.identificadorOuLiteral);
9094
- const valorCondicaoEscolha = condicaoEscolha.hasOwnProperty('valor') ? condicaoEscolha.valor : condicaoEscolha;
9364
+ const valorCondicaoEscolha = condicaoEscolha.hasOwnProperty('valor')
9365
+ ? condicaoEscolha.valor
9366
+ : condicaoEscolha;
9095
9367
  const caminhos = declaracao.caminhos;
9096
9368
  const caminhoPadrao = declaracao.caminhoPadrao;
9097
9369
  let encontrado = false;
@@ -9173,9 +9445,7 @@ class InterpretadorBase {
9173
9445
  }
9174
9446
  else {
9175
9447
  const literalErro = new construtos_1.Literal(declaracao.hashArquivo, Number(declaracao.linha), erro.mensagem);
9176
- const chamadaPegue = new construtos_1.Chamada(declaracao.caminhoPegue.hashArquivo, declaracao.caminhoPegue, [
9177
- literalErro,
9178
- ]);
9448
+ const chamadaPegue = new construtos_1.Chamada(declaracao.caminhoPegue.hashArquivo, declaracao.caminhoPegue, [literalErro]);
9179
9449
  valorRetorno = await chamadaPegue.aceitar(this);
9180
9450
  }
9181
9451
  }
@@ -9195,7 +9465,9 @@ class InterpretadorBase {
9195
9465
  let formatoTexto = '';
9196
9466
  for (const argumento of argumentos) {
9197
9467
  const resultadoAvaliacao = await this.avaliar(argumento);
9198
- let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor')) ? resultadoAvaliacao.valor : resultadoAvaliacao;
9468
+ let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor'))
9469
+ ? resultadoAvaliacao.valor
9470
+ : resultadoAvaliacao;
9199
9471
  formatoTexto += `${this.paraTexto(valor)} `;
9200
9472
  }
9201
9473
  return formatoTexto.trimEnd();
@@ -9356,10 +9628,15 @@ class InterpretadorBase {
9356
9628
  }
9357
9629
  }
9358
9630
  async visitarExpressaoAcessoIndiceVariavel(expressao) {
9359
- const promises = await Promise.all([this.avaliar(expressao.entidadeChamada), this.avaliar(expressao.indice)]);
9631
+ const promises = await Promise.all([
9632
+ this.avaliar(expressao.entidadeChamada),
9633
+ this.avaliar(expressao.indice),
9634
+ ]);
9360
9635
  const variavelObjeto = promises[0];
9361
9636
  const indice = promises[1];
9362
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
9637
+ const objeto = variavelObjeto.hasOwnProperty('valor')
9638
+ ? variavelObjeto.valor
9639
+ : variavelObjeto;
9363
9640
  let valorIndice = indice.hasOwnProperty('valor') ? indice.valor : indice;
9364
9641
  if (Array.isArray(objeto)) {
9365
9642
  if (!Number.isInteger(valorIndice)) {
@@ -9405,7 +9682,9 @@ class InterpretadorBase {
9405
9682
  }
9406
9683
  async visitarExpressaoDefinirValor(expressao) {
9407
9684
  const variavelObjeto = await this.avaliar(expressao.objeto);
9408
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
9685
+ const objeto = variavelObjeto.hasOwnProperty('valor')
9686
+ ? variavelObjeto.valor
9687
+ : variavelObjeto;
9409
9688
  if (objeto.constructor.name !== 'ObjetoDeleguaClasse' && objeto.constructor !== Object) {
9410
9689
  return Promise.reject(new excecoes_1.ErroEmTempoDeExecucao(expressao.nome, 'Somente instâncias e dicionários podem possuir campos.', expressao.linha));
9411
9690
  }
@@ -9472,10 +9751,13 @@ class InterpretadorBase {
9472
9751
  if (variavelObjeto.constructor.name === 'RetornoQuebra') {
9473
9752
  variavelObjeto = variavelObjeto.valor;
9474
9753
  }
9475
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
9754
+ const objeto = variavelObjeto.hasOwnProperty('valor')
9755
+ ? variavelObjeto.valor
9756
+ : variavelObjeto;
9476
9757
  // Outro caso que `instanceof` simplesmente não funciona para casos em Liquido,
9477
9758
  // então testamos também o nome do construtor.
9478
- if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto.constructor.name === 'ObjetoDeleguaClasse') {
9759
+ if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
9760
+ objeto.constructor.name === 'ObjetoDeleguaClasse') {
9479
9761
  const valor = objeto.obter(expressao.simbolo);
9480
9762
  if (valor === 0)
9481
9763
  return 0;
@@ -9520,13 +9802,18 @@ class InterpretadorBase {
9520
9802
  async visitarExpressaoDicionario(expressao) {
9521
9803
  const dicionario = {};
9522
9804
  for (let i = 0; i < expressao.chaves.length; i++) {
9523
- const promises = await Promise.all([this.avaliar(expressao.chaves[i]), this.avaliar(expressao.valores[i])]);
9805
+ const promises = await Promise.all([
9806
+ this.avaliar(expressao.chaves[i]),
9807
+ this.avaliar(expressao.valores[i]),
9808
+ ]);
9524
9809
  if (typeof promises[0] === 'boolean') {
9525
9810
  const chaveLogico = promises[0] === true ? 'verdadeiro' : 'falso';
9526
9811
  dicionario[chaveLogico] = promises[1];
9527
9812
  continue;
9528
9813
  }
9529
- dicionario[promises[0]] = promises[1].hasOwnProperty('valor') ? promises[1].valor : promises[1];
9814
+ dicionario[promises[0]] = promises[1].hasOwnProperty('valor')
9815
+ ? promises[1].valor
9816
+ : promises[1];
9530
9817
  }
9531
9818
  return dicionario;
9532
9819
  }
@@ -9588,7 +9875,10 @@ class InterpretadorBase {
9588
9875
  retornoVetor += `${JSON.stringify(elemento)}, `;
9589
9876
  continue;
9590
9877
  }
9591
- retornoVetor += typeof elemento === 'string' ? `'${elemento}', ` : `${this.paraTexto(elemento)}, `;
9878
+ retornoVetor +=
9879
+ typeof elemento === 'string'
9880
+ ? `'${elemento}', `
9881
+ : `${this.paraTexto(elemento)}, `;
9592
9882
  }
9593
9883
  if (retornoVetor.length > 1) {
9594
9884
  retornoVetor = retornoVetor.slice(0, -2);
@@ -9649,7 +9939,8 @@ class InterpretadorBase {
9649
9939
  const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
9650
9940
  let retornoExecucao;
9651
9941
  try {
9652
- for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
9942
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
9943
+ ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
9653
9944
  retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
9654
9945
  }
9655
9946
  return retornoExecucao;
@@ -9862,7 +10153,9 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
9862
10153
  let formatoTexto = '';
9863
10154
  for (const argumento of argumentos) {
9864
10155
  const resultadoAvaliacao = await this.avaliar(argumento);
9865
- let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor')) ? resultadoAvaliacao.valor : resultadoAvaliacao;
10156
+ let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor'))
10157
+ ? resultadoAvaliacao.valor
10158
+ : resultadoAvaliacao;
9866
10159
  formatoTexto += `${this.paraTexto(valor)} `;
9867
10160
  }
9868
10161
  return formatoTexto.trimEnd();
@@ -10062,7 +10355,8 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
10062
10355
  let i = this.pilhaEscoposExecucao.pilha.length - 1;
10063
10356
  while (i > 0) {
10064
10357
  let ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
10065
- if (ultimoEscopo.declaracaoAtual >= ultimoEscopo.declaracoes.length || ultimoEscopo.finalizado) {
10358
+ if (ultimoEscopo.declaracaoAtual >= ultimoEscopo.declaracoes.length ||
10359
+ ultimoEscopo.finalizado) {
10066
10360
  this.pilhaEscoposExecucao.removerUltimo();
10067
10361
  const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
10068
10362
  escopoAnterior.ambiente.resolucoesChamadas = Object.assign(escopoAnterior.ambiente.resolucoesChamadas, ultimoEscopo.ambiente.resolucoesChamadas);
@@ -10097,7 +10391,8 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
10097
10391
  if (!this.pontoDeParadaAtivo && !ultimoEscopo.emLacoRepeticao) {
10098
10392
  ultimoEscopo.declaracaoAtual++;
10099
10393
  }
10100
- if (ultimoEscopo.declaracaoAtual >= ultimoEscopo.declaracoes.length || ultimoEscopo.finalizado) {
10394
+ if (ultimoEscopo.declaracaoAtual >= ultimoEscopo.declaracoes.length ||
10395
+ ultimoEscopo.finalizado) {
10101
10396
  if (retornoExecucao instanceof quebras_1.RetornoQuebra) {
10102
10397
  this.descartarEscopoPorRetornoFuncao();
10103
10398
  }
@@ -10126,7 +10421,8 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
10126
10421
  const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
10127
10422
  let retornoExecucao;
10128
10423
  try {
10129
- for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
10424
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) &&
10425
+ ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
10130
10426
  if (naoVerificarPrimeiraExecucao) {
10131
10427
  naoVerificarPrimeiraExecucao = false;
10132
10428
  }
@@ -10205,7 +10501,8 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
10205
10501
  await this.instrucaoPasso(escopo + 1);
10206
10502
  }
10207
10503
  else {
10208
- if (escopoVisitado.declaracaoAtual >= escopoVisitado.declaracoes.length || escopoVisitado.finalizado) {
10504
+ if (escopoVisitado.declaracaoAtual >= escopoVisitado.declaracoes.length ||
10505
+ escopoVisitado.finalizado) {
10209
10506
  this.pilhaEscoposExecucao.removerUltimo();
10210
10507
  }
10211
10508
  if (this.pilhaEscoposExecucao.elementos() === 1) {
@@ -10284,7 +10581,9 @@ class InterpretadorComDepuracao extends interpretador_1.Interpretador {
10284
10581
  * @param nome O nome da variável.
10285
10582
  */
10286
10583
  obterVariavel(nome) {
10287
- const valorOuVariavel = this.pilhaEscoposExecucao.obterValorVariavel({ lexema: nome });
10584
+ const valorOuVariavel = this.pilhaEscoposExecucao.obterValorVariavel({
10585
+ lexema: nome,
10586
+ });
10288
10587
  return valorOuVariavel.hasOwnProperty('valor')
10289
10588
  ? valorOuVariavel
10290
10589
  : {
@@ -10332,7 +10631,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
10332
10631
  if (variavelObjeto.constructor.name === 'RetornoQuebra') {
10333
10632
  variavelObjeto = variavelObjeto.valor;
10334
10633
  }
10335
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
10634
+ const objeto = variavelObjeto.hasOwnProperty('valor')
10635
+ ? variavelObjeto.valor
10636
+ : variavelObjeto;
10336
10637
  if (objeto.constructor.name === 'ObjetoDeleguaClasse') {
10337
10638
  return objeto.obterMetodo(expressao.nomeMetodo) || null;
10338
10639
  }
@@ -10412,7 +10713,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
10412
10713
  if (variavelObjeto.constructor.name === 'RetornoQuebra') {
10413
10714
  variavelObjeto = variavelObjeto.valor;
10414
10715
  }
10415
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
10716
+ const objeto = variavelObjeto.hasOwnProperty('valor')
10717
+ ? variavelObjeto.valor
10718
+ : variavelObjeto;
10416
10719
  if (objeto.constructor.name === 'ObjetoDeleguaClasse') {
10417
10720
  return objeto.obter(expressao.simbolo);
10418
10721
  }
@@ -10476,10 +10779,13 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
10476
10779
  if (variavelObjeto.constructor.name === 'RetornoQuebra') {
10477
10780
  variavelObjeto = variavelObjeto.valor;
10478
10781
  }
10479
- const objeto = variavelObjeto.hasOwnProperty('valor') ? variavelObjeto.valor : variavelObjeto;
10782
+ const objeto = variavelObjeto.hasOwnProperty('valor')
10783
+ ? variavelObjeto.valor
10784
+ : variavelObjeto;
10480
10785
  // Outro caso que `instanceof` simplesmente não funciona para casos em Liquido,
10481
10786
  // então testamos também o nome do construtor.
10482
- if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto.constructor.name === 'ObjetoDeleguaClasse') {
10787
+ if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
10788
+ objeto.constructor.name === 'ObjetoDeleguaClasse') {
10483
10789
  return objeto.obterMetodo(expressao.nomePropriedade) || null;
10484
10790
  }
10485
10791
  // Objeto simples do JavaScript, ou dicionário de Delégua.
@@ -10529,7 +10835,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
10529
10835
  // Se o retorno for uma função anônima, o escopo precisa ser preservado.
10530
10836
  // Como quebras matam o topo da pilha de escopos, precisamos dizer
10531
10837
  // para a finalização para copiar as variáveis para o escopo de baixo.
10532
- if (retornoQuebra.valor.constructor.name === 'DeleguaFuncao') {
10838
+ const construtorRetorno = retornoQuebra.valor.constructor.name.replaceAll('_', '');
10839
+ if (construtorRetorno === 'DeleguaFuncao') {
10533
10840
  retornoQuebra.preservarEscopo = true;
10534
10841
  }
10535
10842
  return retornoQuebra;
@@ -10998,7 +11305,9 @@ class LexadorEguaClassico {
10998
11305
  this.avancar();
10999
11306
  }
11000
11307
  const codigo = this.codigo.substring(this.inicioSimbolo, this.atual);
11001
- const tipo = codigo in egua_classico_1.palavrasReservadas ? egua_classico_1.palavrasReservadas[codigo] : egua_classico_2.default.IDENTIFICADOR;
11308
+ const tipo = codigo in egua_classico_1.palavrasReservadas
11309
+ ? egua_classico_1.palavrasReservadas[codigo]
11310
+ : egua_classico_2.default.IDENTIFICADOR;
11002
11311
  this.adicionarSimbolo(tipo);
11003
11312
  }
11004
11313
  analisarToken() {
@@ -11193,8 +11502,12 @@ class LexadorGuarani extends lexador_base_1.LexadorBase {
11193
11502
  while (this.eAlfabetoOuDigito(this.simboloAtual())) {
11194
11503
  this.avancar();
11195
11504
  }
11196
- const codigo = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual).toLowerCase();
11197
- const tipo = codigo in guarani_2.palavrasReservadas ? guarani_2.palavrasReservadas[codigo] : guarani_1.default.IDENTIFICADOR;
11505
+ const codigo = this.codigo[this.linha]
11506
+ .substring(this.inicioSimbolo, this.atual)
11507
+ .toLowerCase();
11508
+ const tipo = codigo in guarani_2.palavrasReservadas
11509
+ ? guarani_2.palavrasReservadas[codigo]
11510
+ : guarani_1.default.IDENTIFICADOR;
11198
11511
  this.adicionarSimbolo(tipo);
11199
11512
  }
11200
11513
  analisarToken() {
@@ -11348,7 +11661,8 @@ class LexadorPitugues {
11348
11661
  eFinalDoCodigo() {
11349
11662
  if (this.linha > this.codigo.length - 1)
11350
11663
  return true;
11351
- return this.linha == this.codigo.length - 1 && this.codigo[this.codigo.length - 1].length <= this.atual;
11664
+ return (this.linha == this.codigo.length - 1 &&
11665
+ this.codigo[this.codigo.length - 1].length <= this.atual);
11352
11666
  }
11353
11667
  avancar() {
11354
11668
  this.atual += 1;
@@ -11417,7 +11731,8 @@ class LexadorPitugues {
11417
11731
  }
11418
11732
  identificarPalavraChave() {
11419
11733
  const linhaPrimeiroCaracter = this.linha;
11420
- while (this.eAlfabetoOuDigito(this.simboloAtual()) && this.linha === linhaPrimeiroCaracter) {
11734
+ while (this.eAlfabetoOuDigito(this.simboloAtual()) &&
11735
+ this.linha === linhaPrimeiroCaracter) {
11421
11736
  this.avancar();
11422
11737
  }
11423
11738
  let textoPalavraChave;
@@ -11717,7 +12032,8 @@ class LexadorPortugolIpt {
11717
12032
  eFinalDoCodigo() {
11718
12033
  if (this.linha > this.codigo.length - 1)
11719
12034
  return true;
11720
- return this.linha == this.codigo.length - 1 && this.codigo[this.codigo.length - 1].length <= this.atual;
12035
+ return (this.linha == this.codigo.length - 1 &&
12036
+ this.codigo[this.codigo.length - 1].length <= this.atual);
11721
12037
  }
11722
12038
  /**
11723
12039
  * Indica se o código está na última linha.
@@ -11795,7 +12111,8 @@ class LexadorPortugolIpt {
11795
12111
  }
11796
12112
  identificarPalavraChave() {
11797
12113
  const linhaPrimeiroCaracter = this.linha;
11798
- while (this.eAlfabetoOuDigito(this.simboloAtual()) && this.linha === linhaPrimeiroCaracter) {
12114
+ while (this.eAlfabetoOuDigito(this.simboloAtual()) &&
12115
+ this.linha === linhaPrimeiroCaracter) {
11799
12116
  this.avancar();
11800
12117
  }
11801
12118
  let textoPalavraChave;
@@ -12449,7 +12766,9 @@ class Lexador {
12449
12766
  this.avancar();
12450
12767
  }
12451
12768
  const codigo = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
12452
- const tipo = codigo in palavras_reservadas_1.palavrasReservadas ? palavras_reservadas_1.palavrasReservadas[codigo] : delegua_1.default.IDENTIFICADOR;
12769
+ const tipo = codigo in palavras_reservadas_1.palavrasReservadas
12770
+ ? palavras_reservadas_1.palavrasReservadas[codigo]
12771
+ : delegua_1.default.IDENTIFICADOR;
12453
12772
  this.adicionarSimbolo(tipo);
12454
12773
  }
12455
12774
  analisarToken() {
@@ -12815,7 +13134,9 @@ class MicroLexador {
12815
13134
  this.atual++;
12816
13135
  }
12817
13136
  const codigo = this.codigo.substring(this.inicioSimbolo, this.atual);
12818
- const tipo = codigo in palavras_reservadas_1.palavrasReservadasMicroGramatica ? palavras_reservadas_1.palavrasReservadasMicroGramatica[codigo] : delegua_1.default.IDENTIFICADOR;
13137
+ const tipo = codigo in palavras_reservadas_1.palavrasReservadasMicroGramatica
13138
+ ? palavras_reservadas_1.palavrasReservadasMicroGramatica[codigo]
13139
+ : delegua_1.default.IDENTIFICADOR;
12819
13140
  this.adicionarSimbolo(tipo);
12820
13141
  }
12821
13142
  analisarToken() {
@@ -13729,7 +14050,8 @@ class Python3Lexer extends Lexer_1.Lexer {
13729
14050
  }
13730
14051
  else {
13731
14052
  // Possibly emit more than 1 DEDENT token.
13732
- while (this.indents.length && this.indents[this.indents.length - 1] > indent) {
14053
+ while (this.indents.length &&
14054
+ this.indents[this.indents.length - 1] > indent) {
13733
14055
  this.emit(this.createDedent());
13734
14056
  this.indents.pop();
13735
14057
  }
@@ -15445,7 +15767,8 @@ class Python3Parser extends Parser_1.Parser {
15445
15767
  this.state = 269;
15446
15768
  this._errHandler.sync(this);
15447
15769
  _alt = this.interpreter.adaptivePredict(this._input, 15, this._ctx);
15448
- while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
15770
+ while (_alt !== 2 &&
15771
+ _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
15449
15772
  if (_alt === 1) {
15450
15773
  {
15451
15774
  {
@@ -15758,7 +16081,8 @@ class Python3Parser extends Parser_1.Parser {
15758
16081
  this.state = 357;
15759
16082
  this._errHandler.sync(this);
15760
16083
  _alt = this.interpreter.adaptivePredict(this._input, 36, this._ctx);
15761
- while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
16084
+ while (_alt !== 2 &&
16085
+ _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) {
15762
16086
  if (_alt === 1) {
15763
16087
  {
15764
16088
  {
@@ -16996,12 +17320,14 @@ class Python3Parser extends Parser_1.Parser {
16996
17320
  this.state = 526;
16997
17321
  this._errHandler.sync(this);
16998
17322
  _la = this._input.LA(1);
16999
- while (_la === Python3Parser.DOT || _la === Python3Parser.ELLIPSIS) {
17323
+ while (_la === Python3Parser.DOT ||
17324
+ _la === Python3Parser.ELLIPSIS) {
17000
17325
  {
17001
17326
  {
17002
17327
  this.state = 523;
17003
17328
  _la = this._input.LA(1);
17004
- if (!(_la === Python3Parser.DOT || _la === Python3Parser.ELLIPSIS)) {
17329
+ if (!(_la === Python3Parser.DOT ||
17330
+ _la === Python3Parser.ELLIPSIS)) {
17005
17331
  this._errHandler.recoverInline(this);
17006
17332
  }
17007
17333
  else {
@@ -17031,7 +17357,8 @@ class Python3Parser extends Parser_1.Parser {
17031
17357
  {
17032
17358
  this.state = 530;
17033
17359
  _la = this._input.LA(1);
17034
- if (!(_la === Python3Parser.DOT || _la === Python3Parser.ELLIPSIS)) {
17360
+ if (!(_la === Python3Parser.DOT ||
17361
+ _la === Python3Parser.ELLIPSIS)) {
17035
17362
  this._errHandler.recoverInline(this);
17036
17363
  }
17037
17364
  else {
@@ -17046,7 +17373,8 @@ class Python3Parser extends Parser_1.Parser {
17046
17373
  this.state = 533;
17047
17374
  this._errHandler.sync(this);
17048
17375
  _la = this._input.LA(1);
17049
- } while (_la === Python3Parser.DOT || _la === Python3Parser.ELLIPSIS);
17376
+ } while (_la === Python3Parser.DOT ||
17377
+ _la === Python3Parser.ELLIPSIS);
17050
17378
  }
17051
17379
  break;
17052
17380
  }
@@ -18506,7 +18834,9 @@ class Python3Parser extends Parser_1.Parser {
18506
18834
  _la = this._input.LA(1);
18507
18835
  while (((_la & ~0x1f) === 0 &&
18508
18836
  ((1 << _la) &
18509
- ((1 << Python3Parser.IN) | (1 << Python3Parser.NOT) | (1 << Python3Parser.IS))) !==
18837
+ ((1 << Python3Parser.IN) |
18838
+ (1 << Python3Parser.NOT) |
18839
+ (1 << Python3Parser.IS))) !==
18510
18840
  0) ||
18511
18841
  (((_la - 74) & ~0x1f) === 0 &&
18512
18842
  ((1 << (_la - 74)) &
@@ -18828,7 +19158,8 @@ class Python3Parser extends Parser_1.Parser {
18828
19158
  {
18829
19159
  this.state = 828;
18830
19160
  _la = this._input.LA(1);
18831
- if (!(_la === Python3Parser.LEFT_SHIFT || _la === Python3Parser.RIGHT_SHIFT)) {
19161
+ if (!(_la === Python3Parser.LEFT_SHIFT ||
19162
+ _la === Python3Parser.RIGHT_SHIFT)) {
18832
19163
  this._errHandler.recoverInline(this);
18833
19164
  }
18834
19165
  else {
@@ -26221,7 +26552,8 @@ class TradutorAssemblyScript {
26221
26552
  resultado += ' '.repeat(this.indentacao);
26222
26553
  if (Array.isArray(declaracaoTente.caminhoPegue)) {
26223
26554
  for (let declaracao of declaracaoTente.caminhoPegue) {
26224
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
26555
+ resultado +=
26556
+ this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
26225
26557
  }
26226
26558
  }
26227
26559
  else {
@@ -26235,7 +26567,8 @@ class TradutorAssemblyScript {
26235
26567
  if (declaracaoTente.caminhoFinalmente !== null) {
26236
26568
  resultado += '\nfinally {\n';
26237
26569
  for (let finalmente of declaracaoTente.caminhoFinalmente) {
26238
- resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
26570
+ resultado +=
26571
+ this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
26239
26572
  }
26240
26573
  resultado += ' '.repeat(this.indentacao);
26241
26574
  resultado += '}';
@@ -26265,7 +26598,10 @@ class TradutorAssemblyScript {
26265
26598
  logicaTraducaoMetodoClasse(metodoClasse) {
26266
26599
  this.indentacao += 4;
26267
26600
  let resultado = ' '.repeat(this.indentacao);
26268
- resultado += metodoClasse.simbolo.lexema === 'construtor' ? 'constructor(' : metodoClasse.simbolo.lexema + '(';
26601
+ resultado +=
26602
+ metodoClasse.simbolo.lexema === 'construtor'
26603
+ ? 'constructor('
26604
+ : metodoClasse.simbolo.lexema + '(';
26269
26605
  for (let parametro of metodoClasse.funcao.parametros) {
26270
26606
  resultado += parametro.nome.lexema + ', ';
26271
26607
  }
@@ -26385,7 +26721,8 @@ class TradutorAssemblyScript {
26385
26721
  this.indentacao += 4;
26386
26722
  resultado += ' '.repeat(this.indentacao);
26387
26723
  for (let condicao of caminho.condicoes) {
26388
- resultado += 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
26724
+ resultado +=
26725
+ 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
26389
26726
  resultado += ' '.repeat(this.indentacao);
26390
26727
  }
26391
26728
  for (let declaracao of caminho.declaracoes) {
@@ -26398,7 +26735,8 @@ class TradutorAssemblyScript {
26398
26735
  this.dicionarioConstrutos[declaracaoRetorna.valor.constructor.name](declaracaoRetorna.valor);
26399
26736
  break;
26400
26737
  default:
26401
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
26738
+ resultado +=
26739
+ this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
26402
26740
  break;
26403
26741
  }
26404
26742
  resultado += ' '.repeat(this.indentacao + 4);
@@ -26538,20 +26876,27 @@ class TradutorAssemblyScript {
26538
26876
  traduzirConstrutoBinario(binario) {
26539
26877
  let resultado = '';
26540
26878
  if (binario.esquerda.constructor.name === 'Agrupamento')
26541
- resultado += '(' + this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) + ')';
26879
+ resultado +=
26880
+ '(' +
26881
+ this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) +
26882
+ ')';
26542
26883
  else
26543
26884
  resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
26544
26885
  let operador = this.traduzirSimboloOperador(binario.operador);
26545
26886
  resultado += ` ${operador} `;
26546
26887
  if (binario.direita.constructor.name === 'Agrupamento')
26547
- resultado += '(' + this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) + ')';
26888
+ resultado +=
26889
+ '(' +
26890
+ this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
26891
+ ')';
26548
26892
  else
26549
26893
  resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
26550
26894
  return resultado;
26551
26895
  }
26552
26896
  traduzirConstrutoAtribuir(atribuir) {
26553
26897
  let resultado = this.dicionarioConstrutos[atribuir.alvo.constructor.name](atribuir.alvo);
26554
- resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
26898
+ resultado +=
26899
+ ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
26555
26900
  return resultado;
26556
26901
  }
26557
26902
  // TODO: Eliminar o soft cast para `any`.
@@ -26767,13 +27112,19 @@ class TradutorJavaScript {
26767
27112
  traduzirConstrutoBinario(binario) {
26768
27113
  let resultado = '';
26769
27114
  if (binario.esquerda.constructor.name === 'Agrupamento')
26770
- resultado += '(' + this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) + ')';
27115
+ resultado +=
27116
+ '(' +
27117
+ this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) +
27118
+ ')';
26771
27119
  else
26772
27120
  resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
26773
27121
  let operador = this.traduzirSimboloOperador(binario.operador);
26774
27122
  resultado += ` ${operador} `;
26775
27123
  if (binario.direita.constructor.name === 'Agrupamento')
26776
- resultado += '(' + this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) + ')';
27124
+ resultado +=
27125
+ '(' +
27126
+ this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) +
27127
+ ')';
26777
27128
  else
26778
27129
  resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
26779
27130
  return resultado;
@@ -26811,7 +27162,8 @@ class TradutorJavaScript {
26811
27162
  for (let i = 0; i < dicionario.chaves.length; i++) {
26812
27163
  resultado += this.dicionarioConstrutos[dicionario.chaves[i].constructor.name](dicionario.chaves[i]);
26813
27164
  resultado += ':';
26814
- resultado += this.dicionarioConstrutos[dicionario.valores[i].constructor.name](dicionario.valores[i]) + ',';
27165
+ resultado +=
27166
+ this.dicionarioConstrutos[dicionario.valores[i].constructor.name](dicionario.valores[i]) + ',';
26815
27167
  }
26816
27168
  resultado += '}';
26817
27169
  return resultado;
@@ -26884,7 +27236,10 @@ class TradutorJavaScript {
26884
27236
  logicaTraducaoMetodoClasse(metodoClasse) {
26885
27237
  this.indentacao += 4;
26886
27238
  let resultado = ' '.repeat(this.indentacao);
26887
- resultado += metodoClasse.simbolo.lexema === 'construtor' ? 'constructor(' : metodoClasse.simbolo.lexema + '(';
27239
+ resultado +=
27240
+ metodoClasse.simbolo.lexema === 'construtor'
27241
+ ? 'constructor('
27242
+ : metodoClasse.simbolo.lexema + '(';
26888
27243
  for (let parametro of metodoClasse.funcao.parametros) {
26889
27244
  resultado += parametro.nome.lexema + ', ';
26890
27245
  }
@@ -26922,7 +27277,10 @@ class TradutorJavaScript {
26922
27277
  resultado += ' '.repeat(this.indentacao);
26923
27278
  if (caminho.condicoes && caminho.condicoes.length > 0) {
26924
27279
  for (let condicao of caminho.condicoes) {
26925
- resultado += 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
27280
+ resultado +=
27281
+ 'case ' +
27282
+ this.dicionarioConstrutos[condicao.constructor.name](condicao) +
27283
+ ':\n';
26926
27284
  resultado += ' '.repeat(this.indentacao);
26927
27285
  }
26928
27286
  }
@@ -26940,7 +27298,8 @@ class TradutorJavaScript {
26940
27298
  this.dicionarioConstrutos[declaracaoRetorna.valor.constructor.name](declaracaoRetorna.valor);
26941
27299
  break;
26942
27300
  default:
26943
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
27301
+ resultado +=
27302
+ this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
26944
27303
  break;
26945
27304
  }
26946
27305
  }
@@ -27074,7 +27433,8 @@ class TradutorJavaScript {
27074
27433
  resultado += ' '.repeat(this.indentacao);
27075
27434
  if (Array.isArray(declaracaoTente.caminhoPegue)) {
27076
27435
  for (let declaracao of declaracaoTente.caminhoPegue) {
27077
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
27436
+ resultado +=
27437
+ this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
27078
27438
  }
27079
27439
  }
27080
27440
  else {
@@ -27088,7 +27448,8 @@ class TradutorJavaScript {
27088
27448
  if (declaracaoTente.caminhoFinalmente !== null) {
27089
27449
  resultado += '\nfinally {\n';
27090
27450
  for (let finalmente of declaracaoTente.caminhoFinalmente) {
27091
- resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
27451
+ resultado +=
27452
+ this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
27092
27453
  }
27093
27454
  resultado += ' '.repeat(this.indentacao);
27094
27455
  resultado += '}';
@@ -28207,7 +28568,8 @@ class TradutorPython {
28207
28568
  case 'texto':
28208
28569
  return `str(${textoArgumentos})`;
28209
28570
  default:
28210
- if (argumentosValidados.length === 0 && !this.classesConhecidas.includes(variavel.simbolo.lexema)) {
28571
+ if (argumentosValidados.length === 0 &&
28572
+ !this.classesConhecidas.includes(variavel.simbolo.lexema)) {
28211
28573
  return `${variavel.simbolo.lexema}`;
28212
28574
  }
28213
28575
  return `${variavel.simbolo.lexema}(${textoArgumentos})`;
@@ -28343,8 +28705,7 @@ class TradutorPython {
28343
28705
  if (Array.isArray(declaracaoPara.inicializador)) {
28344
28706
  for (const declaracaoInicializador of declaracaoPara.inicializador) {
28345
28707
  resultado +=
28346
- this.dicionarioDeclaracoes[declaracaoInicializador.constructor.name](declaracaoInicializador) +
28347
- `\n`;
28708
+ this.dicionarioDeclaracoes[declaracaoInicializador.constructor.name](declaracaoInicializador) + `\n`;
28348
28709
  }
28349
28710
  }
28350
28711
  else {
@@ -28420,7 +28781,8 @@ class TradutorPython {
28420
28781
  resultado += ' '.repeat(this.indentacao);
28421
28782
  if (Array.isArray(declaracaoTente.caminhoPegue)) {
28422
28783
  for (let declaracao of declaracaoTente.caminhoPegue) {
28423
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
28784
+ resultado +=
28785
+ this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
28424
28786
  }
28425
28787
  }
28426
28788
  else {
@@ -28434,7 +28796,8 @@ class TradutorPython {
28434
28796
  resultado += '\nfinally:\n';
28435
28797
  resultado += ' '.repeat(this.indentacao);
28436
28798
  for (let finalmente of declaracaoTente.caminhoFinalmente) {
28437
- resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
28799
+ resultado +=
28800
+ this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
28438
28801
  }
28439
28802
  }
28440
28803
  return resultado;
@@ -28680,7 +29043,8 @@ class TradutorReversoJavaScript {
28680
29043
  let resultado = '';
28681
29044
  let emOuDe = declaracao.type === 'ForInStatement' ? 'em' : 'de';
28682
29045
  resultado += `para (${this.traduzirDeclaracao(declaracao.left)} ${emOuDe} `;
28683
- resultado += this.dicionarioConstrutos[declaracao.right.constructor.name](declaracao.right) + ') ';
29046
+ resultado +=
29047
+ this.dicionarioConstrutos[declaracao.right.constructor.name](declaracao.right) + ') ';
28684
29048
  resultado += this.logicaComumBlocoEscopo(declaracao.body);
28685
29049
  return resultado;
28686
29050
  }