@designliquido/delegua 1.23.3 → 1.23.5
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.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +1 -3
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts +3 -0
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js +16 -5
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -0
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +45 -23
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +9 -6
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +98 -27
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/binario.d.ts.map +1 -1
- package/construtos/binario.js +15 -0
- package/construtos/binario.js.map +1 -1
- package/interpretador/depuracao/comum.js +1 -1
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +2 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +15 -25
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +21 -8
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +10 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +92 -31
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts +2 -7
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +41 -47
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/lexador.d.ts +15 -13
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js +52 -17
- package/lexador/lexador.js.map +1 -1
- package/package.json +1 -1
- package/umd/delegua.js +384 -164
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ConstrutoInterface } from '../../interfaces/construtos/construto-interface';
|
|
2
|
-
import { AcessoMetodoOuPropriedade, Decorador, FuncaoConstruto, Leia, ListaCompreensao, ImportarComoConstruto } from '../../construtos';
|
|
2
|
+
import { AcessoMetodoOuPropriedade, Chamada, Decorador, FuncaoConstruto, Leia, ListaCompreensao, ImportarComoConstruto } from '../../construtos';
|
|
3
3
|
import { Escreva, Se, Enquanto, Continua, Retorna, Escolha, Tente, Fazer, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar, Falhar, ParaCada, Comentario, PropriedadeClasse, TextoDocumentacao, Importar } from '../../declaracoes';
|
|
4
4
|
import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../../interfaces';
|
|
5
5
|
import { Localizacao } from '../../lexador/dialetos/localizacao';
|
|
@@ -9,6 +9,7 @@ import { RetornoAvaliadorSintaticoInterface } from '../../interfaces/retornos/re
|
|
|
9
9
|
import { PilhaEscopos } from '../pilha-escopos';
|
|
10
10
|
import { InformacaoElementoSintatico } from '../../informacao-elemento-sintatico';
|
|
11
11
|
import { ClasseDeModulo } from '../../interpretador/estruturas';
|
|
12
|
+
import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
|
|
12
13
|
/**
|
|
13
14
|
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
14
15
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
@@ -17,7 +18,7 @@ import { ClasseDeModulo } from '../../interpretador/estruturas';
|
|
|
17
18
|
* A grande diferença entre este avaliador e os demais é a forma como são entendidos os blocos de escopo.
|
|
18
19
|
* Este avaliador espera uma estrutura de pragmas, que explica quantos espaços há na frente de cada linha.
|
|
19
20
|
*/
|
|
20
|
-
export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
|
|
21
|
+
export declare class AvaliadorSintaticoPitugues extends AvaliadorSintaticoBase implements AvaliadorSintaticoInterface<SimboloInterface, Declaracao> {
|
|
21
22
|
simbolos: SimboloInterface[];
|
|
22
23
|
erros: ErroAvaliadorSintatico[];
|
|
23
24
|
localizacoes: {
|
|
@@ -81,7 +82,7 @@ export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInt
|
|
|
81
82
|
private transformarInterpolacaoEmFormatacao;
|
|
82
83
|
private ignorarComentarios;
|
|
83
84
|
primario(): Promise<ConstrutoInterface>;
|
|
84
|
-
finalizarChamada(entidadeChamada: ConstrutoInterface): Promise<
|
|
85
|
+
finalizarChamada(entidadeChamada: ConstrutoInterface): Promise<Chamada>;
|
|
85
86
|
chamar(): Promise<ConstrutoInterface>;
|
|
86
87
|
unario(): Promise<ConstrutoInterface>;
|
|
87
88
|
exponenciacao(): Promise<ConstrutoInterface>;
|
|
@@ -90,6 +91,8 @@ export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInt
|
|
|
90
91
|
bitShift(): Promise<ConstrutoInterface>;
|
|
91
92
|
bitE(): Promise<ConstrutoInterface>;
|
|
92
93
|
bitOu(): Promise<ConstrutoInterface>;
|
|
94
|
+
private eOperadorDeComparacao;
|
|
95
|
+
protected criarConstrutoComparacao(esquerda: ConstrutoInterface, operador: any, direita: ConstrutoInterface): ConstrutoInterface;
|
|
93
96
|
comparar(): Promise<ConstrutoInterface>;
|
|
94
97
|
comparacaoIgualdade(): Promise<ConstrutoInterface>;
|
|
95
98
|
em(): Promise<ConstrutoInterface>;
|
|
@@ -99,7 +102,7 @@ export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInt
|
|
|
99
102
|
tupla(): Promise<ConstrutoInterface>;
|
|
100
103
|
bote(): Promise<ConstrutoInterface>;
|
|
101
104
|
atribuir(): Promise<ConstrutoInterface>;
|
|
102
|
-
declaracaoEscreva(
|
|
105
|
+
declaracaoEscreva(): Promise<Escreva>;
|
|
103
106
|
declaracaoExpressao(): Promise<Expressao>;
|
|
104
107
|
blocoEscopo(): Promise<any[]>;
|
|
105
108
|
declaracaoEnquanto(): Promise<Enquanto>;
|
|
@@ -122,7 +125,7 @@ export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInt
|
|
|
122
125
|
declaracaoTente(): Promise<Tente>;
|
|
123
126
|
declaracaoFazer(): Promise<Fazer>;
|
|
124
127
|
funcao(tipo: string, construtor?: boolean): Promise<FuncaoDeclaracao>;
|
|
125
|
-
logicaComumParametros(): Promise<
|
|
128
|
+
logicaComumParametros(): Promise<ParametroInterface[]>;
|
|
126
129
|
/**
|
|
127
130
|
* Resolve uma lista de compreensão.
|
|
128
131
|
* @param retornoExpressao A expressão já resolvida que representa o valor a ser retornado.
|
|
@@ -137,7 +140,7 @@ export declare class AvaliadorSintaticoPitugues implements AvaliadorSintaticoInt
|
|
|
137
140
|
private resolverMetodoOuConstrutor;
|
|
138
141
|
protected resolverMembroDeClasse(metodos: any[], propriedadesDeClasse: PropriedadeClasse[]): Promise<void>;
|
|
139
142
|
declaracaoDeClasse(): Promise<Classe>;
|
|
140
|
-
declaracaoFalhar(): Falhar
|
|
143
|
+
declaracaoFalhar(): Promise<Falhar>;
|
|
141
144
|
/**
|
|
142
145
|
* Verifica se há pontos e vírgula no final de sentenças.
|
|
143
146
|
* Em Pituguês, ; só é permitido para separar múltiplos comandos na mesma linha,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico-pitugues.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iDAAiD,CAAC;AAErF,OAAO,EAGH,yBAAyB,
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-pitugues.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ const primitivas_numero_1 = __importDefault(require("../../bibliotecas/primitiva
|
|
|
23
23
|
const primitivas_texto_1 = __importDefault(require("../../bibliotecas/primitivas-texto"));
|
|
24
24
|
const primitivas_vetor_1 = __importDefault(require("../../bibliotecas/primitivas-vetor"));
|
|
25
25
|
const primitivas_tupla_1 = __importDefault(require("../../bibliotecas/dialetos/pitugues/primitivas-tupla"));
|
|
26
|
+
const avaliador_sintatico_base_1 = require("../avaliador-sintatico-base");
|
|
26
27
|
/**
|
|
27
28
|
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
28
29
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
@@ -31,8 +32,9 @@ const primitivas_tupla_1 = __importDefault(require("../../bibliotecas/dialetos/p
|
|
|
31
32
|
* A grande diferença entre este avaliador e os demais é a forma como são entendidos os blocos de escopo.
|
|
32
33
|
* Este avaliador espera uma estrutura de pragmas, que explica quantos espaços há na frente de cada linha.
|
|
33
34
|
*/
|
|
34
|
-
class AvaliadorSintaticoPitugues {
|
|
35
|
+
class AvaliadorSintaticoPitugues extends avaliador_sintatico_base_1.AvaliadorSintaticoBase {
|
|
35
36
|
constructor(performance = false) {
|
|
37
|
+
super();
|
|
36
38
|
this.atual = 0;
|
|
37
39
|
this.blocos = 0;
|
|
38
40
|
this.performance = performance;
|
|
@@ -85,14 +87,27 @@ class AvaliadorSintaticoPitugues {
|
|
|
85
87
|
return tipoPrevio;
|
|
86
88
|
switch (inicializador.constructor) {
|
|
87
89
|
case construtos_1.AcessoIndiceVariavel:
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
90
|
+
const acessoAtual = inicializador;
|
|
91
|
+
let entidade = acessoAtual.entidadeChamada;
|
|
92
|
+
let numeroIndices = 1;
|
|
93
|
+
// Percorre acessos aninhados como `vetor[1][2]` contando quantos índices foram aplicados.
|
|
94
|
+
// Cada índice consome um nível de vetor, então removemos um '[]' por acesso.
|
|
95
|
+
while (entidade.constructor === construtos_1.AcessoIndiceVariavel) {
|
|
96
|
+
numeroIndices++;
|
|
97
|
+
entidade = entidade
|
|
98
|
+
.entidadeChamada;
|
|
93
99
|
}
|
|
94
|
-
|
|
95
|
-
|
|
100
|
+
const tipoBase = entidade.tipo;
|
|
101
|
+
if (tipoBase.endsWith('[]')) {
|
|
102
|
+
let tipoResultante = tipoBase;
|
|
103
|
+
for (let i = 0; i < numeroIndices; i++) {
|
|
104
|
+
if (tipoResultante.endsWith('[]')) {
|
|
105
|
+
tipoResultante = tipoResultante.slice(0, -2);
|
|
106
|
+
}
|
|
107
|
+
else
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
return tipoResultante;
|
|
96
111
|
}
|
|
97
112
|
// Normalmente, `entidadeChamadaAcessoIndiceVariavel.tipo` aqui será 'vetor'.
|
|
98
113
|
return 'qualquer';
|
|
@@ -518,6 +533,9 @@ class AvaliadorSintaticoPitugues {
|
|
|
518
533
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
|
|
519
534
|
return new construtos_1.Vetor(this.hashArquivo, simboloAtual.linha, [], 'qualquer[]');
|
|
520
535
|
}
|
|
536
|
+
if (this.verificarTipoSimboloAtual(pitugues_2.default.VIRGULA)) {
|
|
537
|
+
throw this.erro(this.simboloAtual(), 'Não podem haver duas vírgulas seguidas em uma definição de vetor, ou definição de vetor começando em vírgula.');
|
|
538
|
+
}
|
|
521
539
|
// Ao resolver a expressão aqui, identificadores dentro da expressão de compreensão
|
|
522
540
|
// de lista serão tratados como 'qualquer', para evitar erros de tipo.
|
|
523
541
|
this.intuirTipoQualquerParaIdentificadores = true;
|
|
@@ -528,13 +546,35 @@ class AvaliadorSintaticoPitugues {
|
|
|
528
546
|
}
|
|
529
547
|
// Aqui já sabemos que não é uma compreensão de lista.
|
|
530
548
|
const valoresVetor = [retornoExpressaoOuPrimeiroValor];
|
|
549
|
+
this.ignorarComentarios();
|
|
531
550
|
while (!this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
|
|
532
|
-
this.
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
551
|
+
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.VIRGULA)) {
|
|
552
|
+
this.ignorarComentarios();
|
|
553
|
+
if (this.verificarTipoSimboloAtual(pitugues_2.default.VIRGULA)) {
|
|
554
|
+
throw this.erro(this.simboloAtual(), 'Não podem haver duas vírgulas seguidas em uma definição de vetor, ou definição de vetor começando em vírgula.');
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
throw this.erro(this.simboloAtual() || simboloAtual, 'Os itens dos vetores devem ser separados através de uma vírgula.');
|
|
559
|
+
}
|
|
560
|
+
if (!this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO)) {
|
|
561
|
+
valoresVetor.push(await this.atribuir());
|
|
562
|
+
this.ignorarComentarios();
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
let tipoVetor;
|
|
566
|
+
if (valoresVetor.length === 0) {
|
|
567
|
+
tipoVetor = 'qualquer[]';
|
|
568
|
+
}
|
|
569
|
+
else {
|
|
570
|
+
const primeiroElemento = valoresVetor[0];
|
|
571
|
+
if (primeiroElemento instanceof construtos_1.Vetor) {
|
|
572
|
+
tipoVetor = primeiroElemento.tipo + '[]';
|
|
573
|
+
}
|
|
574
|
+
else {
|
|
575
|
+
tipoVetor = (0, inferenciador_1.inferirTipoVariavel)(valoresVetor);
|
|
576
|
+
}
|
|
536
577
|
}
|
|
537
|
-
const tipoVetor = (0, inferenciador_1.inferirTipoVariavel)(valoresVetor);
|
|
538
578
|
return new construtos_1.Vetor(this.hashArquivo, simboloAtual.linha, valoresVetor, tipoVetor);
|
|
539
579
|
case pitugues_2.default.COMENTARIO:
|
|
540
580
|
const simboloComentario = this.avancarEDevolverAnterior();
|
|
@@ -759,14 +799,42 @@ class AvaliadorSintaticoPitugues {
|
|
|
759
799
|
}
|
|
760
800
|
return expressao;
|
|
761
801
|
}
|
|
802
|
+
eOperadorDeComparacao(tipo) {
|
|
803
|
+
return [
|
|
804
|
+
pitugues_2.default.MAIOR,
|
|
805
|
+
pitugues_2.default.MAIOR_IGUAL,
|
|
806
|
+
pitugues_2.default.MENOR,
|
|
807
|
+
pitugues_2.default.MENOR_IGUAL
|
|
808
|
+
].includes(tipo);
|
|
809
|
+
}
|
|
810
|
+
criarConstrutoComparacao(esquerda, operador, direita) {
|
|
811
|
+
let operandoCentral = null;
|
|
812
|
+
// Lógica de desugaring para comparações encadeadas (ex: 1 < x < 10)
|
|
813
|
+
if (esquerda instanceof construtos_1.Binario &&
|
|
814
|
+
this.eOperadorDeComparacao(esquerda.operador.tipo)) {
|
|
815
|
+
operandoCentral = esquerda.direita;
|
|
816
|
+
}
|
|
817
|
+
else if (esquerda instanceof construtos_1.Logico &&
|
|
818
|
+
esquerda.direita instanceof construtos_1.Binario &&
|
|
819
|
+
this.eOperadorDeComparacao(esquerda.direita.operador.tipo)) {
|
|
820
|
+
operandoCentral = esquerda.direita.direita;
|
|
821
|
+
}
|
|
822
|
+
if (operandoCentral !== null) {
|
|
823
|
+
const operadorE = {
|
|
824
|
+
tipo: pitugues_2.default.E,
|
|
825
|
+
lexema: 'e',
|
|
826
|
+
literal: null,
|
|
827
|
+
linha: operador.linha,
|
|
828
|
+
hashArquivo: this.hashArquivo
|
|
829
|
+
};
|
|
830
|
+
const novaComparacaoDireita = new construtos_1.Binario(this.hashArquivo, operandoCentral, operador, direita);
|
|
831
|
+
return new construtos_1.Logico(this.hashArquivo, esquerda, operadorE, novaComparacaoDireita);
|
|
832
|
+
}
|
|
833
|
+
// Se não for encadeada, cria o Binário normal
|
|
834
|
+
return new construtos_1.Binario(this.hashArquivo, esquerda, operador, direita);
|
|
835
|
+
}
|
|
762
836
|
async comparar() {
|
|
763
|
-
|
|
764
|
-
while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.MAIOR, pitugues_2.default.MAIOR_IGUAL, pitugues_2.default.MENOR, pitugues_2.default.MENOR_IGUAL)) {
|
|
765
|
-
const operador = this.simboloAnterior();
|
|
766
|
-
const direito = await this.bitOu();
|
|
767
|
-
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
768
|
-
}
|
|
769
|
-
return expressao;
|
|
837
|
+
return await this.logicaComumComparacao(() => this.bitOu());
|
|
770
838
|
}
|
|
771
839
|
async comparacaoIgualdade() {
|
|
772
840
|
let expressao = await this.comparar();
|
|
@@ -909,7 +977,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
909
977
|
}
|
|
910
978
|
return expressao;
|
|
911
979
|
}
|
|
912
|
-
async declaracaoEscreva(
|
|
980
|
+
async declaracaoEscreva() {
|
|
981
|
+
const simboloEscreva = this.simboloAnterior
|
|
982
|
+
? this.simboloAnterior()
|
|
983
|
+
: this.simbolos[this.atual - 1];
|
|
913
984
|
this.consumir(pitugues_2.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
914
985
|
const argumentos = [];
|
|
915
986
|
do {
|
|
@@ -1491,10 +1562,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
1491
1562
|
this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
|
|
1492
1563
|
return definicaoClasse;
|
|
1493
1564
|
}
|
|
1494
|
-
declaracaoFalhar() {
|
|
1565
|
+
async declaracaoFalhar() {
|
|
1495
1566
|
const simboloFalha = this.simbolos[this.atual - 1];
|
|
1496
|
-
const
|
|
1497
|
-
return new declaracoes_1.Falhar(simboloFalha,
|
|
1567
|
+
const explicacao = await this.atribuir();
|
|
1568
|
+
return new declaracoes_1.Falhar(simboloFalha, explicacao);
|
|
1498
1569
|
}
|
|
1499
1570
|
/**
|
|
1500
1571
|
* Verifica se há pontos e vírgula no final de sentenças.
|
|
@@ -1600,11 +1671,11 @@ class AvaliadorSintaticoPitugues {
|
|
|
1600
1671
|
return this.declaracaoEscolha();
|
|
1601
1672
|
case pitugues_2.default.IMPRIMA:
|
|
1602
1673
|
case pitugues_2.default.ESCREVA:
|
|
1603
|
-
|
|
1604
|
-
return this.declaracaoEscreva(
|
|
1674
|
+
this.avancarEDevolverAnterior();
|
|
1675
|
+
return this.declaracaoEscreva();
|
|
1605
1676
|
case pitugues_2.default.FALHAR:
|
|
1606
1677
|
this.avancarEDevolverAnterior();
|
|
1607
|
-
return this.declaracaoFalhar();
|
|
1678
|
+
return await this.declaracaoFalhar();
|
|
1608
1679
|
case pitugues_2.default.FAZER:
|
|
1609
1680
|
this.avancarEDevolverAnterior();
|
|
1610
1681
|
return this.declaracaoFazer();
|