@designliquido/delegua 0.39.8 → 0.40.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 (27) hide show
  1. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +2 -1
  2. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  3. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  4. package/avaliador-sintatico/avaliador-sintatico.d.ts +8 -3
  5. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  6. package/avaliador-sintatico/avaliador-sintatico.js +51 -63
  7. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  8. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  9. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +2 -2
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +2 -2
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  14. package/bin/package.json +1 -1
  15. package/declaracoes/importar.d.ts +6 -2
  16. package/declaracoes/importar.d.ts.map +1 -1
  17. package/declaracoes/importar.js +6 -2
  18. package/declaracoes/importar.js.map +1 -1
  19. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  20. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +5 -1
  21. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  22. package/package.json +1 -1
  23. package/tipos-de-dados/delegua.d.ts +2 -0
  24. package/tipos-de-dados/delegua.d.ts.map +1 -1
  25. package/tipos-de-dados/delegua.js +2 -0
  26. package/tipos-de-dados/delegua.js.map +1 -1
  27. package/umd/delegua.js +63 -69
package/umd/delegua.js CHANGED
@@ -433,32 +433,6 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
433
433
  throw this.erro(this.simbolos[this.atual], "'Super' usado fora de declaração de classe com herança.");
434
434
  }
435
435
  return new construtos_1.Super(this.hashArquivo, simboloSuper, this.superclasseAtual);
436
- /* Se o próximo símbolo for uma abertura de parênteses, significa que
437
- // é uma chamada ao construtor da classe ancestral (superclasse).
438
- // Se o próximo símbolo for um ponto, significa que é uma chamada
439
- // a um método da superclasse.
440
- switch (this.simbolos[this.atual].tipo) {
441
- case tiposDeSimbolos.PARENTESE_ESQUERDO:
442
- return new Super(
443
- this.hashArquivo,
444
- simboloSuper,
445
- new Simbolo(
446
- tiposDeSimbolos.IDENTIFICADOR,
447
- 'construtor',
448
- null,
449
- simboloSuper.linha,
450
- this.hashArquivo
451
- )
452
- );
453
- default:
454
- this.consumir(tiposDeSimbolos.PONTO, "Esperado '.' após 'super'.");
455
- const metodoSuperclasse = this.consumir(
456
- tiposDeSimbolos.IDENTIFICADOR,
457
- 'Esperado nome do método da Superclasse.'
458
- );
459
- // TODO: Validar se o método existe no ancestral.
460
- return new Super(this.hashArquivo, simboloSuper, metodoSuperclasse);
461
- } */
462
436
  case delegua_2.default.VERDADEIRO:
463
437
  this.avancarEDevolverAnterior();
464
438
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), true, 'lógico');
@@ -591,6 +565,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
591
565
  }
592
566
  const primitivaNumeroSelecionada = primitivas_numero_1.default[construtoTipado.simbolo.lexema];
593
567
  return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
568
+ case delegua_1.default.MODULO:
569
+ case delegua_1.default.MÓDULO:
570
+ if (construtoTipado.simbolo.lexema in this.tiposDefinidosEmCodigo) {
571
+ // Construtor de classe.
572
+ return new construtos_1.Variavel(construtoTipado.hashArquivo, construtoTipado.simbolo, construtoTipado.objeto.tipo);
573
+ }
574
+ return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema);
594
575
  case delegua_1.default.TEXTO:
595
576
  if (!(construtoTipado.simbolo.lexema in primitivas_texto_1.default)) {
596
577
  throw this.erro(construtoTipado.simbolo, `${construtoTipado.simbolo.lexema} não é uma primitiva de texto.`);
@@ -795,41 +776,6 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
795
776
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
796
777
  return declaracoes;
797
778
  }
