@designliquido/delegua 1.9.0 → 1.11.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 (80) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico-base.js +6 -0
  3. package/analisador-semantico/analisador-semantico-base.js.map +1 -1
  4. package/analisador-semantico/analisador-semantico.d.ts +11 -3
  5. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  6. package/analisador-semantico/analisador-semantico.js +109 -8
  7. package/analisador-semantico/analisador-semantico.js.map +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico.d.ts +8 -1
  9. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  10. package/avaliador-sintatico/avaliador-sintatico.js +274 -115
  11. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +1 -1
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +1 -1
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  18. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  19. package/bibliotecas/primitivas-texto.js +69 -0
  20. package/bibliotecas/primitivas-texto.js.map +1 -1
  21. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  22. package/bibliotecas/primitivas-vetor.js +18 -0
  23. package/bibliotecas/primitivas-vetor.js.map +1 -1
  24. package/bin/package.json +2 -2
  25. package/construtos/isto.d.ts +1 -0
  26. package/construtos/isto.d.ts.map +1 -1
  27. package/construtos/isto.js +1 -0
  28. package/construtos/isto.js.map +1 -1
  29. package/declaracoes/classe.d.ts +5 -2
  30. package/declaracoes/classe.d.ts.map +1 -1
  31. package/declaracoes/classe.js +13 -4
  32. package/declaracoes/classe.js.map +1 -1
  33. package/declaracoes/extensao.d.ts +13 -0
  34. package/declaracoes/extensao.d.ts.map +1 -0
  35. package/declaracoes/extensao.js +26 -0
  36. package/declaracoes/extensao.js.map +1 -0
  37. package/declaracoes/index.d.ts +1 -0
  38. package/declaracoes/index.d.ts.map +1 -1
  39. package/declaracoes/index.js +1 -0
  40. package/declaracoes/index.js.map +1 -1
  41. package/interfaces/visitante-delegua-interface.d.ts +2 -1
  42. package/interfaces/visitante-delegua-interface.d.ts.map +1 -1
  43. package/interpretador/comum.d.ts.map +1 -1
  44. package/interpretador/comum.js +10 -0
  45. package/interpretador/comum.js.map +1 -1
  46. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  47. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -0
  48. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  49. package/interpretador/estruturas/delegua-funcao.d.ts +3 -2
  50. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  51. package/interpretador/estruturas/delegua-funcao.js +26 -2
  52. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  53. package/interpretador/estruturas/descritor-tipo-classe.d.ts +14 -4
  54. package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
  55. package/interpretador/estruturas/descritor-tipo-classe.js +89 -29
  56. package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
  57. package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
  58. package/interpretador/estruturas/objeto-base.js +8 -4
  59. package/interpretador/estruturas/objeto-base.js.map +1 -1
  60. package/interpretador/estruturas/objeto-delegua-classe.d.ts +1 -0
  61. package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
  62. package/interpretador/estruturas/objeto-delegua-classe.js +35 -21
  63. package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
  64. package/interpretador/interpretador-base.d.ts +13 -1
  65. package/interpretador/interpretador-base.d.ts.map +1 -1
  66. package/interpretador/interpretador-base.js +146 -29
  67. package/interpretador/interpretador-base.js.map +1 -1
  68. package/interpretador/interpretador.d.ts.map +1 -1
  69. package/interpretador/interpretador.js +77 -15
  70. package/interpretador/interpretador.js.map +1 -1
  71. package/lexador/palavras-reservadas.d.ts +3 -0
  72. package/lexador/palavras-reservadas.d.ts.map +1 -1
  73. package/lexador/palavras-reservadas.js +3 -0
  74. package/lexador/palavras-reservadas.js.map +1 -1
  75. package/package.json +2 -2
  76. package/tipos-de-simbolos/delegua.d.ts +2 -0
  77. package/tipos-de-simbolos/delegua.d.ts.map +1 -1
  78. package/tipos-de-simbolos/delegua.js +2 -0
  79. package/tipos-de-simbolos/delegua.js.map +1 -1
  80. package/umd/delegua.js +1296 -609
@@ -68,6 +68,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
68
68
  if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
69
69
  return this.simbolos[this.atual].lexema;
70
70
  }
71
+ if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
72
+ return this.simbolos[this.atual].lexema;
73
+ }
71
74
  const lexemaElementar = this.simbolos[this.atual].lexema.toLowerCase();
72
75
  const tipoElementarResolvido = tipos.find((tipo) => tipo === lexemaElementar);
73
76
  if (!tipoElementarResolvido) {
@@ -436,55 +439,61 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
436
439
  }
437
440
  if (construto.constructor === construtos_1.AcessoMetodoOuPropriedade) {
438
441
  const construtoTipado = construto;
439
- switch (construtoTipado.tipo) {
440
- case delegua_1.default.DICIONARIO:
441
- case delegua_1.default.DICIONÁRIO:
442
- if (!(construtoTipado.simbolo.lexema in primitivas_dicionario_1.default)) {
443
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de dicionário.`);
444
- }
445
- const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
446
- construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
447
- break;
448
- case delegua_1.default.INTEIRO:
449
- case delegua_1.default.NUMERO:
450
- case delegua_1.default.NÚMERO:
451
- if (!(construtoTipado.simbolo.lexema in primitivas_numero_1.default)) {
452
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de número.`);
453
- }
454
- const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
455
- construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
456
- break;
457
- case delegua_1.default.TEXTO:
458
- if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
459
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
460
- }
461
- const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
462
- construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
463
- break;
464
- case delegua_1.default.VETOR:
465
- case delegua_1.default.VETOR_NUMERO:
466
- case delegua_1.default.VETOR_NÚMERO:
467
- case delegua_1.default.VETOR_TEXTO:
468
- if (!(construtoTipado.simbolo.lexema in primitivas_vetor_1.default)) {
469
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de vetor.`);
470
- }
471
- const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
472
- construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
473
- break;
474
- default:
475
- if (construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
476
- const tipoCorrespondente = this.tiposDefinidosEmCodigo[construtoTipado.tipo];
477
- const possivelMetodo = tipoCorrespondente.metodos.filter((m) => m.simbolo.lexema === construtoTipado.simbolo.lexema);
478
- if (possivelMetodo.length > 0) {
479
- construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, possivelMetodo[0].tipo);
480
- break;
442
+ const acessoMetodoConhecido = this.resolverAcessoMetodoConhecido(construtoTipado);
443
+ if (acessoMetodoConhecido) {
444
+ construto = acessoMetodoConhecido;
445
+ }
446
+ else {
447
+ switch (construtoTipado.tipo) {
448
+ case delegua_1.default.DICIONARIO:
449
+ case delegua_1.default.DICIONÁRIO:
450
+ if (!(construtoTipado.simbolo.lexema in primitivas_dicionario_1.default)) {
451
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de dicionário.`);
481
452
  }
482
- const possivelPropriedade = tipoCorrespondente.propriedades.filter((p) => p.nome.lexema === construtoTipado.simbolo.lexema);
483
- if (possivelPropriedade.length > 0) {
484
- construto = new construtos_1.AcessoPropriedade(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, possivelPropriedade[0].tipo);
485
- break;
453
+ const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
454
+ construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
455
+ break;
456
+ case delegua_1.default.INTEIRO:
457
+ case delegua_1.default.NUMERO:
458
+ case delegua_1.default.NÚMERO:
459
+ if (!(construtoTipado.simbolo.lexema in primitivas_numero_1.default)) {
460
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de número.`);
486
461
  }
487
- }
462
+ const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
463
+ construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
464
+ break;
465
+ case delegua_1.default.TEXTO:
466
+ if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
467
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
468
+ }
469
+ const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
470
+ construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
471
+ break;
472
+ case delegua_1.default.VETOR:
473
+ case delegua_1.default.VETOR_NUMERO:
474
+ case delegua_1.default.VETOR_NÚMERO:
475
+ case delegua_1.default.VETOR_TEXTO:
476
+ if (!(construtoTipado.simbolo.lexema in primitivas_vetor_1.default)) {
477
+ throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de vetor.`);
478
+ }
479
+ const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
480
+ construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
481
+ break;
482
+ default:
483
+ if (construtoTipado.tipo in this.tiposDefinidosEmCodigo) {
484
+ const tipoCorrespondente = this.tiposDefinidosEmCodigo[construtoTipado.tipo];
485
+ const possivelMetodo = tipoCorrespondente.metodos.filter((m) => m.simbolo.lexema === construtoTipado.simbolo.lexema);
486
+ if (possivelMetodo.length > 0) {
487
+ construto = new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, possivelMetodo[0].tipo);
488
+ break;
489
+ }
490
+ const possivelPropriedade = tipoCorrespondente.propriedades.filter((p) => p.nome.lexema === construtoTipado.simbolo.lexema);
491
+ if (possivelPropriedade.length > 0) {
492
+ construto = new construtos_1.AcessoPropriedade(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, possivelPropriedade[0].tipo);
493
+ break;
494
+ }
495
+ }
496
+ }
488
497
  }
