@designliquido/delegua 0.57.2 → 0.58.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 (113) hide show
  1. package/avaliador-sintatico/avaliador-sintatico.d.ts +7 -1
  2. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  3. package/avaliador-sintatico/avaliador-sintatico.js +69 -14
  4. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  5. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +3 -3
  6. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  7. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +26 -10
  8. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  9. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts +23 -0
  10. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -0
  11. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js +199 -0
  12. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -0
  13. package/avaliador-sintatico/elemento-montao-tipos.d.ts.map +1 -1
  14. package/avaliador-sintatico/elemento-montao-tipos.js.map +1 -1
  15. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  16. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  17. package/avaliador-sintatico/montao-tipos.d.ts +1 -1
  18. package/avaliador-sintatico/montao-tipos.d.ts.map +1 -1
  19. package/avaliador-sintatico/montao-tipos.js.map +1 -1
  20. package/avaliador-sintatico/pilha-escopos.d.ts.map +1 -1
  21. package/avaliador-sintatico/pilha-escopos.js.map +1 -1
  22. package/bibliotecas/biblioteca-global.d.ts +7 -0
  23. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  24. package/bibliotecas/biblioteca-global.js +206 -0
  25. package/bibliotecas/biblioteca-global.js.map +1 -1
  26. package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts.map +1 -1
  27. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +8 -2
  28. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
  29. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +169 -0
  30. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -0
  31. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +686 -0
  32. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -0
  33. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts +6 -0
  34. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -0
  35. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js +56 -0
  36. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -0
  37. package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts +6 -0
  38. package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -0
  39. package/bibliotecas/dialetos/pitugues/primitivas-numero.js +84 -0
  40. package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -0
  41. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts +6 -0
  42. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -0
  43. package/bibliotecas/dialetos/pitugues/primitivas-texto.js +254 -0
  44. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -0
  45. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts +6 -0
  46. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -0
  47. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +373 -0
  48. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -0
  49. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  50. package/bibliotecas/primitivas-vetor.js +6 -5
  51. package/bibliotecas/primitivas-vetor.js.map +1 -1
  52. package/bin/package.json +1 -1
  53. package/construtos/elvis.d.ts +2 -2
  54. package/construtos/elvis.d.ts.map +1 -1
  55. package/construtos/elvis.js.map +1 -1
  56. package/construtos/enquanto-como-construto.d.ts +4 -4
  57. package/construtos/fazer-como-construto.d.ts +4 -4
  58. package/construtos/importar-como-construto.d.ts +3 -3
  59. package/construtos/importar-como-construto.d.ts.map +1 -1
  60. package/construtos/importar-como-construto.js.map +1 -1
  61. package/construtos/para-cada-como-construto.d.ts +6 -6
  62. package/construtos/para-como-construto.d.ts +4 -4
  63. package/construtos/se-ternario.d.ts +2 -2
  64. package/formatadores/formatador-pitugues.d.ts.map +1 -1
  65. package/formatadores/formatador-pitugues.js.map +1 -1
  66. package/geracao-identificadores/index.d.ts.map +1 -1
  67. package/geracao-identificadores/index.js.map +1 -1
  68. package/informacao-elemento-sintatico.d.ts +1 -1
  69. package/interfaces/delegua/enquanto-interface.d.ts +2 -2
  70. package/interfaces/delegua/fazer-interface.d.ts +2 -2
  71. package/interfaces/delegua/para-cada-interface.d.ts +2 -2
  72. package/interfaces/delegua/para-interface.d.ts +2 -2
  73. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  74. package/interfaces/visitante-delegua-interface.d.ts +3 -3
  75. package/interfaces/visitante-delegua-interface.d.ts.map +1 -1
  76. package/interpretador/comum.d.ts.map +1 -1
  77. package/interpretador/comum.js +1 -0
  78. package/interpretador/comum.js.map +1 -1
  79. package/interpretador/depuracao/comum.d.ts.map +1 -1
  80. package/interpretador/depuracao/comum.js +6 -3
  81. package/interpretador/depuracao/comum.js.map +1 -1
  82. package/interpretador/dialetos/pitugues/index.d.ts +2 -0
  83. package/interpretador/dialetos/pitugues/index.d.ts.map +1 -0
  84. package/interpretador/dialetos/pitugues/index.js +18 -0
  85. package/interpretador/dialetos/pitugues/index.js.map +1 -0
  86. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +17 -0
  87. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -0
  88. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +248 -0
  89. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -0
  90. package/interpretador/estruturas/classe-de-modulo.d.ts +1 -1
  91. package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
  92. package/interpretador/estruturas/classe-de-modulo.js.map +1 -1
  93. package/interpretador/interpretador-base.d.ts.map +1 -1
  94. package/interpretador/interpretador-base.js +2 -5
  95. package/interpretador/interpretador-base.js.map +1 -1
  96. package/interpretador/interpretador.d.ts +5 -0
  97. package/interpretador/interpretador.d.ts.map +1 -1
  98. package/interpretador/interpretador.js +39 -22
  99. package/interpretador/interpretador.js.map +1 -1
  100. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  101. package/lexador/dialetos/palavras-reservadas/pitugues.d.ts +1 -0
  102. package/lexador/dialetos/palavras-reservadas/pitugues.d.ts.map +1 -1
  103. package/lexador/dialetos/palavras-reservadas/pitugues.js +2 -1
  104. package/lexador/dialetos/palavras-reservadas/pitugues.js.map +1 -1
  105. package/package.json +1 -1
  106. package/quebras/index.d.ts.map +1 -1
  107. package/quebras/index.js.map +1 -1
  108. package/tipos-de-simbolos/pitugues.d.ts.map +1 -1
  109. package/tipos-de-simbolos/pitugues.js.map +1 -1
  110. package/tradutores/tradutor-javascript.js.map +1 -1
  111. package/tradutores/tradutor-python.d.ts.map +1 -1
  112. package/tradutores/tradutor-python.js.map +1 -1
  113. package/umd/delegua.js +354 -60
package/umd/delegua.js CHANGED
@@ -293,6 +293,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
293
293
  this.primitivasConhecidas = {};
294
294
  this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
295
295
  this.montaoTipos = new montao_tipos_1.MontaoTipos();
296
+ this.intuirTipoQualquerParaIdentificadores = false;
296
297
  (0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'dicionário', primitivas_dicionario_1.default);
297
298
  (0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'número', primitivas_numero_1.default);
298
299
  (0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'texto', primitivas_texto_1.default);
@@ -443,6 +444,34 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
443
444
  this.blocos -= 1;
444
445
  }
445
446
  }