798
- declaracaoEnquanto() {
799
- try {
800
- this.blocos += 1;
801
- const condicao = this.expressao();
802
- const corpo = this.resolverDeclaracao();
803
- return new declaracoes_1.Enquanto(condicao, corpo);
804
- }
805
- finally {
806
- this.blocos -= 1;
807
- }
808
- }
809
- declaracaoEscreva() {
810
- const simboloAtual = this.simbolos[this.atual];
811
- this.consumir(delegua_2.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
812
- const argumentos = [];
813
- if (!this.verificarTipoSimboloAtual(delegua_2.default.PARENTESE_DIREITO)) {
814
- do {
815
- argumentos.push(this.expressao());
816
- } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
817
- }
818
- this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
819
- // Ponto-e-vírgula é opcional aqui.
820
- this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
821
- return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
822
- }
823
- declaracaoExpressao() {
824
- // Se há decoradores a serem adicionados aqui, obtemo-los agora,
825
- // para evitar que outros passos recursivos peguem-los antes.
826
- const decoradores = Array.from(this.pilhaDecoradores);
827
- this.pilhaDecoradores = [];
828
- const expressao = this.expressao();
829
- // Ponto-e-vírgula é opcional aqui.
830
- this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
831
- return new declaracoes_1.Expressao(expressao, decoradores);
832
- }
833
779
  declaracaoComentarioMultilinha() {
834
780
  let simboloComentario;
835
781
  const conteudos = [];
@@ -851,6 +797,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
851
797
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
852
798
  return new declaracoes_1.Continua(this.simbolos[this.atual - 1]);
853
799
  }
800
+ declaracaoEnquanto() {
801
+ try {
802
+ this.blocos += 1;
803
+ const condicao = this.expressao();
804
+ const corpo = this.resolverDeclaracao();
805
+ return new declaracoes_1.Enquanto(condicao, corpo);
806
+ }
807
+ finally {
808
+ this.blocos -= 1;
809
+ }
810
+ }
854
811
  declaracaoEscolha() {
855
812
  try {
856
813
  this.blocos += 1;
@@ -908,6 +865,30 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
908
865
  this.blocos -= 1;
909
866
  }
910
867
  }
868
+ declaracaoEscreva() {
869
+ const simboloAtual = this.simbolos[this.atual];
870
+ this.consumir(delegua_2.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
871
+ const argumentos = [];
872
+ if (!this.verificarTipoSimboloAtual(delegua_2.default.PARENTESE_DIREITO)) {
873
+ do {
874
+ argumentos.push(this.expressao());
875
+ } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
876
+ }
877
+ this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
878
+ // Ponto-e-vírgula é opcional aqui.
879
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
880
+ return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
881
+ }
882
+ declaracaoExpressao() {
883
+ // Se há decoradores a serem adicionados aqui, obtemo-los agora,
884
+ // para evitar que outros passos recursivos peguem-los antes.
885
+ const decoradores = Array.from(this.pilhaDecoradores);
886
+ this.pilhaDecoradores = [];
887
+ const expressao = this.expressao();
888
+ // Ponto-e-vírgula é opcional aqui.
889
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
890
+ return new declaracoes_1.Expressao(expressao, decoradores);
891
+ }
911
892
  declaracaoFalhar() {
912
893
  const simboloFalha = this.simbolos[this.atual - 1];
913
894
  return new declaracoes_1.Falhar(simboloFalha, this.declaracaoExpressao().expressao);
@@ -925,11 +906,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
925
906
  this.blocos -= 1;
926
907
  }
927
908
  }
909
+ /**
910
+ * O símbolo é emitido aqui para fins de formatação, mas este método é
911
+ * sobrescrito em `delegua-node`.
912
+ * @returns {Importar} Uma declaração `Importar`.
913
+ */
928
914
  declaracaoImportar() {
929
915
  this.consumir(delegua_2.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
930
916
  const caminho = this.expressao();
931
- const simboloFechamento = this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
932
- return new declaracoes_1.Importar(caminho, simboloFechamento);
917
+ this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
918
+ return new declaracoes_1.Importar(caminho);
933
919
  }
934
920
  /**
935
921
  * Declaração para comando `leia`, para ler dados de entrada do usuário.
@@ -1616,6 +1602,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1616
1602
  this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
1617
1603
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
1618
1604
  // Funções nativas de Delégua
1605
+ this.pilhaEscopos.definirTipoVariavel('aleatorio', 'inteiro');
1606
+ this.pilhaEscopos.definirTipoVariavel('aleatorioEntre', 'inteiro');
1619
1607
  this.pilhaEscopos.definirTipoVariavel('filtrarPor', 'qualquer[]');
1620
1608
  this.pilhaEscopos.definirTipoVariavel('inteiro', 'inteiro');
1621
1609
  this.pilhaEscopos.definirTipoVariavel('mapear', 'qualquer[]');
@@ -2160,8 +2148,8 @@ class AvaliadorSintaticoEguaClassico {
2160
2148
  declaracaoImportar() {
2161
2149
  this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
2162
2150
  const caminho = this.expressao();
2163
- const simboloFechamento = this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
2164
- return new declaracoes_1.Importar(caminho, simboloFechamento);
2151
+ this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
2152
+ return new declaracoes_1.Importar(caminho);
2165
2153
  }
2166
2154
  declaracaoTente() {
2167
2155
  this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'tente'.");
@@ -2870,8 +2858,8 @@ class AvaliadorSintaticoPitugues {
2870
2858
  declaracaoImportar() {
2871
2859
  this.consumir(pitugues_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
2872
2860
  const caminho = this.expressao();
2873
- const simboloFechamento = this.consumir(pitugues_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
2874
- return new declaracoes_1.Importar(caminho, simboloFechamento);
2861
+ this.consumir(pitugues_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
2862
+ return new declaracoes_1.Importar(caminho);
2875
2863
  }
2876
2864
  declaracaoTente() {
2877
2865
  const simboloTente = this.simboloAnterior();
@@ -5698,11 +5686,15 @@ exports.FuncaoDeclaracao = FuncaoDeclaracao;
5698
5686
  Object.defineProperty(exports, "__esModule", { value: true });
5699
5687
  exports.Importar = void 0;
5700
5688
  const declaracao_1 = require("./declaracao");
5689
+ /**
5690
+ * Declaração usada para importação resolvida em tempo de execução.
5691
+ * Para Delégua, a partir da versão 0.40.0, importações de módulos resolvem
5692
+ * no avaliador sintático, já que alguma resolução de tipo é necessária.
5693
+ */
5701
5694
  class Importar extends declaracao_1.Declaracao {
5702
- constructor(caminho, simboloFechamento) {
5695
+ constructor(caminho) {
5703
5696
  super(caminho.linha, caminho.hashArquivo);
5704
5697
  this.caminho = caminho;
5705
- this.simboloFechamento = simboloFechamento;
5706
5698
  }
5707
5699
  async aceitar(visitante) {
5708
5700
  return await visitante.visitarDeclaracaoImportar(this);
@@ -12303,6 +12295,8 @@ exports.default = {
12303
12295
  INTEIRO: 'inteiro',
12304
12296
  LOGICO: 'logico',
12305
12297
  LÓGICO: 'lógico',
12298
+ MODULO: 'modulo',
12299
+ MÓDULO: 'módulo',
12306
12300
  NUMERO: 'numero',
12307
12301
  NÚMERO: 'número',
12308
12302
  NULO: 'nulo',