489
498
  }
490
499
  return new construtos_1.TipoDe(this.hashArquivo, simboloAtual, construto);
@@ -620,22 +629,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
620
629
  */
621
630
  resolverEntidadeChamadaAcessoMetodoOuPropriedade(entidadeChamadaResolvida) {
622
631
  const construtoTipado = entidadeChamadaResolvida;
632
+ const acessoMetodoConhecido = this.resolverAcessoMetodoConhecido(construtoTipado);
633
+ if (acessoMetodoConhecido) {
634
+ return acessoMetodoConhecido;
635
+ }
623
636
  switch (entidadeChamadaResolvida.tipo) {
624
637
  case delegua_1.default.DICIONARIO:
625
638
  case delegua_1.default.DICIONÁRIO:
626
- if (!(construtoTipado.simbolo.lexema in primitivas_dicionario_1.default)) {
627
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de dicionário.`);
639
+ if (construtoTipado.simbolo.lexema in primitivas_dicionario_1.default) {
640
+ const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
641
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
628
642
  }
629
- const primitivaDicionarioSelecionada = primitivas_dicionario_1.default[construtoTipado.simbolo.lexema];
630
- return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaDicionarioSelecionada.tipoRetorno);
643
+ break;
631
644
  case delegua_1.default.INTEIRO:
632
645
  case delegua_1.default.NUMERO:
633
646
  case delegua_1.default.NÚMERO:
634
- if (!(construtoTipado.simbolo.lexema in primitivas_numero_1.default)) {
635
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de número.`);
647
+ if (construtoTipado.simbolo.lexema in primitivas_numero_1.default) {
648
+ const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
649
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
636
650
  }
637
- const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
638
- return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
651
+ break;
639
652
  case delegua_1.default.MODULO:
640
653
  case delegua_1.default.MÓDULO:
641
654
  // Há dois casos para resolução de módulo:
@@ -648,23 +661,62 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
648
661
  }
649
662
  return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema);
650
663
  case delegua_1.default.TEXTO:
651
- if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
652
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
664
+ if (construtoTipado.simbolo.lexema in primitivas_texto_1.default) {
665
+ const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
666
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
653
667
  }
654
- const primitivaTextoSelecionada = primitivas_texto_1.default[construtoTipado.simbolo.lexema];
655
- return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaTextoSelecionada.tipoRetorno);
668
+ break;
656
669
  case delegua_1.default.VETOR:
657
670
  case delegua_1.default.VETOR_NUMERO:
658
671
  case delegua_1.default.VETOR_NÚMERO:
659
672
  case delegua_1.default.VETOR_TEXTO:
660
- if (!(construtoTipado.simbolo.lexema in primitivas_vetor_1.default)) {
661
- throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de vetor.`);
673
+ if (construtoTipado.simbolo.lexema in primitivas_vetor_1.default) {
674
+ const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
675
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
662
676
  }
663
- const primitivaVetorSelecionada = primitivas_vetor_1.default[construtoTipado.simbolo.lexema];
664
- return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaVetorSelecionada.tipoRetorno);
677
+ break;
665
678
  }
666
679
  return entidadeChamadaResolvida;
667
680
  }
681
+ obterTiposParaConsultaPrimitiva(tipo) {
682
+ switch (tipo) {
683
+ case delegua_1.default.DICIONARIO:
684
+ case delegua_1.default.DICIONÁRIO:
685
+ return ['dicionário'];
686
+ case delegua_1.default.INTEIRO:
687
+ case delegua_1.default.NUMERO:
688
+ case delegua_1.default.NÚMERO:
689
+ case delegua_1.default.REAL:
690
+ return ['número'];
691
+ case delegua_1.default.TEXTO:
692
+ return ['texto'];
693
+ case delegua_1.default.VETOR:
694
+ case delegua_1.default.VETOR_INTEIRO:
695
+ case delegua_1.default.VETOR_LOGICO:
696
+ case delegua_1.default.VETOR_LÓGICO:
697
+ case delegua_1.default.VETOR_NUMERO:
698
+ case delegua_1.default.VETOR_NÚMERO:
699
+ case delegua_1.default.VETOR_QUALQUER:
700
+ case delegua_1.default.VETOR_TEXTO:
701
+ return ['vetor'];
702
+ default:
703
+ return [tipo];
704
+ }
705
+ }
706
+ resolverAcessoMetodoConhecido(construtoTipado) {
707
+ const tiposParaConsulta = this.obterTiposParaConsultaPrimitiva(construtoTipado.tipo);
708
+ for (const tipoConsulta of tiposParaConsulta) {
709
+ const primitivasPorTipo = this.primitivasConhecidas[tipoConsulta];
710
+ if (!primitivasPorTipo) {
711
+ continue;
712
+ }
713
+ const informacoesPrimitiva = primitivasPorTipo[construtoTipado.simbolo.lexema];
714
+ if (informacoesPrimitiva) {
715
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, informacoesPrimitiva.tipo);
716
+ }
717
+ }
718
+ return null;
719
+ }
668
720
  validarArgumentosEntidadeChamada(argumentosEntidadeChamada, argumentosUtilizados) {
669
721
  if (argumentosEntidadeChamada.length === 0) {
670
722
  return [];
@@ -1965,11 +2017,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1965
2017
  // como em `MinhaClasse.propriedadeEstatica` dentro de métodos.
1966
2018
  this.tiposDefinidosEmCodigo[simbolo.lexema] = (_a = this.tiposDefinidosEmCodigo[simbolo.lexema]) !== null && _a !== void 0 ? _a : {};
1967
2019
  const pilhaDecoradoresClasse = Array.from(this.pilhaDecoradores);
1968
- let superClasse = null;
2020
+ // Verificar `herda SuperclasseA, SuperclasseB`
2021
+ const superClasses = [];
1969
2022
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.HERDA)) {
1970
- const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
1971
- this.superclasseAtual = simboloSuperclasse.lexema;
1972
- superClasse = new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema);
2023
+ do {
2024
+ const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
2025
+ if (superClasses.length === 0) {
2026
+ this.superclasseAtual = simboloSuperclasse.lexema;
2027
+ }
2028
+ superClasses.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema));
2029
+ } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
1973
2030
  }
1974
2031
  // Verificar `implementa InterfaceA, InterfaceB`
1975
2032
  const implementaInterfaces = [];
@@ -1978,16 +2035,24 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1978
2035
  implementaInterfaces.push(this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de interface após "implementa".'));
1979
2036
  } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
1980
2037
  }
2038
+ // Verificar `mescla MisturávelA, MisturávelB`
2039
+ const mesclas = [];
2040
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.MESCLA)) {
2041
+ do {
2042
+ const simboloMisturavel = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de classe após "mescla".');
2043
+ mesclas.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloMisturavel.lexema));
2044
+ } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
2045
+ }
1981
2046
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
1982
2047
  this.pilhaDecoradores = [];
1983
2048
  const metodos = [];
1984
2049
  const propriedades = [];
1985
2050
  /**
1986
2051
  * Analisa membros do corpo da classe com um contexto de acesso e estático padrão.
1987
- * Suporta blocos de contexto aninhados: `estático { }`, `privado { }`, `protegido { }`, `publico { }`.
2052
+ * Suporta blocos de contexto aninhados: `estático { }`, `abstrato { }`, `privado { }`, `protegido { }`, `publico { }`.
1988
2053
  */
1989
- const compreenderMembros = async (acessoPadrao, ehEstaticoPadrao) => {
1990
- var _a, _b;
2054
+ const compreenderMembros = async (acessoPadrao, ehEstaticoPadrao, ehAbstratoPadrao = false) => {
2055
+ var _a;
1991
2056
  while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
1992
2057
  // Pular comentários normais dentro do corpo da classe.
1993
2058
  if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
@@ -2009,57 +2074,36 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2009
2074
  // Detecção de bloco de contexto: modificador seguido de '{'
2010
2075
  const tipoAtual = this.simbolos[this.atual].tipo;
2011
2076
  const tipoProximo = (_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo;
2012
- const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO, delegua_2.default.PUBLICO].includes(tipoAtual)
2077
+ const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual)
2013
2078
  && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2014
2079
  const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO
2015
2080
  && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2081
+ const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO
2082
+ && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2016
2083
  if (ehBlocoAcesso) {
2017
- const novoAcesso = tipoAtual === delegua_2.default.PRIVADO ? 'privado' :
2018
- tipoAtual === delegua_2.default.PROTEGIDO ? 'protegido' : 'publico';
2084
+ const novoAcesso = tipoAtual === delegua_2.default.PRIVADO ? 'privado' : 'protegido';
2019
2085
  this.avancarEDevolverAnterior(); // consume modificador de acesso
2020
2086
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' após modificador de acesso de bloco.");
2021
- await compreenderMembros(novoAcesso, ehEstaticoPadrao);
2087
+ await compreenderMembros(novoAcesso, ehEstaticoPadrao, ehAbstratoPadrao);
2022
2088
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' para fechar bloco de modificador de acesso.");
2023
2089
  continue;
2024
2090
  }
2025
2091
  if (ehBlocoEstatico) {
2026
2092
  this.avancarEDevolverAnterior(); // consume 'estático'
2027
2093
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' após 'estático'.");
2028
- await compreenderMembros(acessoPadrao, true);
2094
+ await compreenderMembros(acessoPadrao, true, ehAbstratoPadrao);
2029
2095
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' para fechar bloco estático.");
2030
2096
  continue;
2031
2097
  }
2032
- // Modificador de acesso por membro (somente quando NÃO seguido de '{')
2033
- let modificadorAcesso = acessoPadrao;
2034
- if (this.simbolos[this.atual].tipo === delegua_2.default.PRIVADO) {
2035
- this.avancarEDevolverAnterior();
2036
- modificadorAcesso = 'privado';
2037
- }
2038
- else if (this.simbolos[this.atual].tipo === delegua_2.default.PROTEGIDO) {
2039
- this.avancarEDevolverAnterior();
2040
- modificadorAcesso = 'protegido';
2041
- }
2042
- else if (this.simbolos[this.atual].tipo === delegua_2.default.PUBLICO) {
2043
- this.avancarEDevolverAnterior();
2044
- modificadorAcesso = 'publico';
2045
- }
2046
- // Modificador estático por membro (somente quando NÃO seguido de '{')
2047
- let ehEstatico = ehEstaticoPadrao;
2048
- if (this.simbolos[this.atual].tipo === delegua_2.default.ESTATICO &&
2049
- ((_b = this.simbolos[this.atual + 1]) === null || _b === void 0 ? void 0 : _b.tipo) !== delegua_2.default.CHAVE_ESQUERDA) {
2050
- this.avancarEDevolverAnterior();
2051
- ehEstatico = true;
2052
- }
2053
- // Palavras-chave de acessor (obter/definir)
2054
- let eObtenedor = false;
2055
- let eDefinidor = false;
2056
- if (this.simbolos[this.atual].tipo === delegua_2.default.IDENTIFICADOR &&
2057
- ['obter', 'definir', 'obtenedor', 'definidor', 'get', 'set'].includes(String(this.simbolos[this.atual].lexema || '').toLowerCase())) {
2058
- const palavraAcessor = String(this.simbolos[this.atual].lexema || '').toLowerCase();
2059
- this.avancarEDevolverAnterior();
2060
- eObtenedor = palavraAcessor === 'obter' || palavraAcessor === 'obtenedor' || palavraAcessor === 'get';
2061
- eDefinidor = palavraAcessor === 'definir' || palavraAcessor === 'definidor' || palavraAcessor === 'set';
2098
+ if (ehBlocoAbstrato) {
2099
+ this.avancarEDevolverAnterior(); // consume 'abstrato'
2100
+ this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' após 'abstrato'.");
2101
+ await compreenderMembros(acessoPadrao, ehEstaticoPadrao, true);
2102
+ this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' para fechar bloco abstrato.");
2103
+ continue;
2062
2104
  }
2105
+ const modificadorAcesso = acessoPadrao;
2106
+ const ehEstatico = ehEstaticoPadrao;
2063
2107
  // Método operador sobrecarregado: `operador+ (outro) { ... }`
2064
2108
  if (this.simbolos[this.atual].tipo === delegua_2.default.OPERADOR) {
2065
2109
  const simboloOperadorKeyword = this.avancarEDevolverAnterior();
@@ -2103,12 +2147,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2103
2147
  params = await this.logicaComumParametros();
2104
2148
  }
2105
2149
  this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do método.");
2106
- // O modificador `abstrato` vem APÓS o fechamento dos parâmetros.
2107
- // Sintaxe: `area() abstrato: numero`
2108
- let ehAbstrato = false;
2109
- if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.ABSTRATO)) {
2110
- ehAbstrato = true;
2111
- }
2150
+ const ehAbstrato = ehAbstratoPadrao;
2112
2151
  // Tipo de retorno opcional (igual a corpoDaFuncao())
2113
2152
  let tipoRetorno = 'qualquer';
2114
2153
  let definicaoExplicitaDeTipo = false;
@@ -2152,8 +2191,6 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2152
2191
  const tipoDaFuncao = `função<${tipoRetorno}>`;
2153
2192
  const metodo = new declaracoes_1.FuncaoDeclaracao(nomeMetodo, corpoFuncao, tipoDaFuncao);
2154
2193
  metodo.estatico = ehEstatico;
2155
- metodo.eObtenedor = eObtenedor;
2156
- metodo.eDefinidor = eDefinidor;
2157
2194
  metodo.acesso = modificadorAcesso;
2158
2195
  metodo.decoradores = Array.from(this.pilhaDecoradores);
2159
2196
  metodo.documentacao = docAtual;
@@ -2168,7 +2205,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2168
2205
  const nomePropriedade = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado identificador para nome de propriedade.');
2169
2206
  this.consumir(delegua_2.default.DOIS_PONTOS, 'Esperado dois-pontos após nome de propriedade.');
2170
2207
  const tipoPropriedade = this.avancarEDevolverAnterior();
2171
- const prop = new declaracoes_1.PropriedadeClasse(nomePropriedade, tipoPropriedade.lexema, Array.from(this.pilhaDecoradores), modificadorAcesso, ehEstatico);
2208
+ let nomeTipoPropriedade = tipoPropriedade.lexema;
2209
+ if (this.verificarTipoSimboloAtual(delegua_2.default.COLCHETE_ESQUERDO)) {
2210
+ this.avancarEDevolverAnterior(); // consume '['
2211
+ this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após '[' na definição do tipo de propriedade.");
2212
+ nomeTipoPropriedade = `${nomeTipoPropriedade}[]`;
2213
+ }
2214
+ const prop = new declaracoes_1.PropriedadeClasse(nomePropriedade, nomeTipoPropriedade, Array.from(this.pilhaDecoradores), modificadorAcesso, ehEstatico);
2172
2215
  prop.documentacao = docAtual;
2173
2216
  // Auto-propriedade: `nome: tipo { obter; definir; }`
2174
2217
  // Ou corpo personalizado: `nome: tipo { obter() { ... } definir(valor) { ... } }`
@@ -2275,11 +2318,83 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2275
2318
  }
2276
2319
  }
2277
2320
  }
2278
- const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstatica, implementaInterfaces);
2321
+ const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasses, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstatica, implementaInterfaces, mesclas);
2279
2322
  this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
2280
2323
  this.superclasseAtual = undefined;
2281
2324
  return definicaoClasse;
2282
2325
  }
2326
+ /**
2327
+ * Analisa uma declaração de extensão:
2328
+ * `extensão [global] de <tipo> { <métodos> }`
2329
+ */
2330
+ async declaracaoDeExtensao() {
2331
+ let ehGlobal = false;
2332
+ if (this.simbolos[this.atual].tipo === delegua_2.default.IDENTIFICADOR &&
2333
+ this.simbolos[this.atual].lexema === 'global') {
2334
+ this.avancarEDevolverAnterior();
2335
+ ehGlobal = true;
2336
+ }
2337
+ this.consumir(delegua_2.default.DE, "Esperado 'de' após 'extensão'.");
2338
+ const simboloTipo = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado nome do tipo após 'de'.");
2339
+ this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' após o nome do tipo.");
2340
+ const metodos = [];
2341
+ const nomeTipo = simboloTipo.lexema;
2342
+ if (!this.primitivasConhecidas[nomeTipo]) {
2343
+ this.primitivasConhecidas[nomeTipo] = {};
2344
+ }
2345
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2346
+ // Pular comentários dentro do corpo da extensão.
2347
+ if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
2348
+ this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
2349
+ this.avancarEDevolverAnterior();
2350
+ continue;
2351
+ }
2352
+ // Apenas métodos são suportados em extensões.
2353
+ const proximoSimbolo = this.simbolos[this.atual + 1];
2354
+ if ((proximoSimbolo === null || proximoSimbolo === void 0 ? void 0 : proximoSimbolo.tipo) !== delegua_2.default.PARENTESE_ESQUERDO) {
2355
+ throw this.erro(this.simbolos[this.atual], 'Esperado declaração de método na extensão.');
2356
+ }
2357
+ const nomeMetodo = this.avancarEDevolverAnterior();
2358
+ this.consumir(delegua_2.default.PARENTESE_ESQUERDO, "Esperado '(' após nome do método.");
2359
+ let params = [];
2360
+ if (!this.verificarTipoSimboloAtual(delegua_2.default.PARENTESE_DIREITO)) {
2361
+ params = await this.logicaComumParametros();
2362
+ }
2363
+ this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do método.");
2364
+ let tipoRetorno = 'qualquer';
2365
+ let definicaoExplicitaDeTipo = false;
2366
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.DOIS_PONTOS)) {
2367
+ tipoRetorno = this.verificarDefinicaoTipoAtual();
2368
+ this.avancarEDevolverAnterior();
2369
+ definicaoExplicitaDeTipo = true;
2370
+ }
2371
+ this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
2372
+ const corpo = await this.blocoEscopo();
2373
+ let expressoesRetorna = [];
2374
+ for (const declaracao of corpo) {
2375
+ expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
2376
+ }
2377
+ const tiposRetornos = new Set(expressoesRetorna.filter((e) => e.tipo !== 'qualquer').map((e) => e.tipo));
2378
+ const retornaChamadoExplicitamente = tiposRetornos.size > 0;
2379
+ tiposRetornos.delete('qualquer');
2380
+ if (tipoRetorno === 'qualquer') {
2381
+ if (tiposRetornos.size > 0) {
2382
+ tipoRetorno = tiposRetornos.values().next().value;
2383
+ }
2384
+ else if (!retornaChamadoExplicitamente && !definicaoExplicitaDeTipo) {
2385
+ tipoRetorno = 'vazio';
2386
+ }
2387
+ }
2388
+ const corpoFuncao = new construtos_1.FuncaoConstruto(this.hashArquivo, nomeMetodo.linha, params, corpo, tipoRetorno);
2389
+ const tipoDaFuncao = `função<${tipoRetorno}>`;
2390
+ const metodo = new declaracoes_1.FuncaoDeclaracao(nomeMetodo, corpoFuncao, tipoDaFuncao);
2391
+ metodos.push(metodo);
2392
+ const argumentos = params.map((parametro) => new informacao_elemento_sintatico_1.InformacaoElementoSintatico(parametro.nome.lexema, parametro.tipoDado || 'qualquer', parametro.valorPadrao === undefined));
2393
+ this.primitivasConhecidas[nomeTipo][nomeMetodo.lexema] = new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeMetodo.lexema, tipoRetorno, true, argumentos);
2394
+ }
2395
+ this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' ao final da extensão.");
2396
+ return new declaracoes_1.Extensao(simboloTipo, metodos, ehGlobal, this.hashArquivo);
2397
+ }
2283
2398
  /**
2284
2399
  * Declarações fora de bloco precisam ser verificadas primeiro por
2285
2400
  * uma série de motivos, como, por exemplo:
@@ -2317,6 +2432,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2317
2432
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.INTERFACE)) {
2318
2433
  return await this.declaracaoDeInterface();
2319
2434
  }
2435
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.EXTENSAO)) {
2436
+ return await this.declaracaoDeExtensao();
2437
+ }
2320
2438
  return await this.resolverDeclaracao();
2321
2439
  }
2322
2440
  catch (erro) {
@@ -2470,10 +2588,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2470
2588
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
2471
2589
  // Funções nativas de Delégua
2472
2590
  this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
2591
+ this.pilhaEscopos.definirInformacoesVariavel('aleatório', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatório', 'número'));
2473
2592
  this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorioEntre', 'número', true, [
2474
2593
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
2475
2594
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
2476
2595
  ]));
2596
+ this.pilhaEscopos.definirInformacoesVariavel('aleatórioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatórioEntre', 'número', true, [
2597
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
2598
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
2599
+ ]));
2477
2600
  this.pilhaEscopos.definirInformacoesVariavel('algum', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('algum', 'lógico', true, [
2478
2601
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2479
2602
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
@@ -2489,14 +2612,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2489
2612
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2490
2613
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2491
2614
  ]));
2615
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÍndice', 'inteiro', true, [
2616
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2617
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2618
+ ]));
2492
2619
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimo', 'inteiro', true, [
2493
2620
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2494
2621
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2495
2622
  ]));
2623
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimo', 'inteiro', true, [
2624
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2625
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2626
+ ]));
2496
2627
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimoIndice', 'inteiro', true, [
2497
2628
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2498
2629
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2499
2630
  ]));
2631
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimoÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimoÍndice', 'inteiro', true, [
2632
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2633
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2634
+ ]));
2500
2635
  this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrarPor', 'qualquer[]', true, [
2501
2636
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2502
2637
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
@@ -2505,6 +2640,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2505
2640
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2506
2641
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2507
2642
  ]));
2643
+ this.pilhaEscopos.definirInformacoesVariavel('incluído', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('incluído', 'lógico', true, [
2644
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2645
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2646
+ ]));
2508
2647
  this.pilhaEscopos.definirInformacoesVariavel('inteiro', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('inteiro', 'inteiro', true, [
2509
2648
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2510
2649
  ]));
@@ -2520,6 +2659,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2520
2659
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2521
2660
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoMapeamento', 'função'),
2522
2661
  ]));
2662
+ this.pilhaEscopos.definirInformacoesVariavel('maximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'qualquer', true, [
2663
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2664
+ ]));
2665
+ this.pilhaEscopos.definirInformacoesVariavel('máximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('máximo', 'qualquer', true, [
2666
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2667
+ ]));
2668
+ this.pilhaEscopos.definirInformacoesVariavel('minimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'qualquer', true, [
2669
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2670
+ ]));
2671
+ this.pilhaEscopos.definirInformacoesVariavel('mínimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('mínimo', 'qualquer', true, [
2672
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2673
+ ]));
2523
2674
  this.pilhaEscopos.definirInformacoesVariavel('numero', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('número', 'número', true, [
2524
2675
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2525
2676
  ]));
@@ -2538,6 +2689,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2538
2689
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2539
2690
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
2540
2691
  ]));
2692
+ this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiroEmCondição', 'qualquer', true, [
2693
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2694
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
2695
+ ]));
2541
2696
  this.pilhaEscopos.definirInformacoesVariavel('real', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('real', 'número', true, [
2542
2697
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2543
2698
  ]));
@@ -2559,6 +2714,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2559
2714
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2560
2715
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
2561
2716
  ]));
2717
+ this.pilhaEscopos.definirInformacoesVariavel('todosEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondição', 'lógico', true, [
2718
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2719
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
2720
+ ]));
2562
2721
  this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'tupla', true, [
2563
2722
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2564
2723
  ]));