447
+ /**
448
+ * Resolve uma lista de compreensão.
449
+ * @returns {ListaCompreensao} A lista de compreensão resolvida.
450
+ */
451
+ resolverCompreensaoDeLista(retornoExpressao) {
452
+ this.consumir(delegua_2.default.PARA, "Esperado instrução 'para' após identificado.");
453
+ this.consumir(delegua_2.default.CADA, "Esperado instrução 'cada' após 'para'.");
454
+ const simboloVariavelIteracao = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
455
+ if (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.DE, delegua_2.default.EM)) {
456
+ throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução em lista de compreensão.");
457
+ }
458
+ const localizacaoVetor = this.simboloAnterior();
459
+ const vetor = this.ou();
460
+ this.consumir(delegua_2.default.SE, "Esperado condição 'se' após vetor.");
461
+ const condicao = this.expressao();
462
+ this.consumir(delegua_2.default.COLCHETE_DIREITO, 'Espero fechamento de colchetes após condição.');
463
+ const tipoVetor = vetor.tipo;
464
+ if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
465
+ throw this.erro(localizacaoVetor, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
466
+ }
467
+ const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao);
468
+ return new construtos_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
469
+ new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
470
+ new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao),
471
+ ]), [], null),
472
+ ])), 'qualquer[]' // TODO: Talvez um dia inferir o tipo aqui.
473
+ );
474
+ }
446
475
  primario() {
447
476
  const simboloAtual = this.simbolos[this.atual];
448
477
  let valores = [];
@@ -458,6 +487,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
458
487
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
459
488
  return this.construtoTupla();
460
489
  }
490
+ // Ao resolver a expressão aqui, identificadores dentro da expressão de compreensão
491
+ // de lista serão tratados como 'qualquer', para evitar erros de tipo.
492
+ this.intuirTipoQualquerParaIdentificadores = true;
493
+ const retornoExpressaoOuPrimeiroValor = this.seTernario();
494
+ this.intuirTipoQualquerParaIdentificadores = false;
495
+ if (this.simbolos[this.atual].tipo === delegua_2.default.PARA) {
496
+ return this.resolverCompreensaoDeLista(retornoExpressaoOuPrimeiroValor);
497
+ }
498
+ // Aqui já sabemos que não é uma compreensão de lista.
499
+ valores.push(retornoExpressaoOuPrimeiroValor);
461
500
  while (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.COLCHETE_DIREITO)) {
462
501
  switch (this.simbolos[this.atual].tipo) {
463
502
  case delegua_2.default.VIRGULA:
@@ -469,7 +508,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
469
508
  valores.push(new construtos_1.ComentarioComoConstruto(simboloComentario));
470
509
  break;
471
510
  default:
472
- const valor = this.atribuir();
511
+ const valor = this.seTernario();
473
512
  valores.push(valor);
474
513
  break;
475
514
  }
@@ -527,7 +566,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
527
566
  case delegua_2.default.IDENTIFICADOR:
528
567
  const simboloIdentificador = this.avancarEDevolverAnterior();
529
568
  let tipoOperando;
530
- if (simboloIdentificador.lexema in this.tiposDefinidosEmCodigo) {
569
+ if (this.intuirTipoQualquerParaIdentificadores) {
570
+ // Esta indicação é utilizada para compreensões de lista, onde o
571
+ // tipo do identificador de iteração é 'qualquer' por definição.
572
+ tipoOperando = 'qualquer';
573
+ this.pilhaEscopos.definirInformacoesVariavel(simboloIdentificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloIdentificador.lexema, 'qualquer') // TODO: Talvez um dia inferir o tipo aqui.
574
+ );
575
+ }
576
+ else if (simboloIdentificador.lexema in this.tiposDefinidosEmCodigo) {
531
577
  tipoOperando = simboloIdentificador.lexema;
532
578
  }
533
579
  else {
@@ -663,7 +709,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
663
709
  const nome = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado nome de método ou propriedade após '.'.");
664
710
  let tipoInferido = expressaoAnterior.tipo;
665
711
  // Se não for um dicionário anônimo (ou seja, ser variável ou constante com nome)
666
- if (expressaoAnterior.tipo === 'dicionário' && expressaoAnterior.constructor !== construtos_1.Dicionario) {
712
+ if (expressaoAnterior.tipo === 'dicionário' &&
713
+ expressaoAnterior.constructor !== construtos_1.Dicionario) {
667
714
  // TODO: Achar algum caso em que aqui não seja variável.
668
715
  const nomeDicionario = expressaoAnterior.simbolo.lexema;
669
716
  const elementoDicionarioPilha = this.pilhaEscopos.obterElementoMontaoTipos(nomeDicionario);
@@ -1082,7 +1129,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1082
1129
  const corpo = this.resolverDeclaracao();
1083
1130
  return {
1084
1131
  condicao,
1085
- corpo
1132
+ corpo,
1086
1133
  };
1087
1134
  }
1088
1135
  declaracaoEnquanto() {
@@ -1187,7 +1234,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1187
1234
  const condicaoEnquanto = this.expressao();
1188
1235
  return {
1189
1236
  caminhoFazer,
1190
- condicaoEnquanto
1237
+ condicaoEnquanto,
1191
1238
  };
1192
1239
  }
1193
1240
  declaracaoFazer(simboloFazer) {
@@ -1218,7 +1265,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1218
1265
  case delegua_2.default.CHAVE_ESQUERDA:
1219
1266
  this.avancarEDevolverAnterior();
1220
1267
  do {
1221
- const identificadorImportacao = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado identificador de elemento a ser importado.");
1268
+ const identificadorImportacao = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado identificador de elemento a ser importado.');
1222
1269
  elementosImportacao.push(identificadorImportacao);
1223
1270
  } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
1224
1271
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após lista de elementos a serem importados.");
@@ -1285,7 +1332,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1285
1332
  nomeVariavelChave,
1286
1333
  nomeVariavelValor,
1287
1334
  dicionario,
1288
- corpo
1335
+ corpo,
1289
1336
  };
1290
1337
  }
1291
1338
  declaracaoParaCadaDicionario(simboloPara) {
@@ -1309,7 +1356,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1309
1356
  }
1310
1357
  }
1311
1358
  const tipoVetor = vetor.tipo;
1312
- if (!tipoVetor.endsWith('[]') && !['dicionário', 'qualquer', 'texto', 'vetor'].includes(tipoVetor)) {
1359
+ if (!tipoVetor.endsWith('[]') &&
1360
+ !['dicionário', 'qualquer', 'texto', 'vetor'].includes(tipoVetor)) {
1313
1361
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
1314
1362
  }
1315
1363
  let tipoVariavelIteracao = 'qualquer';
@@ -1322,7 +1370,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1322
1370
  return {
1323
1371
  variavelIteracao,
1324
1372
  vetor,
1325
- corpo
1373
+ corpo,
1326
1374
  };
1327
1375
  }
1328
1376
  declaracaoParaCadaVetor(simboloPara) {
@@ -1373,7 +1421,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1373
1421
  inicializador,
1374
1422
  condicao,
1375
1423
  incrementar,
1376
- corpo
1424
+ corpo,
1377
1425
  };
1378
1426
  }
