@designliquido/delegua 1.17.2 → 1.18.1

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 (34) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +35 -4
  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 +37 -11
  6. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -1
  8. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico.js +51 -3
  10. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
  12. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  13. package/bin/package.json +1 -1
  14. package/interpretador/comum.js +13 -0
  15. package/interpretador/comum.js.map +1 -1
  16. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -2
  17. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  18. package/lexador/palavras-reservadas.d.ts.map +1 -1
  19. package/lexador/palavras-reservadas.js +2 -0
  20. package/lexador/palavras-reservadas.js.map +1 -1
  21. package/package.json +1 -1
  22. package/tipos-de-simbolos/delegua.d.ts +1 -0
  23. package/tipos-de-simbolos/delegua.d.ts.map +1 -1
  24. package/tipos-de-simbolos/delegua.js +1 -0
  25. package/tipos-de-simbolos/delegua.js.map +1 -1
  26. package/tradutores/tradutor-assembly-risc-v.d.ts +3 -2
  27. package/tradutores/tradutor-assembly-risc-v.d.ts.map +1 -1
  28. package/tradutores/tradutor-assembly-risc-v.js +18 -5
  29. package/tradutores/tradutor-assembly-risc-v.js.map +1 -1
  30. package/tradutores/tradutor-assemblyscript.d.ts +3 -2
  31. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  32. package/tradutores/tradutor-assemblyscript.js +13 -4
  33. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  34. package/umd/delegua.js +135 -18
@@ -17,6 +17,7 @@ const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatic
17
17
  const comum_1 = require("./comum");
18
18
  const montao_tipos_1 = require("./montao-tipos");
19
19
  const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
20
+ const simbolo_1 = require("../lexador/simbolo");
20
21
  const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
21
22
  const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
22
23
  const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
@@ -74,7 +75,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
74
75
  verificarDefinicaoTipoAtual() {
75
76
  const tipos = [...Object.values(delegua_1.default)];
76
77
  if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
77
- return this.simbolos[this.atual].lexema;
78
+ const nomeBase = this.simbolos[this.atual].lexema;
79
+ if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
80
+ this.avancarEDevolverAnterior(); // avança do tipo para '['
81
+ if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
82
+ throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
83
+ }
84
+ this.avancarEDevolverAnterior(); // avança de '[' para ']'
85
+ return `${nomeBase}[]`;
86
+ }
87
+ return nomeBase;
78
88
  }
79
89
  if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
80
90
  return this.simbolos[this.atual].lexema;
@@ -175,6 +185,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
175
185
  case delegua_2.default.EXTENSAO:
176
186
  this.avancarEDevolverAnterior();
177
187
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'extensao', 'texto');
188
+ case delegua_2.default.ASSERCAO:
189
+ this.avancarEDevolverAnterior();
190
+ return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'assercao', 'texto');
178
191
  default:
179
192
  return undefined;
180
193
  }
@@ -1326,6 +1339,38 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1326
1339
  const expressaoFalha = await this.expressao();
1327
1340
  return new declaracoes_1.Falhar(simboloFalha, expressaoFalha);
1328
1341
  }
1342
+ async declaracaoAssercao() {
1343
+ const simboloAssercao = this.simbolos[this.atual - 1];
1344
+ let condicao;
1345
+ let mensagemFalha;
1346
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
1347
+ condicao = await this.expressao();
1348
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
1349
+ this.avancarEDevolverAnterior();
1350
+ mensagemFalha = await this.expressao();
1351
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
1352
+ throw this.erro(this.simbolos[this.atual], "'asserção' aceita apenas condição obrigatória e mensagem opcional.");
1353
+ }
1354
+ }
1355
+ else {
1356
+ mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
1357
+ }
1358
+ this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após argumentos de 'asserção'.");
1359
+ }
1360
+ else {
1361
+ condicao = await this.expressao();
1362
+ if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
1363
+ throw this.erro(this.simbolos[this.atual], "Mensagem em 'asserção' exige uso de parênteses.");
1364
+ }
1365
+ mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
1366
+ }
1367
+ this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
1368
+ const simboloNao = new simbolo_1.Simbolo(delegua_2.default.NEGACAO, 'nao', null, Number(simboloAssercao.linha), simboloAssercao.hashArquivo, simboloAssercao.colunaInicio, simboloAssercao.colunaFim);
1369
+ const condicaoNegada = new construtos_1.Unario(simboloAssercao.hashArquivo, simboloNao, condicao, 'ANTES');
1370
+ const declaracaoFalhar = new declaracoes_1.Falhar(simboloAssercao, mensagemFalha);
1371
+ const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [declaracaoFalhar]);
1372
+ return new declaracoes_1.Se(condicaoNegada, blocoFalha);
1373
+ }
1329
1374
  async logicaComumFazer() {
1330
1375
  const caminhoFazer = await this.declaracaoBloco();
1331
1376
  this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
@@ -2599,14 +2644,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2599
2644
  }
2600
2645
  /**
2601
2646
  * Usado quando há erros na avaliação sintática.
2602
- * Garante que o código não entre em _loop_ infinito.
2647
+ * Garante que o avaliador sintático não entre em _loop_ infinito.
2603
2648
  * @returns Sempre retorna `void`.
2604
2649
  */
2605
2650
  sincronizar() {
2606
2651
  this.avancarEDevolverAnterior(); // avança além do token com erro
2607
2652
  while (!this.estaNoFinal()) {
2608
2653
  // Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
2609
- if (this.simbolos[this.atual - 1].tipo === delegua_2.default.PONTO_E_VIRGULA)
2654
+ if (this.simbolos[this.atual].tipo === delegua_2.default.PONTO_E_VIRGULA)
2610
2655
  return;
2611
2656
  // Uma palavra-chave de início de declaração ou fecha-chave à frente:
2612
2657
  // retorna SEM consumir o token, para que o chamador o analise normalmente.
@@ -2638,6 +2683,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2638
2683
  switch (this.simbolos[this.atual].tipo) {
2639
2684
  case delegua_2.default.AJUDA:
2640
2685
  return await this.declaracaoAjuda();
2686
+ case delegua_2.default.ASSERCAO:
2687
+ this.avancarEDevolverAnterior();
2688
+ return await this.declaracaoAssercao();
2641
2689
  case delegua_2.default.CHAVE_ESQUERDA:
2642
2690
  return await this.declaracaoBloco();
2643
2691
  case delegua_2.default.COMENTARIO: