@designliquido/delegua 1.15.0 → 1.15.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 (48) hide show
  1. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts +1 -0
  2. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  3. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +18 -0
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  5. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  6. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +13 -3
  7. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  8. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +10 -3
  9. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +279 -57
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  12. package/bibliotecas/dialetos/prisma/biblioteca-global.d.ts +10 -0
  13. package/bibliotecas/dialetos/prisma/biblioteca-global.d.ts.map +1 -0
  14. package/bibliotecas/dialetos/prisma/biblioteca-global.js +224 -0
  15. package/bibliotecas/dialetos/prisma/biblioteca-global.js.map +1 -0
  16. package/bin/package.json +1 -1
  17. package/interpretador/dialetos/index.d.ts +1 -0
  18. package/interpretador/dialetos/index.d.ts.map +1 -1
  19. package/interpretador/dialetos/index.js +1 -0
  20. package/interpretador/dialetos/index.js.map +1 -1
  21. package/interpretador/dialetos/prisma/index.d.ts +2 -0
  22. package/interpretador/dialetos/prisma/index.d.ts.map +1 -0
  23. package/interpretador/dialetos/prisma/index.js +18 -0
  24. package/interpretador/dialetos/prisma/index.js.map +1 -0
  25. package/interpretador/dialetos/prisma/interpretador-prisma.d.ts +13 -0
  26. package/interpretador/dialetos/prisma/interpretador-prisma.d.ts.map +1 -0
  27. package/interpretador/dialetos/prisma/interpretador-prisma.js +49 -0
  28. package/interpretador/dialetos/prisma/interpretador-prisma.js.map +1 -0
  29. package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
  30. package/lexador/dialetos/lexador-prisma.js +24 -6
  31. package/lexador/dialetos/lexador-prisma.js.map +1 -1
  32. package/lexador/dialetos/palavras-reservadas/prisma.d.ts +3 -0
  33. package/lexador/dialetos/palavras-reservadas/prisma.d.ts.map +1 -1
  34. package/lexador/dialetos/palavras-reservadas/prisma.js +3 -0
  35. package/lexador/dialetos/palavras-reservadas/prisma.js.map +1 -1
  36. package/lexador/lexador.d.ts.map +1 -1
  37. package/lexador/lexador.js +55 -4
  38. package/lexador/lexador.js.map +1 -1
  39. package/package.json +1 -1
  40. package/tipos-de-simbolos/prisma.d.ts +4 -0
  41. package/tipos-de-simbolos/prisma.d.ts.map +1 -1
  42. package/tipos-de-simbolos/prisma.js +4 -0
  43. package/tipos-de-simbolos/prisma.js.map +1 -1
  44. package/tradutores/tradutor-assemblyscript.d.ts +2 -0
  45. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  46. package/tradutores/tradutor-assemblyscript.js +63 -0
  47. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  48. package/umd/delegua.js +442 -71
@@ -1,5 +1,5 @@
1
1
  import { Chamada, Construto, FuncaoConstruto, Leia, ImportarComoConstruto } from '../../construtos';
2
- import { Escreva, Se, Enquanto, Para, Continua, Retorna, Importar, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar } from '../../declaracoes';
2
+ import { Escreva, Escolha, ParaCada, Se, Tente, Enquanto, Para, Continua, Retorna, Importar, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar } from '../../declaracoes';
3
3
  import { ParametroInterface, SimboloInterface } from '../../interfaces';
4
4
  import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
5
5
  import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
@@ -38,7 +38,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
38
38
  avancarEDevolverAnterior(): SimboloInterface<string>;
39
39
  verificarSeSimboloAtualEIgualA(...argumentos: string[]): boolean;
40
40
  primario(): Promise<Construto>;
