@designliquido/delegua 1.24.1 → 1.24.3

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 (33) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +4 -0
  3. package/analisador-semantico/analisador-semantico.js.map +1 -1
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  5. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +10 -0
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico-base.js +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  10. package/avaliador-sintatico/avaliador-sintatico.js +55 -17
  11. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +28 -13
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  15. package/bin/package.json +1 -1
  16. package/interpretador/depuracao/comum.d.ts.map +1 -1
  17. package/interpretador/depuracao/comum.js +16 -13
  18. package/interpretador/depuracao/comum.js.map +1 -1
  19. package/interpretador/interpretador-base.d.ts.map +1 -1
  20. package/interpretador/interpretador-base.js +55 -30
  21. package/interpretador/interpretador-base.js.map +1 -1
  22. package/interpretador/interpretador.d.ts.map +1 -1
  23. package/interpretador/interpretador.js +32 -5
  24. package/interpretador/interpretador.js.map +1 -1
  25. package/lexador/lexador.d.ts +19 -44
  26. package/lexador/lexador.d.ts.map +1 -1
  27. package/lexador/lexador.js +260 -489
  28. package/lexador/lexador.js.map +1 -1
  29. package/package.json +1 -1
  30. package/tradutores/tradutor-ruby.d.ts.map +1 -1
  31. package/tradutores/tradutor-ruby.js +1 -1
  32. package/tradutores/tradutor-ruby.js.map +1 -1
  33. package/umd/delegua.js +437 -557
@@ -630,10 +630,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
630
630
  }
631
631
  return new construtos_1.TipoDe(this.hashArquivo, simboloAtual, construto);
632
632
  }
633
- // TODO: O correto seria emitir algum aviso aqui que este avaliador sintático não consegue
634
- // lidar com tópicos de ajuda neste ponto.
635
633
  if (this.emAjuda) {
636
- console.log(this.simbolos[this.atual]);
634
+ const simboloNaoTratado = this.simbolos[this.atual];
635
+ this.erros.push(this.erro(simboloNaoTratado, `Avaliador sintático não consegue lidar com o tópico de ajuda '${simboloNaoTratado.lexema}'.`));
636
+ this.avancarEDevolverAnterior();
637
+ return new construtos_1.Literal(this.hashArquivo, Number(simboloNaoTratado.linha), null, 'nulo');
637
638
  }
638
639
  throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
639
640
  }
@@ -981,7 +982,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
981
982
  }
