@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.
- package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +6 -0
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/analisador-semantico/analisador-semantico.d.ts +11 -3
- package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +109 -8
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +8 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +274 -115
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/bibliotecas/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/primitivas-texto.js +69 -0
- package/bibliotecas/primitivas-texto.js.map +1 -1
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +18 -0
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +2 -2
- package/construtos/isto.d.ts +1 -0
- package/construtos/isto.d.ts.map +1 -1
- package/construtos/isto.js +1 -0
- package/construtos/isto.js.map +1 -1
- package/declaracoes/classe.d.ts +5 -2
- package/declaracoes/classe.d.ts.map +1 -1
- package/declaracoes/classe.js +13 -4
- package/declaracoes/classe.js.map +1 -1
- package/declaracoes/extensao.d.ts +13 -0
- package/declaracoes/extensao.d.ts.map +1 -0
- package/declaracoes/extensao.js +26 -0
- package/declaracoes/extensao.js.map +1 -0
- package/declaracoes/index.d.ts +1 -0
- package/declaracoes/index.d.ts.map +1 -1
- package/declaracoes/index.js +1 -0
- package/declaracoes/index.js.map +1 -1
- package/interfaces/visitante-delegua-interface.d.ts +2 -1
- package/interfaces/visitante-delegua-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +10 -0
- package/interpretador/comum.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -0
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts +3 -2
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +26 -2
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.d.ts +14 -4
- package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.js +89 -29
- package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
- package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-base.js +8 -4
- package/interpretador/estruturas/objeto-base.js.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.d.ts +1 -0
- package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.js +35 -21
- package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +13 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +146 -29
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +77 -15
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts +3 -0
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js +3 -0
- package/lexador/palavras-reservadas.js.map +1 -1
- package/package.json +2 -2
- package/tipos-de-simbolos/delegua.d.ts +2 -0
- package/tipos-de-simbolos/delegua.d.ts.map +1 -1
- package/tipos-de-simbolos/delegua.js +2 -0
- package/tipos-de-simbolos/delegua.js.map +1 -1
- 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
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
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
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
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 (
|
|
627
|
-
|
|
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
|
-
|
|
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 (
|
|
635
|
-
|
|
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
|
-
|
|
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 (
|
|
652
|
-
|
|
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
|
-
|
|
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 (
|
|
661
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2020
|
+
// Verificar `herda SuperclasseA, SuperclasseB`
|
|
2021
|
+
const superClasses = [];
|
|
1969
2022
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.HERDA)) {
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
2033
|
-
|
|
2034
|
-
|
|
2035
|
-
|
|
2036
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
]));
|