1379
1427
  declaracaoParaTradicional(simboloPara) {
@@ -1642,11 +1690,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1642
1690
  if (!tipoCorrespondente) {
1643
1691
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaAcessoMetodoOuPropriedade.simbolo, `Tipo '${entidadeChamadaAcessoMetodoOuPropriedade.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
1644
1692
  }
1645
- if (!(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in tipoCorrespondente.metodos) &&
1646
- !(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in tipoCorrespondente.propriedades)) {
1693
+ if (!(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
1694
+ tipoCorrespondente.metodos) &&
1695
+ !(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
1696
+ tipoCorrespondente.propriedades)) {
1647
1697
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaAcessoMetodoOuPropriedade.simbolo, `Membro '${entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema}' não existe no tipo '${entidadeChamadaAcessoMetodoOuPropriedade.objeto.tipo}'.`);
1648
1698
  }
1649
- if (entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in tipoCorrespondente.metodos) {
1699
+ if (entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
1700
+ tipoCorrespondente.metodos) {
1650
1701
  return tipoCorrespondente.metodos[entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema].tipo;
1651
1702
  }
1652
1703
  return tipoCorrespondente.propriedades[entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema].tipo;
@@ -1713,7 +1764,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1713
1764
  for (var i = 0; i < construto.valores.length; i++) {
1714
1765
  const chaveCorrespondente = this.resolverValorConstruto(construto.chaves[i]);
1715
1766
  const valorCorrespondente = construto.valores[i];
1716
- subElementos[chaveCorrespondente] = this.resolverInformacaoElementoSintaticoDeDicionario(valorCorrespondente);
1767
+ subElementos[chaveCorrespondente] =
1768
+ this.resolverInformacaoElementoSintaticoDeDicionario(valorCorrespondente);
1717
1769
  }
1718
1770
  retorno.subElementos = subElementos;
1719
1771
  const endereco = this.montaoTipos.adicionarReferencia(retorno);
@@ -2066,6 +2118,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2066
2118
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2067
2119
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2068
2120
  ]));
2121
+ this.pilhaEscopos.definirInformacoesVariavel('clonar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('clonar', 'qualquer', true, [
2122
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2123
+ ]));
2069
2124
  this.pilhaEscopos.definirInformacoesVariavel('encontrar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar', 'qualquer', true, [
2070
2125
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2071
2126
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
@@ -3182,7 +3237,6 @@ const primitivas_dicionario_1 = __importDefault(require("../../bibliotecas/primi
3182
3237
  const primitivas_numero_1 = __importDefault(require("../../bibliotecas/primitivas-numero"));
3183
3238
  const primitivas_texto_1 = __importDefault(require("../../bibliotecas/primitivas-texto"));
3184
3239
  const primitivas_vetor_1 = __importDefault(require("../../bibliotecas/primitivas-vetor"));
3185
- const lista_compreensao_1 = require("../../construtos/lista-compreensao");
3186
3240
  /**
3187
3241
  * O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
3188
3242
  * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
@@ -3409,8 +3463,9 @@ class AvaliadorSintaticoPitugues {
3409
3463
  if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
3410
3464
  return new construtos_1.Vetor(this.hashArquivo, simboloAtual.linha, [], 0, 'qualquer[]');
3411
3465
  }
3412
- if (this.simbolos[this.atual].tipo == 'IDENTIFICADOR' && !this.verificarTipoProximoSimbolo(pitugues_2.default.VIRGULA)) {
3413
- return this.resolverListaDeCompreensao();
3466
+ if (this.simbolos[this.atual].tipo == 'IDENTIFICADOR' &&
3467
+ !this.verificarTipoProximoSimbolo(pitugues_2.default.VIRGULA)) {
3468
+ return this.resolverCompreensaoDeLista();
3414
3469
  }
3415
3470
  while (!this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
3416
3471
  const valor = this.atribuir();
@@ -3617,8 +3672,22 @@ class AvaliadorSintaticoPitugues {
3617
3672
  }
3618
3673
  return expressao;
3619
3674
  }
3675
+ seTernario() {
3676
+ let expressaoEntao = this.ou();
3677
+ if (this.simbolos[this.atual] && this.simbolos[this.atual].tipo === pitugues_2.default.SE && expressaoEntao.linha === this.simbolos[this.atual].linha) {
3678
+ while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
3679
+ const operador = this.simbolos[this.atual - 1];
3680
+ const expressaoOuCondicao = this.seTernario();
3681
+ this.consumir(pitugues_2.default.SENAO, `Esperado 'senão' ou 'senao' após caminho positivo em se ternário. Atual:
3682
+ ${this.simbolos[this.atual].lexema}.`);
3683
+ const expressaoSenao = this.seTernario();
3684
+ expressaoEntao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, expressaoEntao, operador, expressaoSenao);
3685
+ }
3686
+ }
3687
+ return expressaoEntao;
3688
+ }
3620
3689
  atribuir() {
3621
- const expressao = this.ou();
3690
+ const expressao = this.seTernario();
3622
3691
  if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.IGUAL) ||
3623
3692
  this.verificarSeSimboloAtualEIgualA(pitugues_2.default.MAIS_IGUAL)) {
3624
3693
  const igual = this.simboloAnterior();
@@ -3981,7 +4050,7 @@ class AvaliadorSintaticoPitugues {
3981
4050
  * Resolve uma lista de compreensão.
3982
4051
  * @returns {ListaCompreensao} A lista de compreensão resolvida.
3983
4052
  */
3984
- resolverListaDeCompreensao() {
4053
+ resolverCompreensaoDeLista() {
3985
4054
  // TODO: Se expressão não começar com um identificador, por exemplo `3 * x`, como faríamos para
3986
4055
  // aceitar o `x` na avaliação da expressão?
3987
4056
  if (this.simbolos[this.atual].tipo === pitugues_2.default.IDENTIFICADOR) {
@@ -3990,7 +4059,8 @@ class AvaliadorSintaticoPitugues {
3990
4059
  this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, 'qualquer') // TODO: Talvez um dia inferir o tipo aqui.
3991
4060
  );
3992
4061
  }
3993
- const retornoExpressao = this.expressao();
4062
+ // TODO: Reavaliar a precedência do se ternário.
4063
+ const retornoExpressao = this.ou();
3994
4064
  this.consumir(pitugues_2.default.PARA, "Esperado instrução 'para' após identificado.");
3995
4065
  this.consumir(pitugues_2.default.CADA, "Esperado instrução 'cada' após 'para'.");
3996
4066
  const simboloVariavelIteracao = this.consumir(pitugues_2.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
@@ -4005,7 +4075,8 @@ class AvaliadorSintaticoPitugues {
4005
4075
  throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução em lista de compreensão.");
4006
4076
  }
4007
4077
  const localizacaoVetor = this.simboloAnterior();
4008
- const vetor = this.expressao();
4078
+ // TODO: Reavaliar a precedência do se ternário.
4079
+ const vetor = this.ou();
4009
4080
  this.consumir(pitugues_2.default.SE, "Esperado condição 'se' após vetor.");
4010
4081
  const condicao = this.expressao();
4011
4082
  this.consumir(pitugues_2.default.COLCHETE_DIREITO, 'Espero fechamento de colchetes após condição.');
@@ -4014,10 +4085,10 @@ class AvaliadorSintaticoPitugues {
4014
4085
  throw this.erro(localizacaoVetor, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
4015
4086
  }
4016
4087
  const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao);
4017
- return new lista_compreensao_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
4088
+ return new construtos_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
4018
4089
  new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
4019
- new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao)
4020
- ]), [], null)
4090
+ new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao),
4091
+ ]), [], null),
4021
4092
  ])), 'qualquer[]' // TODO: Talvez um dia inferir o tipo aqui.
4022
4093
  );
4023
4094
  }
@@ -4241,7 +4312,7 @@ class AvaliadorSintaticoPitugues {
4241
4312
  }
4242
4313
  exports.AvaliadorSintaticoPitugues = AvaliadorSintaticoPitugues;
4243
4314
 
4244
- },{"../../bibliotecas/primitivas-dicionario":21,"../../bibliotecas/primitivas-numero":22,"../../bibliotecas/primitivas-texto":23,"../../bibliotecas/primitivas-vetor":24,"../../construtos":52,"../../construtos/lista-compreensao":55,"../../declaracoes":97,"../../inferenciador":116,"../../informacao-elemento-sintatico":117,"../../lexador":174,"../../tipos-de-dados/dialetos/pitugues":183,"../../tipos-de-simbolos/pitugues":191,"../comum":3,"../erro-avaliador-sintatico":11,"../informacao-escopo":13,"../pilha-escopos":17,"browser-process-hrtime":367}],7:[function(require,module,exports){
4315
+ },{"../../bibliotecas/primitivas-dicionario":21,"../../bibliotecas/primitivas-numero":22,"../../bibliotecas/primitivas-texto":23,"../../bibliotecas/primitivas-vetor":24,"../../construtos":52,"../../declaracoes":97,"../../inferenciador":116,"../../informacao-elemento-sintatico":117,"../../lexador":174,"../../tipos-de-dados/dialetos/pitugues":183,"../../tipos-de-simbolos/pitugues":191,"../comum":3,"../erro-avaliador-sintatico":11,"../informacao-escopo":13,"../pilha-escopos":17,"browser-process-hrtime":367}],7:[function(require,module,exports){
4245
4316
  "use strict";
4246
4317
  var __importDefault = (this && this.__importDefault) || function (mod) {
4247
4318
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -5977,6 +6048,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
5977
6048
  exports.aleatorio = aleatorio;
5978
6049
  exports.aleatorioEntre = aleatorioEntre;
5979
6050
  exports.algum = algum;
6051
+ exports.clonar = clonar;
5980
6052
  exports.encontrar = encontrar;
5981
6053
  exports.encontrarIndice = encontrarIndice;
5982
6054
  exports.encontrarUltimo = encontrarUltimo;
@@ -6083,6 +6155,211 @@ async function algum(interpretador, vetor, funcaoPesquisa) {
6083
6155
  }
6084
6156
  return false;
6085
6157
  }
6158
+ /**
6159
+ * Clona profundamente uma variável ou constante em Delégua.
6160
+ * @param {InterpretadorInterface} interpretador A instância do interpretador.
6161
+ * @param {VariavelInterface | any} valor O valor a ser clonado.
6162
+ * @returns {Promise<any>} Uma cópia profunda do valor fornecido.
6163
+ */
6164
+ async function clonar(interpretador, valor) {
6165
+ // Resolver o valor caso seja uma VariavelInterface
6166
+ // Verificar se é null/undefined antes de usar hasOwnProperty
6167
+ let valorResolvido;
6168
+ if (valor === null || valor === undefined) {
6169
+ valorResolvido = valor;
6170
+ }
6171
+ else if (typeof valor === 'object' && valor.hasOwnProperty('valor')) {
6172
+ valorResolvido = valor.valor;
6173
+ }
6174
+ else {
6175
+ valorResolvido = valor;
6176
+ }
6177
+ // Map para evitar referências circulares
6178
+ const visitados = new WeakMap();
6179
+ function clonarProfundo(valorAtual) {
6180
+ var _a;
6181
+ // Valores primitivos (null, undefined, number, string, boolean)
6182
+ if (valorAtual === null || valorAtual === undefined) {
6183
+ return valorAtual;
6184
+ }
6185
+ if (typeof valorAtual !== 'object') {
6186
+ return valorAtual;
6187
+ }
6188
+ // Verificar se já visitamos este objeto (evitar referências circulares)
6189
+ if (visitados.has(valorAtual)) {
6190
+ return visitados.get(valorAtual);
6191
+ }
6192
+ // Arrays
6193
+ if (Array.isArray(valorAtual)) {
6194
+ const arrayClonado = [];
6195
+ visitados.set(valorAtual, arrayClonado);
6196
+ for (let i = 0; i < valorAtual.length; i++) {
6197
+ arrayClonado[i] = clonarProfundo(valorAtual[i]);
6198
+ }
6199
+ return arrayClonado;
6200
+ }
6201
+ // Objetos de Delégua - ObjetoDeleguaClasse
6202
+ if (valorAtual instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
6203
+ // Clonar propriedades do objeto
6204
+ const propriedadesClonadas = {};
6205
+ visitados.set(valorAtual, propriedadesClonadas);
6206
+ for (const chave in valorAtual.propriedades) {
6207
+ if (valorAtual.propriedades.hasOwnProperty(chave)) {
6208
+ propriedadesClonadas[chave] = clonarProfundo(valorAtual.propriedades[chave]);
6209
+ }
6210
+ }
6211
+ // Criar novo objeto com as propriedades clonadas
6212
+ // Nota: A classe em si não é clonada, apenas suas propriedades
6213
+ const objetoClonado = new objeto_delegua_classe_1.ObjetoDeleguaClasse(valorAtual.classe);
6214
+ objetoClonado.propriedades = propriedadesClonadas;
6215
+ return objetoClonado;
6216
+ }
6217
+ // Tuplas
6218
+ const nomeClasseTupla = (_a = valorAtual.constructor) === null || _a === void 0 ? void 0 : _a.name;
6219
+ if (nomeClasseTupla &&
6220
+ /^(Dupla|Trio|Quarteto|Quinteto|Sexteto|Septeto|Octeto|Noneto|Deceto)$/.test(nomeClasseTupla)) {
6221
+ const valoresClonados = [];
6222
+ visitados.set(valorAtual, valoresClonados);
6223
+ // Extrair valores da tupla baseado no tipo
6224
+ let valores = [];
6225
+ switch (nomeClasseTupla) {
6226
+ case 'Dupla':
6227
+ valores = [valorAtual.primeiro, valorAtual.segundo];
6228
+ break;
6229
+ case 'Trio':
6230
+ valores = [valorAtual.primeiro, valorAtual.segundo, valorAtual.terceiro];
6231
+ break;
6232
+ case 'Quarteto':
6233
+ valores = [
6234
+ valorAtual.primeiro,
6235
+ valorAtual.segundo,
6236
+ valorAtual.terceiro,
6237
+ valorAtual.quarto,
6238
+ ];
6239
+ break;
6240
+ case 'Quinteto':
6241
+ valores = [
6242
+ valorAtual.primeiro,
6243
+ valorAtual.segundo,
6244
+ valorAtual.terceiro,
6245
+ valorAtual.quarto,
6246
+ valorAtual.quinto,
6247
+ ];
6248
+ break;
6249
+ case 'Sexteto':
6250
+ valores = [
6251
+ valorAtual.primeiro,
6252
+ valorAtual.segundo,
6253
+ valorAtual.terceiro,
6254
+ valorAtual.quarto,
6255
+ valorAtual.quinto,
6256
+ valorAtual.sexto,
6257
+ ];
6258
+ break;
6259
+ case 'Septeto':
6260
+ valores = [
6261
+ valorAtual.primeiro,
6262
+ valorAtual.segundo,
6263
+ valorAtual.terceiro,
6264
+ valorAtual.quarto,
6265
+ valorAtual.quinto,
6266
+ valorAtual.sexto,
6267
+ valorAtual.setimo,
6268
+ ];
6269
+ break;
6270
+ case 'Octeto':
6271
+ valores = [
6272
+ valorAtual.primeiro,
6273
+ valorAtual.segundo,
6274
+ valorAtual.terceiro,
6275
+ valorAtual.quarto,
6276
+ valorAtual.quinto,
6277
+ valorAtual.sexto,
6278
+ valorAtual.setimo,
6279
+ valorAtual.oitavo,
6280
+ ];
6281
+ break;
6282
+ case 'Noneto':
6283
+ valores = [
6284
+ valorAtual.primeiro,
6285
+ valorAtual.segundo,
6286
+ valorAtual.terceiro,
6287
+ valorAtual.quarto,
6288
+ valorAtual.quinto,
6289
+ valorAtual.sexto,
6290
+ valorAtual.setimo,
6291
+ valorAtual.oitavo,
6292
+ valorAtual.nono,
6293
+ ];
6294
+ break;
6295
+ case 'Deceto':
6296
+ valores = [
6297
+ valorAtual.primeiro,
6298
+ valorAtual.segundo,
6299
+ valorAtual.terceiro,
6300
+ valorAtual.quarto,
6301
+ valorAtual.quinto,
6302
+ valorAtual.sexto,
6303
+ valorAtual.setimo,
6304
+ valorAtual.oitavo,
6305
+ valorAtual.nono,
6306
+ valorAtual.decimo,
6307
+ ];
6308
+ break;
6309
+ default:
6310
+ // Se não conseguir identificar, tentar extrair valores diretamente
6311
+ if (valorAtual.valor) {
6312
+ valores = Array.isArray(valorAtual.valor)
6313
+ ? valorAtual.valor
6314
+ : [valorAtual.valor];
6315
+ }
6316
+ }
6317
+ // Clonar valores
6318
+ for (let i = 0; i < valores.length; i++) {
6319
+ valoresClonados.push(clonarProfundo(valores[i]));
6320
+ }
6321
+ // Recriar a tupla com valores clonados
6322
+ switch (nomeClasseTupla) {
6323
+ case 'Dupla':
6324
+ return new construtos_1.Dupla(valoresClonados[0], valoresClonados[1]);
6325
+ case 'Trio':
6326
+ return new construtos_1.Trio(valoresClonados[0], valoresClonados[1], valoresClonados[2]);
6327
+ case 'Quarteto':
6328
+ return new construtos_1.Quarteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3]);
6329
+ case 'Quinteto':
6330
+ return new construtos_1.Quinteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4]);
6331
+ case 'Sexteto':
6332
+ return new construtos_1.Sexteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5]);
6333
+ case 'Septeto':
6334
+ return new construtos_1.Septeto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6]);
6335
+ case 'Octeto':
6336
+ return new construtos_1.Octeto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7]);
6337
+ case 'Noneto':
6338
+ return new construtos_1.Noneto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7], valoresClonados[8]);
6339
+ case 'Deceto':
6340
+ return new construtos_1.Deceto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7], valoresClonados[8], valoresClonados[9]);
6341
+ default:
6342
+ // Se não conseguir recriar, retornar os valores clonados como array
6343
+ return valoresClonados;
6344
+ }
6345
+ }
6346
+ // DeleguaFuncao e FuncaoPadrao - funções não são clonadas profundamente
6347
+ // Elas mantêm referência à mesma definição, mas isso é comportamento esperado
6348
+ if (valorAtual instanceof estruturas_1.DeleguaFuncao || valorAtual instanceof funcao_padrao_1.FuncaoPadrao) {
6349
+ return valorAtual;
6350
+ }
6351
+ // Objetos simples (plain objects)
6352
+ const objetoClonado = {};
6353
+ visitados.set(valorAtual, objetoClonado);
6354
+ for (const chave in valorAtual) {
6355
+ if (valorAtual.hasOwnProperty(chave)) {
6356
+ objetoClonado[chave] = clonarProfundo(valorAtual[chave]);
6357
+ }
6358
+ }
6359
+ return objetoClonado;
6360
+ }
6361
+ return Promise.resolve(clonarProfundo(valorResolvido));
6362
+ }
6086
6363
  /**
6087
6364
  * Encontra o primeiro elemento de um vetor cuja função de pesquisa retorne
6088
6365
  * verdadeiro na avaliação de cada elemento.
@@ -7067,7 +7344,7 @@ exports.default = {
7067
7344
  ],
7068
7345
  implementacao: (interpretador, nomePrimitiva, vetor, elemento) => {
7069
7346
  vetor.push(elemento);
7070
- // TODO: Será que apenas isso é suficiente aqui?
7347
+ // TODO: Será que apenas isso é suficiente aqui?
7071
7348
  if (nomePrimitiva !== '') {
7072
7349
  interpretador.pilhaEscoposExecucao.atribuirVariavel({ lexema: nomePrimitiva }, vetor);
7073
7350
  }
@@ -7139,7 +7416,9 @@ exports.default = {
7139
7416
  return Promise.resolve(elementos);
7140
7417
  }
7141
7418
  else {
7142
- elementos = !itens.length ? vetor.splice(posicaoInicial) : vetor.splice(posicaoInicial, ...itens);
7419
+ elementos = !itens.length
7420
+ ? vetor.splice(posicaoInicial)
7421
+ : vetor.splice(posicaoInicial, ...itens);
7143
7422
  if (nomePrimitiva !== '') {
7144
7423
  interpretador.pilhaEscoposExecucao.atribuirVariavel({ lexema: nomePrimitiva }, elementos);
7145
7424
  }
@@ -7230,7 +7509,7 @@ exports.default = {
7230
7509
  'escreva(v.inclui(2)) // verdadeiro\n' +
7231
7510
  'escreva(v.inclui(4)) // falso\n```' +
7232
7511
  '\n\n ### Formas de uso \n',
7233
- exemploCodigo: 'vetor.inclui(elemento)'
7512
+ exemploCodigo: 'vetor.inclui(elemento)',
7234
7513
  },
7235
7514
  inverter: {
7236
7515
  tipoRetorno: 'qualquer[]',
@@ -7258,8 +7537,7 @@ exports.default = {
7258
7537
  '\n\n```delegua\nvar v = [1, 2, 3]\n' +
7259
7538
  'escreva(v.juntar(":")) // "1:2:3"\n```' +
7260
7539
  '\n\n ### Formas de uso \n',
7261
- exemploCodigo: 'vetor.juntar()\n' +
7262
- 'vetor.juntar(<separador>)',
7540
+ exemploCodigo: 'vetor.juntar()\n' + 'vetor.juntar(<separador>)',
7263
7541
  },
7264
7542
  mapear: {
7265
7543
  tipoRetorno: 'qualquer[]',
@@ -11052,6 +11330,7 @@ function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
11052
11330
  pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
11053
11331
  pilhaEscoposExecucao.definirVariavel('aleatorioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
11054
11332
  pilhaEscoposExecucao.definirVariavel('algum', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.algum));
11333
+ pilhaEscoposExecucao.definirVariavel('clonar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.clonar));
11055
11334
  pilhaEscoposExecucao.definirVariavel('encontrar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrar));
11056
11335
  pilhaEscoposExecucao.definirVariavel('encontrarIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
11057
11336
  pilhaEscoposExecucao.definirVariavel('encontrarUltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
@@ -11701,7 +11980,6 @@ const metodo_primitiva_1 = require("./estruturas/metodo-primitiva");
11701
11980
  const lexador_1 = require("../lexador");
11702
11981
  const avaliador_sintatico_1 = require("../avaliador-sintatico");
11703
11982
  const espaco_memoria_1 = require("./espaco-memoria");
11704
- const comum_1 = require("./comum");
11705
11983
  const excecoes_1 = require("../excecoes");
11706
11984
  const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
11707
11985
  const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
@@ -11757,7 +12035,6 @@ class InterpretadorBase {
11757
12035
  emLacoRepeticao: false,
11758
12036
  };
11759
12037
  this.pilhaEscoposExecucao.empilhar(escopoExecucao);
11760
- (0, comum_1.carregarBibliotecasGlobais)(this.pilhaEscoposExecucao);
11761
12038
  }
11762
12039
  visitarExpressaoSeparador(expressao) {
11763
12040
  throw new Error('Método não implementado.');
@@ -12433,8 +12710,7 @@ class InterpretadorBase {
12433
12710
  // para vetor de duplas.
12434
12711
  // TODO: Converter elementos para `Construto` se necessário.
12435
12712
  if (declaracao.vetorOuDicionario.tipo === 'dicionário') {
12436
- valorVetorResolvido = Object.entries(valorVetorResolvido)
12437
- .map(v => new construtos_1.Dupla(v[0], v[1]));
12713
+ valorVetorResolvido = Object.entries(valorVetorResolvido).map((v) => new construtos_1.Dupla(v[0], v[1]));
12438
12714
  }
12439
12715
  if (!Array.isArray(valorVetorResolvido)) {
12440
12716
  return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
@@ -12864,7 +13140,7 @@ class InterpretadorBase {
12864
13140
  const funcao = new estruturas_1.DeleguaFuncao(declaracao.simbolo.lexema, declaracao.funcao);
12865
13141
  this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, funcao);
12866
13142
  return Promise.resolve({
12867
- declaracao: funcao
13143
+ declaracao: funcao,
12868
13144
  });
12869
13145
  }
12870
13146
  /**
@@ -13216,7 +13492,7 @@ class InterpretadorBase {
13216
13492
  exports.InterpretadorBase = InterpretadorBase;
13217
13493
 
13218
13494
  }).call(this)}).call(this,require('_process'))
13219
- },{"../avaliador-sintatico":12,"../bibliotecas/primitivas-dicionario":21,"../construtos":52,"../excecoes":110,"../inferenciador":116,"../lexador":174,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"../tipos-de-simbolos/delegua":187,"./comum":142,"./espaco-memoria":143,"./estruturas":150,"./estruturas/metodo-primitiva":151,"./pilha-escopos-execucao":160,"_process":421,"browser-process-hrtime":367}],158:[function(require,module,exports){
13495
+ },{"../avaliador-sintatico":12,"../bibliotecas/primitivas-dicionario":21,"../construtos":52,"../excecoes":110,"../inferenciador":116,"../lexador":174,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"../tipos-de-simbolos/delegua":187,"./espaco-memoria":143,"./estruturas":150,"./estruturas/metodo-primitiva":151,"./pilha-escopos-execucao":160,"_process":421,"browser-process-hrtime":367}],158:[function(require,module,exports){
13220
13496
  "use strict";
13221
13497
  var __importDefault = (this && this.__importDefault) || function (mod) {
13222
13498
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -13231,6 +13507,7 @@ const excecoes_1 = require("../excecoes");
13231
13507
  const declaracoes_1 = require("../declaracoes");
13232
13508
  const quebras_1 = require("../quebras");
13233
13509
  const montao_1 = require("./montao");
13510
+ const comum_1 = require("./comum");
13234
13511
  const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
13235
13512
  const primitivas_numero_1 = __importDefault(require("../bibliotecas/primitivas-numero"));
13236
13513
  const primitivas_texto_1 = __importDefault(require("../bibliotecas/primitivas-texto"));
@@ -13244,6 +13521,14 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13244
13521
  constructor(diretorioBase, performance = false, funcaoDeRetorno = null, funcaoDeRetornoMesmaLinha = null) {
13245
13522
  super(diretorioBase, performance, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
13246
13523
  this.montao = new montao_1.Montao();
13524
+ this.pontoInicializacaoBibliotecasGlobais();
13525
+ }
13526
+ /**
13527
+ * Cada dialeto que deriva deste interpretador conhece este ponto de inicialização.
13528
+ * A partir daqui, cada dialeto pode carregar as bibliotecas globais específicas do seu dialeto.
13529
+ */
13530
+ pontoInicializacaoBibliotecasGlobais() {
13531
+ (0, comum_1.carregarBibliotecasGlobais)(this.pilhaEscoposExecucao);
13247
13532
  }
13248
13533
  resolverReferenciaMontao(referenciaMontao) {
13249
13534
  const valorMontao = this.montao.obterReferencia(this.hashArquivoDeclaracaoAtual, this.linhaDeclaracaoAtual, referenciaMontao.endereco);
@@ -13294,8 +13579,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13294
13579
  }
13295
13580
  if (objeto.valor instanceof estruturas_1.ObjetoPadrao)
13296
13581
  return objeto.valor.paraTexto();
13297
- if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
13298
- objeto instanceof estruturas_1.DeleguaFuncao)
13582
+ if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao)
13299
13583
  return objeto.paraTexto();
13300
13584
  if (objeto instanceof quebras_1.RetornoQuebra) {
13301
13585
  if (typeof objeto.valor === 'boolean')
@@ -13333,7 +13617,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13333
13617
  if (typeof valor === primitivos_1.default.BOOLEANO) {
13334
13618
  valor = valor ? 'verdadeiro' : 'falso';
13335
13619
  }
13336
- if (valor instanceof estruturas_1.ReferenciaMontao || ((valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty) && (valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty('tipo')))) {
13620
+ if (valor instanceof estruturas_1.ReferenciaMontao ||
13621
+ ((valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty) && (valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty('tipo')))) {
13337
13622
  valor = this.resolverValor(valor);
13338
13623
  }
13339
13624
  objetoEscrita[propriedade] = valor;
@@ -13372,13 +13657,14 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13372
13657
  return Promise.resolve({
13373
13658
  tipo: `função<${funcao.declaracao.tipo || 'qualquer'}>`,
13374
13659
  tipoExplicito: funcao.declaracao.tipoExplicito,
13375
- declaracao: funcao
13660
+ declaracao: funcao,
13376
13661
  });
13377
13662
  }
13378
13663
  async logicaComumExecucaoEnquanto(enquanto, acumularRetornos) {
13379
13664
  let retornoExecucao;
13380
13665
  const retornos = [];
13381
- while ((acumularRetornos || !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13666
+ while ((acumularRetornos ||
13667
+ !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13382
13668
  this.eVerdadeiro(await this.avaliar(enquanto.condicao))) {
13383
13669
  try {
13384
13670
  retornoExecucao = await this.executar(enquanto.corpo);
@@ -13386,7 +13672,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13386
13672
  if (acumularRetornos) {
13387
13673
  return {
13388
13674
  valorRetornado: retornos,
13389
- tipo: 'vetor'
13675
+ tipo: 'vetor',
13390
13676
  };
13391
13677
  }
13392
13678
  return null;
@@ -13410,7 +13696,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13410
13696
  if (acumularRetornos) {
13411
13697
  return {
13412
13698
  valorRetornado: retornos,
13413
- tipo: 'vetor'
13699
+ tipo: 'vetor',
13414
13700
  };
13415
13701
  }
13416
13702
  return retornoExecucao;
@@ -13428,7 +13714,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13428
13714
  if (acumularRetornos) {
13429
13715
  return {
13430
13716
  valorRetornado: retornos,
13431
- tipo: 'vetor'
13717
+ tipo: 'vetor',
13432
13718
  };
13433
13719
  }
13434
13720
  return null;
@@ -13448,12 +13734,13 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13448
13734
  });
13449
13735
  return Promise.reject(erro);
13450
13736
  }
13451
- } while ((acumularRetornos || !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13737
+ } while ((acumularRetornos ||
13738
+ !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13452
13739
  this.eVerdadeiro(await this.avaliar(fazer.condicaoEnquanto)));
13453
13740
  if (acumularRetornos) {
13454
13741
  return {
13455
13742
  valorRetornado: retornos,
13456
- tipo: 'vetor'
13743
+ tipo: 'vetor',
13457
13744
  };
13458
13745
  }
13459
13746
  }
@@ -13469,9 +13756,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13469
13756
  }
13470
13757
  let retornoExecucao;
13471
13758
  const retornos = [];
13472
- while (acumularRetornos || !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) {
13473
- if (para.condicao !== null &&
13474
- !this.eVerdadeiro(await this.avaliar(para.condicao))) {
13759
+ while (acumularRetornos ||
13760
+ !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) {
13761
+ if (para.condicao !== null && !this.eVerdadeiro(await this.avaliar(para.condicao))) {
13475
13762
  break;
13476
13763
  }
13477
13764
  retornoExecucao = await this.executar(para.corpo);
@@ -13479,7 +13766,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13479
13766
  if (acumularRetornos) {
13480
13767
  return {
13481
13768
  valorRetornado: retornos,
13482
- tipo: 'vetor'
13769
+ tipo: 'vetor',
13483
13770
  };
13484
13771
  }
13485
13772
  return null;
@@ -13497,7 +13784,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13497
13784
  if (acumularRetornos) {
13498
13785
  return {
13499
13786
  valorRetornado: retornos,
13500
- tipo: 'vetor'
13787
+ tipo: 'vetor',
13501
13788
  };
13502
13789
  }
13503
13790
  return retornoExecucao;
@@ -13518,14 +13805,16 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13518
13805
  if (paraCada.vetorOuDicionario.tipo === 'dicionário') {
13519
13806
  valorVetorOuDicionarioResolvido = Object.entries(valorVetorOuDicionarioResolvido).map((v) => new construtos_1.Dupla(v[0], v[1]));
13520
13807
  }
13521
- if (paraCada.vetorOuDicionario.tipo === 'texto' || typeof valorVetorOuDicionarioResolvido === 'string') {
13808
+ if (paraCada.vetorOuDicionario.tipo === 'texto' ||
13809
+ typeof valorVetorOuDicionarioResolvido === 'string') {
13522
13810
  valorVetorOuDicionarioResolvido = valorVetorOuDicionarioResolvido.split('');
13523
13811
  }
13524
13812
  if (!Array.isArray(valorVetorOuDicionarioResolvido)) {
13525
13813
  return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
13526
13814
  }
13527
13815
  const retornos = [];
13528
- while ((acumularRetornos || !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13816
+ while ((acumularRetornos ||
13817
+ !(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
13529
13818
  paraCada.posicaoAtual < valorVetorOuDicionarioResolvido.length) {
13530
13819
  try {
13531
13820
  if (paraCada.variavelIteracao instanceof construtos_1.Variavel) {
@@ -13541,7 +13830,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13541
13830
  if (acumularRetornos) {
13542
13831
  return {
13543
13832
  valorRetornado: retornos,
13544
- tipo: 'vetor'
13833
+ tipo: 'vetor',
13545
13834
  };
13546
13835
  }
13547
13836
  return null;
@@ -13566,7 +13855,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
13566
13855
  if (acumularRetornos) {
13567
13856
  return {
13568
13857
  valorRetornado: retornos,
13569
- tipo: 'vetor'
13858
+ tipo: 'vetor',
13570
13859
  };
13571
13860
  }
13572
13861
  return retornoExecucao;
@@ -14024,7 +14313,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
14024
14313
  return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
14025
14314
  }
14026
14315
  const resultadoCompreensao = await this.avaliar(listaCompreensao.paraCada);
14027
- const resultadoCompreensaoResolvido = resultadoCompreensao.valorRetornado.filter(r => r !== null).map(r => this.resolverValor(r));
14316
+ const resultadoCompreensaoResolvido = resultadoCompreensao.valorRetornado
14317
+ .filter((r) => r !== null)
14318
+ .map((r) => this.resolverValor(r));
14028
14319
  return resultadoCompreensaoResolvido;
14029
14320
  }
14030
14321
  visitarExpressaoPara(expressao) {
@@ -14159,7 +14450,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
14159
14450
  escopoAnterior.espacoMemoria.valores = Object.assign(escopoAnterior.espacoMemoria.valores, ultimoEscopo.espacoMemoria.valores);
14160
14451
  escopoAnterior.espacoMemoria.enderecosMontao = new Set([
14161
14452
  ...escopoAnterior.espacoMemoria.enderecosMontao,
14162
- ...ultimoEscopo.espacoMemoria.enderecosMontao
14453
+ ...ultimoEscopo.espacoMemoria.enderecosMontao,
14163
14454
  ]);
14164
14455
  }
14165
14456
  else {
@@ -14179,7 +14470,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
14179
14470
  const resultados = await super.interpretar(declaracoes, manterAmbiente);
14180
14471
  if (resultados.resultado.length > 0) {
14181
14472
  const ultimoResultado = resultados.resultado[resultados.resultado.length - 1];
14182
- if (ultimoResultado && ultimoResultado.valorRetornado instanceof quebras_1.RetornoQuebra && ultimoResultado.valorRetornado.valor instanceof estruturas_1.ReferenciaMontao) {
14473
+ if (ultimoResultado &&
14474
+ ultimoResultado.valorRetornado instanceof quebras_1.RetornoQuebra &&
14475
+ ultimoResultado.valorRetornado.valor instanceof estruturas_1.ReferenciaMontao) {
14183
14476
  const ultimaDeclaracao = declaracoes[declaracoes.length - 1];
14184
14477
  ultimoResultado.valorRetornado.valor = this.montao.obterReferencia(ultimaDeclaracao.hashArquivo, ultimaDeclaracao.linha, ultimoResultado.valorRetornado.valor.endereco);
14185
14478
  }
@@ -14189,7 +14482,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
14189
14482
  }
14190
14483
  exports.Interpretador = Interpretador;
14191
14484
 
14192
- },{"../bibliotecas/primitivas-dicionario":21,"../bibliotecas/primitivas-numero":22,"../bibliotecas/primitivas-texto":23,"../bibliotecas/primitivas-vetor":24,"../construtos":52,"../declaracoes":97,"../excecoes":110,"../inferenciador":116,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"./estruturas":150,"./interpretador-base":157,"./montao":159}],159:[function(require,module,exports){
14485
+ },{"../bibliotecas/primitivas-dicionario":21,"../bibliotecas/primitivas-numero":22,"../bibliotecas/primitivas-texto":23,"../bibliotecas/primitivas-vetor":24,"../construtos":52,"../declaracoes":97,"../excecoes":110,"../inferenciador":116,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"./comum":142,"./estruturas":150,"./interpretador-base":157,"./montao":159}],159:[function(require,module,exports){
14193
14486
  "use strict";
14194
14487
  Object.defineProperty(exports, "__esModule", { value: true });
14195
14488
  exports.Montao = void 0;
@@ -16369,13 +16662,14 @@ exports.palavrasReservadas = {
16369
16662
  nulo: pitugues_1.default.NULO,
16370
16663
  ou: pitugues_1.default.OU,
16371
16664
  padrao: pitugues_1.default.PADRAO,
16665
+ padrão: pitugues_1.default.PADRAO,
16372
16666
  para: pitugues_1.default.PARA,
16373
16667
  pegue: pitugues_1.default.PEGUE,
16374
16668
  quebrar: pitugues_1.default.QUEBRAR,
16375
16669
  retorna: pitugues_1.default.RETORNA,
16376
16670
  se: pitugues_1.default.SE,
16377
16671
  senao: pitugues_1.default.SENAO,
16378
- senão: pitugues_1.default.SENÃO,
16672
+ senão: pitugues_1.default.SENAO,
16379
16673
  super: pitugues_1.default.SUPER,
16380
16674
  sustar: pitugues_1.default.SUSTAR,
16381
16675
  tendo: pitugues_1.default.TENDO,