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