41
- expressaoImportar(): ImportarComoConstruto;
41
+ expressaoImportar(): Promise<ImportarComoConstruto>;
42
42
  /**
43
43
  * Construto para texto multilinhas.
44
44
  * @returns
@@ -51,6 +51,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
51
51
  exponenciacao(): Promise<Construto>;
52
52
  multiplicar(): Promise<Construto>;
53
53
  adicaoOuSubtracao(): Promise<Construto>;
54
+ concatenacao(): Promise<Construto>;
54
55
  bitShift(): Promise<Construto>;
55
56
  bitE(): Promise<Construto>;
56
57
  bitOu(): Promise<Construto>;
@@ -59,6 +60,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
59
60
  em(): Promise<Construto>;
60
61
  e(): Promise<Construto>;
61
62
  ou(): Promise<Construto>;
63
+ ternario(): Promise<Construto>;
62
64
  atribuir(): Promise<Construto>;
63
65
  expressao(): Promise<Construto>;
64
66
  declaracaoEscreva(): Promise<Escreva>;
@@ -66,7 +68,9 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
66
68
  protected blocoEscopo(): Promise<any[]>;
67
69
  declaracaoDeLocal(): Promise<Var>;
68
70
  declaracaoEnquanto(): Promise<Enquanto>;
71
+ declaracaoEscolha(): Promise<Escolha>;
69
72
  declaracaoSe(): Promise<Se>;
73
+ declaracaoTente(): Promise<Tente>;
70
74
  declaracaoQuebre(): Promise<Sustar>;
71
75
  declaracaoContinua(): Continua;
72
76
  declaracaoRetorna(): Promise<Retorna>;
@@ -85,8 +89,11 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
85
89
  * @returns O tipo inferido.
86
90
  */
87
91
  protected logicaComumInferenciaTiposVariaveisEConstantes(inicializador: Construto, tipoPrevio: string): string;
88
- declaracaoPara(): Promise<Para>;
92
+ declaracaoParaCada(simboloPara: SimboloInterface): Promise<ParaCada>;
93
+ declaracaoPara(): Promise<Para | ParaCada>;
89
94
  resolverDeclaracaoForaDeBloco(): Promise<Declaracao | null>;
95
+ metodoClassePrisma(construtor: boolean): Promise<FuncaoDeclaracao>;
96
+ private propriedadesDeclaradasEmMetodo;
90
97
  declaracaoDeClasse(): Promise<Classe>;
91
98
  protected inicializarPilhaEscopos(): void;
92
99
  analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
@@ -1 +1 @@
1
- {"version":3,"file":"avaliador-sintatico-prisma.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avaliador-sintatico-prisma.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,7 @@ const browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime
8
8
  const construtos_1 = require("../../construtos");
9
9
  const declaracoes_1 = require("../../declaracoes");
10
10
  const avaliador_sintatico_base_1 = require("../avaliador-sintatico-base");
11
+ const erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
11
12
  const inferenciador_1 = require("../../inferenciador");
12
13
  const pilha_escopos_1 = require("../pilha-escopos");
13
14
  const informacao_escopo_1 = require("../informacao-escopo");
@@ -92,6 +93,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
92
93
  return false;
93
94
  }
94
95
  async primario() {
96
+ var _a;
95
97
  const simboloAtual = this.simbolos[this.atual];
96
98
  let valores = [];
97
99
  switch (simboloAtual.tipo) {
@@ -113,10 +115,16 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
113
115
  }
114
116
  let indice = 1;
115
117
  do {
116
- let chave = String(indice);
117
- if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.COLCHETE_ESQUERDO)) {
118
- // Lógica para índice nomeado
119
- // TODO: Terminar
118
+ let chave;
119
+ if (this.verificarTipoSimboloAtual(prisma_1.default.IDENTIFICADOR) &&
120
+ ((_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo) === prisma_1.default.IGUAL) {
121
+ // Chave nomeada: {nome = "João"}
122
+ const chaveIdentificador = this.avancarEDevolverAnterior();
123
+ this.avancarEDevolverAnterior(); // consume IGUAL
124
+ chave = new construtos_1.Literal(this.hashArquivo, simboloAtual.linha, chaveIdentificador.lexema);
125
+ }
126
+ else {
127
+ chave = new construtos_1.Literal(this.hashArquivo, simboloAtual.linha, String(indice));
120
128
  }
121
129
  const valor = await this.ou();
122
130
  chaves.push(chave);
@@ -176,8 +184,12 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
176
184
  }
177
185
  throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
178
186
  }