982
983
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.NAO, delegua_2.default.NEGACAO, delegua_2.default.ADICAO, delegua_2.default.SUBTRACAO, delegua_2.default.BIT_NOT, delegua_2.default.INCREMENTAR, delegua_2.default.DECREMENTAR)) {
983
984
  const operador = this.simbolos[this.atual - 1];
984
- const direito = await this.unario();
985
+ const direito = await this.exponenciacao();
985
986
  if (operador.tipo === delegua_2.default.NEGACAO ||
986
987
  operador.tipo === delegua_2.default.NAO) {
987
988
  this.verificarOperandoNegacao(operador, direito);
@@ -1584,16 +1585,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1584
1585
  throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução 'para cada'.");
1585
1586
  }
1586
1587
  let vetorOuDicionario = await this.expressao();
1587
- if (vetorOuDicionario.constructor === construtos_1.AcessoIndiceVariavel) {
1588
- const construtoAcessoIndiceVariavel = vetorOuDicionario;
1589
- if (construtoAcessoIndiceVariavel.entidadeChamada.tipo === 'dicionário') {
1590
- // A avaliação sintática não deve verificar valores de dicionários.
1591
- // Aqui se supõe que o programador sabe o que está fazendo.
1592
- // TODO: Talvez pensar numa forma melhor de fazer isso.
1593
- vetorOuDicionario.tipo = 'vetor';
1594
- }
1588
+ // Quando o iterável é um acesso a índice de dicionário, o tipo dos elementos
1589
+ // não é determinável estaticamente — assume-se 'qualquer[]' para não bloquear a iteração.
1590
+ let tipoVetor;
1591
+ if (vetorOuDicionario.constructor === construtos_1.AcessoIndiceVariavel &&
1592
+ vetorOuDicionario.entidadeChamada.tipo === 'dicionário') {
1593
+ tipoVetor = 'qualquer[]';
1594
+ }
1595
+ else {
1596
+ tipoVetor = vetorOuDicionario.tipo;
1595
1597
  }
1596
- const tipoVetor = vetorOuDicionario.tipo;
1597
1598
  if (!tipoVetor.endsWith('[]') &&
1598
1599
  !['dicionário', 'qualquer', 'texto', 'vetor'].includes(tipoVetor)) {
1599
1600
  throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
@@ -1770,12 +1771,29 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1770
1771
  const entidadeChamadaVariavel = construtoChamada.entidadeChamada;
1771
1772
  tipoInicializacao = entidadeChamadaVariavel.tipo;
1772
1773
  break;
1773
- // TODO: Demais casos
1774
+ case construtos_1.ReferenciaFuncao:
1775
+ const entidadeChamadaReferenciaFuncao = construtoChamada.entidadeChamada;
1776
+ tipoInicializacao = entidadeChamadaReferenciaFuncao.tipo;
1777
+ break;
1778
+ case construtos_1.ArgumentoReferenciaFuncao:
1779
+ tipoInicializacao = 'qualquer';
1780
+ break;
1774
1781
  default:
1775
1782
  break;
1776
1783
  }
1777
1784
  break;
1778
- // TODO: Demais casos
1785
+ case construtos_1.Variavel:
1786
+ tipoInicializacao = expressaoInicializacao.tipo;
1787
+ break;
1788
+ case construtos_1.Literal:
1789
+ tipoInicializacao = expressaoInicializacao.tipo;
1790
+ break;
1791
+ case construtos_1.FuncaoConstruto:
1792
+ tipoInicializacao = `função<${expressaoInicializacao.tipo}>`;
1793
+ break;
1794
+ case construtos_1.AcessoIndiceVariavel:
1795
+ tipoInicializacao = expressaoInicializacao.tipo;
1796
+ break;
1779
1797
  default:
1780
1798
  break;
1781
1799
  }
@@ -1904,7 +1922,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1904
1922
  const entidadeChamadaAcessoPropriedade = entidadeChamadaChamada;
1905
1923
  return entidadeChamadaAcessoPropriedade.tipoRetornoPropriedade;
1906
1924
  case construtos_1.ArgumentoReferenciaFuncao:
1907
- // TODO: Voltar aqui se necessário.
1925
+ const entidadeChamadaArgumentoReferencia = entidadeChamadaChamada;
1926
+ const referenciaFuncaoArgumentada = this.pilhaEscopos.obterReferenciaFuncao(entidadeChamadaArgumentoReferencia.simboloFuncao.lexema);
1927
+ if (referenciaFuncaoArgumentada) {
1928
+ return referenciaFuncaoArgumentada.tipo;
1929
+ }
1908
1930
  return 'qualquer';
1909
1931
  case construtos_1.ReferenciaFuncao:
1910
1932
  const entidadeChamadaReferenciaFuncao = entidadeChamadaChamada;
@@ -2961,6 +2983,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2961
2983
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2962
2984
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2963
2985
  ]));
2986
+ this.pilhaEscopos.definirInformacoesVariavel('arredondar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('arredondar', 'número', true, [
2987
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('numero', 'número'),
2988
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('casasDecimais', 'número'),
2989
+ ]));
2964
2990
  this.pilhaEscopos.definirInformacoesVariavel('clonar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('clonar', 'qualquer', true, [
2965
2991
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2966
2992
  ]));
@@ -3061,6 +3087,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3061
3087
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoReducao', 'função'),
3062
3088
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorInicial', 'qualquer'),
3063
3089
  ]));
3090
+ this.pilhaEscopos.definirInformacoesVariavel('somar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('somar', 'número', true, [
3091
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
3092
+ ]));
3064
3093
  this.pilhaEscopos.definirInformacoesVariavel('tamanho', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tamanho', 'inteiro', true, [
3065
3094
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('objeto', 'qualquer'),
3066
3095
  ]));
@@ -3081,11 +3110,20 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
3081
3110
  this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'tupla', true, [
3082
3111
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
3083
3112
  ]));
3113
+ this.pilhaEscopos.definirInformacoesVariavel('vetor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]', true, [
3114
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'qualquer'),
3115
+ ]));
3084
3116
  // Classe base global `Objeto`, registrada pelo interpretador em tempo de execução.
3085
3117
  this.pilhaEscopos.definirInformacoesVariavel('Objeto', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('Objeto', 'qualquer'));
3086
- // TODO: Escrever algum tipo de validação aqui.
3087
3118
  for (const tipos of Object.values(this.tiposDeFerramentasExternas)) {
3088
3119
  for (const [nomeTipo, tipo] of Object.entries(tipos)) {
3120
+ if (!nomeTipo || !tipo) {
3121
+ continue;
3122
+ }
3123
+ if (nomeTipo in this.tiposDefinidosEmCodigo) {
3124
+ this.erros.push(new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(new simbolo_1.Simbolo(delegua_2.default.IDENTIFICADOR, nomeTipo, nomeTipo, 0, 0), `Tipo '${nomeTipo}' de ferramenta externa conflita com tipo já definido em código.`));
3125
+ continue;
3126
+ }
3089
3127
  this.pilhaEscopos.definirInformacoesVariavel(nomeTipo, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeTipo, tipo));
3090
3128
  }
3091
3129
  }