179
- expressaoImportar() {
180
- throw new Error('Método não implementado.');
187
+ async expressaoImportar() {
188
+ this.avancarEDevolverAnterior();
189
+ this.consumir(prisma_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
190
+ const caminho = await this.expressao();
191
+ this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
192
+ return new construtos_1.ImportarComoConstruto(caminho);
181
193
  }
182
194
  /**
183
195
  * Construto para texto multilinhas.
@@ -245,7 +257,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
245
257
  return expressao;
246
258
  }
247
259
  async unario() {
248
- if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.NEGACAO, prisma_1.default.SUBTRACAO, prisma_1.default.BIT_NOT)) {
260
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.NEGACAO, prisma_1.default.SUBTRACAO, prisma_1.default.BIT_NOT, prisma_1.default.NAO, prisma_1.default.COMPRIMENTO)) {
249
261
  const operador = this.simboloAnterior();
250
262
  const direito = await this.unario();
251
263
  return new construtos_1.Unario(this.hashArquivo, operador, direito);
@@ -279,8 +291,17 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
279
291
  }
280
292
  return expressao;
281
293
  }
282
- async bitShift() {
294
+ async concatenacao() {
283
295
  let expressao = await this.adicaoOuSubtracao();
296
+ while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CONCATENACAO)) {
297
+ const operador = this.simboloAnterior();
298
+ const direito = await this.adicaoOuSubtracao();
299
+ expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
300
+ }
301
+ return expressao;
302
+ }
303
+ async bitShift() {
304
+ let expressao = await this.concatenacao();
284
305
  while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.MENOR_MENOR, prisma_1.default.MAIOR_MAIOR)) {
285
306
  const operador = this.simboloAnterior();
286
307
  const direito = await this.adicaoOuSubtracao();
@@ -351,8 +372,19 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
351
372
  }
352
373
  return expressao;
353
374
  }
375
+ async ternario() {
376
+ let expressaoOuCondicao = await this.ou();
377
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.INTERROGACAO)) {
378
+ const operador = this.simboloAnterior();
379
+ const caminhoEntao = await this.e();
380
+ this.consumir(prisma_1.default.OU, "Esperado palavra reservada 'ou' após caminho positivo em operador ternário.");
381
+ const caminhoSenao = await this.ternario();
382
+ expressaoOuCondicao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, caminhoEntao, operador, caminhoSenao);
383
+ }
384
+ return expressaoOuCondicao;
385
+ }
354
386
  async atribuir() {
355
- const expressao = await this.ou();
387
+ const expressao = await this.ternario();
356
388
  if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.IGUAL) ||
357
389
  this.verificarSeSimboloAtualEIgualA(prisma_1.default.MAIS_IGUAL)) {
358
390
  const igual = this.simboloAnterior();
@@ -404,7 +436,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
404
436
  }
405
437
  this.consumir(prisma_1.default.FIM, "Esperado 'fim' após o bloco.");
406
438
  this.pilhaEscopos.removerUltimo();
407
- return declaracoes;
439
+ return declaracoes.filter((d) => d);
408
440
  }
409
441
  async declaracaoDeLocal() {
410
442
  const identificador = this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
@@ -429,6 +461,65 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
429
461
  this.blocos -= 1;
430
462
  }
431
463
  }
464
+ async declaracaoEscolha() {
465
+ try {
466
+ this.blocos += 1;
467
+ const condicao = await this.expressao();
468
+ const caminhos = [];
469
+ let caminhoPadrao = null;
470
+ while (!this.verificarTipoSimboloAtual(prisma_1.default.FIM) && !this.estaNoFinal()) {
471
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CASO)) {
472
+ const caminhoCondicoes = [await this.expressao()];
473
+ while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CASO)) {
474
+ caminhoCondicoes.push(await this.expressao());
475
+ }
476
+ this.consumir(prisma_1.default.ENTAO, "Esperado palavra reservada 'entao' ou 'então' após valor do 'caso'.");
477
+ const declaracoes = [];
478
+ while (!this.estaNoFinal() &&
479
+ ![
480
+ prisma_1.default.CASO,
481
+ prisma_1.default.PADRAO,
482
+ prisma_1.default.FIM,
483
+ ].includes(this.simbolos[this.atual].tipo)) {
484
+ declaracoes.push(await this.resolverDeclaracaoForaDeBloco());
485
+ }
486
+ caminhos.push({
487
+ condicoes: caminhoCondicoes,
488
+ declaracoes: declaracoes.filter((d) => d),
489
+ });
490
+ }
491
+ else if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.PADRAO)) {
492
+ if (caminhoPadrao !== null) {
493
+ const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simbolos[this.atual], "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
494
+ this.erros.push(excecao);
495
+ throw excecao;
496
+ }
497
+ this.consumir(prisma_1.default.ENTAO, "Esperado palavra reservada 'entao' ou 'então' após declaração do 'padrao'.");
498
+ const declaracoes = [];
499
+ while (!this.estaNoFinal() &&
500
+ ![
501
+ prisma_1.default.CASO,
502
+ prisma_1.default.PADRAO,
503
+ prisma_1.default.FIM,
504
+ ].includes(this.simbolos[this.atual].tipo)) {
505
+ declaracoes.push(await this.resolverDeclaracaoForaDeBloco());
506
+ }
507
+ caminhoPadrao = {
508
+ condicoes: [],
509
+ declaracoes: declaracoes.filter((d) => d),
510
+ };
511
+ }
512
+ else {
513
+ throw this.erro(this.simbolos[this.atual], "Esperado 'caso', 'padrao' ou 'fim' em declaração 'escolha'.");
514
+ }
515
+ }
516
+ this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'escolha'.");
517
+ return new declaracoes_1.Escolha(condicao, caminhos, caminhoPadrao);
518
+ }
519
+ finally {
520
+ this.blocos -= 1;
521
+ }
522
+ }
432
523
  async declaracaoSe() {
433
524
  const simboloSe = this.simbolos[this.atual];
434
525
  const condicao = await this.expressao();
@@ -439,17 +530,57 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
439
530
  } while (!this.estaNoFinal() &&
440
531
  ![prisma_1.default.SENAO, prisma_1.default.SENÃO, prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo));
441
532
  let caminhoSenao = null;
533
+ let fimConsumidoNoCaminhoSenao = false;
442
534
  if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.SENAO, prisma_1.default.SENÃO)) {
443
535
  const simboloSenao = this.simbolos[this.atual - 1];
444
- const declaracoesSenao = [];
445
- do {
446
- declaracoesSenao.push(await this.resolverDeclaracaoForaDeBloco());
447
- } while (![prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo));
448
- caminhoSenao = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloSenao.linha), declaracoesSenao.filter((d) => d));
536
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.SE)) {
537
+ caminhoSenao = await this.declaracaoSe();
538
+ fimConsumidoNoCaminhoSenao = true;
539
+ }
540
+ else {
541
+ const declaracoesSenao = [];
542
+ do {
543
+ declaracoesSenao.push(await this.resolverDeclaracaoForaDeBloco());
544
+ } while (![prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo));
545
+ caminhoSenao = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloSenao.linha), declaracoesSenao.filter((d) => d));
546
+ }
547
+ }
548
+ if (!fimConsumidoNoCaminhoSenao) {
549
+ this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'se'.");
449
550
  }
450
- this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fimse' para fechamento de declaração 'se'.");
451
551
  return new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(this.hashArquivo, Number(simboloSe.linha), declaracoes.filter((d) => d)), [], caminhoSenao);
452
552
  }
553
+ async declaracaoTente() {
554
+ const simboloTente = this.simboloAnterior();
555
+ const blocoTente = [];
556
+ while (!this.estaNoFinal() &&
557
+ ![
558
+ prisma_1.default.PEGUE,
559
+ prisma_1.default.FINALMENTE,
560
+ prisma_1.default.FIM,
561
+ ].includes(this.simbolos[this.atual].tipo)) {
562
+ blocoTente.push(await this.resolverDeclaracaoForaDeBloco());
563
+ }
564
+ let blocoPegue = null;
565
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.PEGUE)) {
566
+ const declaracoesPegue = [];
567
+ while (!this.estaNoFinal() &&
568
+ ![prisma_1.default.FINALMENTE, prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo)) {
569
+ declaracoesPegue.push(await this.resolverDeclaracaoForaDeBloco());
570
+ }
571
+ blocoPegue = declaracoesPegue.filter((d) => d);
572
+ }
573
+ let blocoFinalmente = null;
574
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.FINALMENTE)) {
575
+ const declaracoesFinalmente = [];
576
+ while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.FIM)) {
577
+ declaracoesFinalmente.push(await this.resolverDeclaracaoForaDeBloco());
578
+ }
579
+ blocoFinalmente = declaracoesFinalmente.filter((d) => d);
580
+ }
581
+ this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'tente'.");
582
+ return new declaracoes_1.Tente(simboloTente.hashArquivo, Number(simboloTente.linha), blocoTente.filter((d) => d), blocoPegue, null, blocoFinalmente);
583
+ }
453
584
  async declaracaoQuebre() {
454
585
  if (this.blocos < 1) {
455
586
  throw this.erro(this.simboloAnterior(), "'quebre' deve estar dentro de um laço de repetição.");
@@ -533,11 +664,15 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
533
664
  return null;
534
665
  case prisma_1.default.ENTAO:
535
666
  case prisma_1.default.INICIO:
667
+ case prisma_1.default.FAZER:
536
668
  const simboloInicioBloco = this.avancarEDevolverAnterior();
537
669
  return new declaracoes_1.Bloco(simboloInicioBloco.hashArquivo, Number(simboloInicioBloco.linha), await this.blocoEscopo());
538
670
  case prisma_1.default.ENQUANTO:
539
671
  this.avancarEDevolverAnterior();
540
672
  return await this.declaracaoEnquanto();
673
+ case prisma_1.default.ESCOLHA:
674
+ this.avancarEDevolverAnterior();
675
+ return await this.declaracaoEscolha();
541
676
  case prisma_1.default.IDENTIFICADOR:
542
677
  const proximoSimbolo = this.simbolos[this.atual + 1];
543
678
  if (proximoSimbolo && proximoSimbolo.tipo === prisma_1.default.IGUAL) {
@@ -559,6 +694,9 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
559
694
  case prisma_1.default.RETORNE:
560
695
  this.avancarEDevolverAnterior();
561
696
  return await this.declaracaoRetorna();
697
+ case prisma_1.default.TENTE:
698
+ this.avancarEDevolverAnterior();
699
+ return await this.declaracaoTente();
562
700
  case prisma_1.default.LOCAL:
563
701
  this.avancarEDevolverAnterior();
564
702
  return await this.declaracaoDeLocal();
@@ -601,20 +739,40 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
601
739
  console.log(inicializador.constructor.name);
602
740
  }
603
741
  }
742
+ async declaracaoParaCada(simboloPara) {
743
+ const variavelIteracao = this.consumir(prisma_1.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
744
+ this.consumir(prisma_1.default.EM, "Esperado palavra reservada 'em' após variável de iteração.");
745
+ const vetorOuDicionario = await this.expressao();
746
+ this.consumir(prisma_1.default.INICIO, `espera-se 'inicio' proximo a '${this.simbolos[this.atual].lexema}'.`);
747
+ this.pilhaEscopos.definirInformacoesVariavel(variavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelIteracao.lexema, 'qualquer'));
748
+ const declaracoesBlocoParaCada = [];
749
+ while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.FIM)) {
750
+ declaracoesBlocoParaCada.push(await this.resolverDeclaracaoForaDeBloco());
751
+ }
752
+ this.consumir(prisma_1.default.FIM, "Esperado 'fim' após bloco do para cada.");
753
+ const corpo = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloPara.linha) + 1, declaracoesBlocoParaCada.filter((d) => d));
754
+ return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'qualquer'), vetorOuDicionario, corpo);
755
+ }
604
756
  async declaracaoPara() {
605
757
  try {
606
758
  this.blocos += 1;
607
759
  const simboloPara = this.avancarEDevolverAnterior();
760
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CADA)) {
761
+ return await this.declaracaoParaCada(simboloPara);
762
+ }
608
763
  const variavelIteracao = this.consumir(prisma_1.default.IDENTIFICADOR, "Esperado identificador de variável após 'para'.");
609
764
  this.consumir(prisma_1.default.IGUAL, `'=' or 'em' esperado próximo a '${this.simbolos[this.atual].lexema}'.`);
610
765
  const literalOuVariavelInicio = await this.adicaoOuSubtracao();
611
766
  this.consumir(prisma_1.default.VIRGULA, `Espera-se '=' próximo a '${this.simbolos[this.atual].lexema}'.`);
612
767
  const literalOuVariavelFim = await this.adicaoOuSubtracao();
613
768
  let operadorCondicao = new lexador_1.Simbolo(prisma_1.default.MENOR_IGUAL, '<=', null, Number(simboloPara.linha), this.hashArquivo);
614
- let operadorCondicaoIncremento = new lexador_1.Simbolo(prisma_1.default.MENOR, '<', null, Number(simboloPara.linha), this.hashArquivo);
615
769
  let passo = new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), 1);
616
- const resolverIncrementoEmExecucao = false; // Mudar caso seja necessário.
617
- this.consumir(prisma_1.default.INICIO, `espera-se 'inicio' proximo a '${this.simbolos[this.atual].lexema}'.`);
770
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.VIRGULA)) {
771
+ passo = await this.adicaoOuSubtracao();
772
+ }
773
+ if (!this.verificarSeSimboloAtualEIgualA(prisma_1.default.INICIO, prisma_1.default.FAZER)) {
774
+ throw this.erro(this.simbolos[this.atual], `espera-se 'inicio' ou 'fazer' proximo a '${this.simbolos[this.atual].lexema}'.`);
775
+ }
618
776
  // Aqui já é seguro inicializar a variável.
619
777
  this.pilhaEscopos.definirInformacoesVariavel(variavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelIteracao.lexema, 'inteiro'));
620
778
  const declaracoesBlocoPara = [];
@@ -626,14 +784,12 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
626
784
  this.avancarEDevolverAnterior(); // fim
627
785
  const corpo = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloPara.linha) + 1, declaracoesBlocoPara.filter((d) => d));
628
786
  const para = new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha),
629
- // Inicialização.
630
- new declaracoes_1.Expressao(new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), literalOuVariavelInicio)),
787
+ // Inicialização: declara a variável de iteração.
788
+ new declaracoes_1.Var(variavelIteracao, literalOuVariavelInicio, 'inteiro'),
631
789
  // Condição.
632
790
  new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), operadorCondicao, literalOuVariavelFim),
633
- // Incremento, feito em construto especial `FimPara`.
634
- new construtos_1.FimPara(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), operadorCondicaoIncremento, literalOuVariavelFim), new declaracoes_1.Expressao(new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new lexador_1.Simbolo(prisma_1.default.ADICAO, '+', null, Number(simboloPara.linha), this.hashArquivo), passo)))), corpo);
635
- para.blocoPosExecucao = corpo;
636
- para.resolverIncrementoEmExecucao = resolverIncrementoEmExecucao;
791
+ // Incremento simples.
792
+ new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new lexador_1.Simbolo(prisma_1.default.ADICAO, '+', null, Number(simboloPara.linha), this.hashArquivo), passo)), corpo);
637
793
  return para;
638
794
  }
639
795
  finally {
@@ -658,6 +814,48 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
658
814
  return null;
659
815
  }
660
816
  }
817
+ async metodoClassePrisma(construtor) {
818
+ const simbolo = construtor
819
+ ? new lexador_1.Simbolo(prisma_1.default.CONSTRUTOR, 'construtor', null, Number(this.simboloAnterior().linha), this.hashArquivo)
820
+ : this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome do método.');
821
+ this.consumir(prisma_1.default.PARENTESE_ESQUERDO, "Esperado '(' após nome do método.");
822
+ let parametros = [];
823
+ if (!this.verificarTipoSimboloAtual(prisma_1.default.PARENTESE_DIREITO)) {
824
+ parametros = await this.logicaComumParametros();
825
+ }
826
+ this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
827
+ this.consumir(prisma_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
828
+ const declaracoesCorpo = [];
829
+ while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
830
+ declaracoesCorpo.push(await this.resolverDeclaracaoForaDeBloco());
831
+ }
832
+ this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após o corpo do método.");
833
+ const corpoDaFuncao = new construtos_1.FuncaoConstruto(this.hashArquivo, Number(simbolo.linha), parametros, declaracoesCorpo.filter((d) => d), 'qualquer', false);
834
+ const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
835
+ return new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao);
836
+ }
837
+ propriedadesDeclaradasEmMetodo(metodo) {
838
+ const propriedades = [];
839
+ const nomesPropriedades = new Set();
840
+ for (const declaracao of metodo.funcao.corpo) {
841
+ if (!(declaracao instanceof declaracoes_1.Expressao)) {
842
+ continue;
843
+ }
844
+ if (!(declaracao.expressao instanceof construtos_1.DefinirValor)) {
845
+ continue;
846
+ }
847
+ if (!(declaracao.expressao.objeto instanceof construtos_1.Isto)) {
848
+ continue;
849
+ }
850
+ const nomePropriedade = declaracao.expressao.nome.lexema;
851
+ if (nomesPropriedades.has(nomePropriedade)) {
852
+ continue;
853
+ }
854
+ nomesPropriedades.add(nomePropriedade);
855
+ propriedades.push(new declaracoes_1.PropriedadeClasse(declaracao.expressao.nome, 'qualquer'));
856
+ }
857
+ return propriedades;
858
+ }
661
859
  async declaracaoDeClasse() {
662
860
  const simbolo = this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
663
861
  let superClasse = null;
@@ -673,47 +871,71 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
673
871
  (this.verificarTipoSimboloAtual(prisma_1.default.CONSTRUTOR) ||
674
872
  this.verificarTipoSimboloAtual(prisma_1.default.FUNCAO) ||
675
873
  this.verificarTipoSimboloAtual(prisma_1.default.FUNÇÃO))) {
676
- const ehConstrutor = this.verificarSeSimboloAtualEIgualA(prisma_1.default.CONSTRUTOR);
677
- metodos.push(await this.funcao('método'));
874
+ if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CONSTRUTOR)) {
875
+ metodos.push(await this.metodoClassePrisma(true));
876
+ continue;
877
+ }
878
+ this.verificarSeSimboloAtualEIgualA(prisma_1.default.FUNCAO, prisma_1.default.FUNÇÃO);
879
+ metodos.push(await this.metodoClassePrisma(false));
678
880
  }
679
881
  this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após métodos da classe.");
882
+ const propriedades = [];
883
+ const nomesPropriedades = new Set();
884
+ for (const metodo of metodos) {
885
+ const propriedadesDoMetodo = this.propriedadesDeclaradasEmMetodo(metodo);
886
+ for (const propriedade of propriedadesDoMetodo) {
887
+ if (nomesPropriedades.has(propriedade.nome.lexema)) {
888
+ continue;
889
+ }
890
+ nomesPropriedades.add(propriedade.nome.lexema);
891
+ propriedades.push(propriedade);
892
+ }
893
+ }
680
894
  this.superclasseAtual = undefined;
681
- const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos);
895
+ const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos, propriedades);
682
896
  this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
683
897
  return definicaoClasse;
684
898
  }
685
899
  inicializarPilhaEscopos() {
686
900
  this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
687
901
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
688
- // TODO: verificar quais são as funções nativas básicas de Prisma
689
- /* this.pilhaEscopos.definirInformacoesVariavel(
690
- 'aleatorio',
691
- new InformacaoElementoSintatico('aleatorio', 'número')
692
- );
693
- this.pilhaEscopos.definirInformacoesVariavel(
694
- 'inteiro',
695
- new InformacaoElementoSintatico('inteiro', 'inteiro', true, [
696
- new InformacaoElementoSintatico('valor', 'qualquer'),
697
- ])
698
- );
699
- this.pilhaEscopos.definirInformacoesVariavel(
700
- 'numero',
701
- new InformacaoElementoSintatico('número', 'número', true, [
702
- new InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
703
- ])
704
- );
705
- this.pilhaEscopos.definirInformacoesVariavel(
706
- 'texto',
707
- new InformacaoElementoSintatico('texto', 'texto', true, [
708
- new InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
709
- ])
710
- );
711
- this.pilhaEscopos.definirInformacoesVariavel(
712
- 'tamanho',
713
- new InformacaoElementoSintatico('tamanho', 'inteiro', true, [
714
- new InformacaoElementoSintatico('objeto', 'qualquer'),
715
- ])
716
- ); */
902
+ // Registrar funções nativas (built-ins) do Prisma no escopo do parser
903
+ // para evitar erros de variável não definida durante análise semântica
904
+ this.pilhaEscopos.definirInformacoesVariavel('tipo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tipo', 'função', true, [
905
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
906
+ ]));
907
+ this.pilhaEscopos.definirInformacoesVariavel('poe', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('poe', 'função', true, [
908
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valores', 'qualquer'),
909
+ ]));
910
+ this.pilhaEscopos.definirInformacoesVariavel('tamanho', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tamanho', 'número', true, [
911
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('objeto', 'qualquer'),
912
+ ]));
913
+ this.pilhaEscopos.definirInformacoesVariavel('pares', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('pares', 'tabela', true, [
914
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tabela', 'tabela'),
915
+ ]));
916
+ this.pilhaEscopos.definirInformacoesVariavel('ipares', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('ipares', 'tabela', true, [
917
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tabela', 'tabela'),
918
+ ]));
919
+ this.pilhaEscopos.definirInformacoesVariavel('convnumero', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('convnumero', 'número', true, [
920
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
921
+ ]));
922
+ this.pilhaEscopos.definirInformacoesVariavel('convstring', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('convstring', 'texto', true, [
923
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
924
+ ]));
925
+ this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'função', true, []));
926
+ this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
927
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
928
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
929
+ ]));
930
+ this.pilhaEscopos.definirInformacoesVariavel('coletelixo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('coletelixo', 'número', true, [
931
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('acao', 'texto'),
932
+ ]));
933
+ this.pilhaEscopos.definirInformacoesVariavel('piso', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('piso', 'número', true, [
934
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('n', 'número'),
935
+ ]));
936
+ this.pilhaEscopos.definirInformacoesVariavel('teto', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('teto', 'número', true, [
937
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('n', 'número'),
938
+ ]));
717
939
  }
718
940
  async analisar(retornoLexador, hashArquivo) {
719
941
  const inicioAnalise = (0, browser_process_hrtime_1.default)();