@designliquido/delegua 0.45.8 → 0.45.10
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/README.md +3 -0
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js +2 -8
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +13 -6
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +5 -4
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/bin/package.json +1 -1
- package/depuracao/cyrb53.d.ts +4 -4
- package/depuracao/cyrb53.d.ts.map +1 -1
- package/depuracao/cyrb53.js +4 -4
- package/interpretador/estruturas/funcao-padrao.d.ts +7 -0
- package/interpretador/estruturas/funcao-padrao.d.ts.map +1 -1
- package/interpretador/estruturas/funcao-padrao.js +1 -0
- package/interpretador/estruturas/funcao-padrao.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js +1 -0
- package/lexador/lexador.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts +1 -0
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js +1 -0
- package/lexador/palavras-reservadas.js.map +1 -1
- package/package.json +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-reverso-javascript.js.map +1 -1
- package/umd/delegua.js +27 -22
package/umd/delegua.js
CHANGED
|
@@ -56,13 +56,6 @@ class AvaliadorSintaticoBase {
|
|
|
56
56
|
this.atual += 1;
|
|
57
57
|
return this.simbolos[this.atual - 1];
|
|
58
58
|
}
|
|
59
|
-
// TODO: Verificar possibilidade de remoção.
|
|
60
|
-
// Regressão de símbolo é uma roubada por N razões.
|
|
61
|
-
regredirEDevolverAtual() {
|
|
62
|
-
if (this.atual > 0)
|
|
63
|
-
this.atual -= 1;
|
|
64
|
-
return this.simbolos[this.atual];
|
|
65
|
-
}
|
|
66
59
|
verificarSeSimboloAtualEIgualA(...argumentos) {
|
|
67
60
|
for (let i = 0; i < argumentos.length; i++) {
|
|
68
61
|
const tipoAtual = argumentos[i];
|
|
@@ -169,7 +162,8 @@ class AvaliadorSintaticoBase {
|
|
|
169
162
|
return this.atribuir();
|
|
170
163
|
}
|
|
171
164
|
funcao(tipo) {
|
|
172
|
-
|
|
165
|
+
// Avançar `função` ou `funcao`.
|
|
166
|
+
this.avancarEDevolverAnterior();
|
|
173
167
|
const nomeFuncao = this.consumir(comum_1.default.IDENTIFICADOR, `Esperado nome ${tipo}.`);
|
|
174
168
|
return new declaracoes_1.FuncaoDeclaracao(nomeFuncao, this.corpoDaFuncao(tipo));
|
|
175
169
|
}
|
|
@@ -610,6 +604,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
610
604
|
return new construtos_1.AcessoMetodo(construtoTipado.hashArquivo, construtoTipado.objeto, construtoTipado.simbolo.lexema, primitivaNumeroSelecionada.tipoRetorno);
|
|
611
605
|
case delegua_1.default.MODULO:
|
|
612
606
|
case delegua_1.default.MÓDULO:
|
|
607
|
+
// Há dois casos para resolução de módulo:
|
|
608
|
+
// Um quando o módulo é definido no próprio código (por exemplo, em um outro arquivo `.delegua`).
|
|
609
|
+
// Outro quando é importado de uma biblioteca externa.
|
|
610
|
+
// Este é o caso quando o módulo vem de outro arquivo `.delegua`.
|
|
613
611
|
if (construtoTipado.simbolo.lexema in this.tiposDefinidosEmCodigo) {
|
|
614
612
|
// Construtor de classe.
|
|
615
613
|
return new construtos_1.Variavel(construtoTipado.hashArquivo, construtoTipado.simbolo, construtoTipado.objeto.tipo);
|
|
@@ -645,7 +643,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
645
643
|
}
|
|
646
644
|
const argumentoEntidadeChamadaQualquer = argumentoEntidadeChamada.tipo.startsWith('qualquer');
|
|
647
645
|
const argumentoUtilizadoQualquer = argumentoUtilizado.tipo.startsWith('qualquer');
|
|
648
|
-
// Este caso é tarefa do
|
|
646
|
+
// Este caso é tarefa do analisador semântico apontar.
|
|
649
647
|
if (argumentoEntidadeChamadaQualquer || argumentoUtilizadoQualquer) {
|
|
650
648
|
continue;
|
|
651
649
|
}
|
|
@@ -678,7 +676,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
678
676
|
if (tipoPrimitiva === undefined) {
|
|
679
677
|
// Provavelmente uma chamada a alguma função da biblioteca global.
|
|
680
678
|
const informacoesPossivelFuncaoBibliotecaGlobal = this.pilhaEscopos.obterBibliotecaGlobal(entidadeChamadaResolvidaVariavel.simbolo.lexema);
|
|
681
|
-
if (informacoesPossivelFuncaoBibliotecaGlobal
|
|
679
|
+
if (informacoesPossivelFuncaoBibliotecaGlobal) {
|
|
682
680
|
const erros = this.validarArgumentosEntidadeChamada(informacoesPossivelFuncaoBibliotecaGlobal.argumentos, argumentos);
|
|
683
681
|
if (erros.length > 0) {
|
|
684
682
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaResolvidaVariavel.simbolo, `Erros ao resolver argumentos de chamada a ${entidadeChamadaResolvidaVariavel.simbolo.lexema}: \n${erros.reduce((mensagem, erro) => (mensagem += `${erro}\n`), '')}`);
|
|
@@ -723,8 +721,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
723
721
|
this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
|
|
724
722
|
// Toda chamada precisa saber de antemão qual o tipo resolvido.
|
|
725
723
|
const entidadeChamadaResolvida = this.resolverEntidadeChamada(entidadeChamada, argumentos, tipoPrimitiva);
|
|
726
|
-
// TODO: Criar forma de validar tipos dos argumentos da entidade chamada.
|
|
727
724
|
const construtoChamada = new construtos_1.Chamada(this.hashArquivo, entidadeChamadaResolvida, argumentos);
|
|
725
|
+
// A validação de tipos dos argumentos da entidade chamada existe em
|
|
726
|
+
// avaliadores sintáticos derivados deste, como em `delegua-node`.
|
|
727
|
+
// Pode ser que esta lógica seja trazida para cá no futuro.
|
|
728
728
|
construtoChamada.tipo = 'qualquer';
|
|
729
729
|
return construtoChamada;
|
|
730
730
|
}
|
|
@@ -1070,7 +1070,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1070
1070
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
|
|
1071
1071
|
}
|
|
1072
1072
|
const tipoVetor = vetor.tipo;
|
|
1073
|
-
if (!tipoVetor.endsWith('[]') &&
|
|
1073
|
+
if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
|
|
1074
1074
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
|
|
1075
1075
|
}
|
|
1076
1076
|
let tipoVariavelIteracao = 'qualquer';
|
|
@@ -1524,8 +1524,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1524
1524
|
// para ela. Vai ser atualizado após avaliação do corpo da função.
|
|
1525
1525
|
this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, 'qualquer'));
|
|
1526
1526
|
const corpoDaFuncao = this.corpoDaFuncao(tipo);
|
|
1527
|
-
|
|
1528
|
-
|
|
1527
|
+
const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
|
|
1528
|
+
this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, tipoDaFuncao));
|
|
1529
|
+
const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao, decoradores);
|
|
1529
1530
|
this.pilhaEscopos.registrarReferenciaFuncao(simbolo.lexema, funcaoDeclaracao);
|
|
1530
1531
|
return funcaoDeclaracao;
|
|
1531
1532
|
}
|
|
@@ -3216,7 +3217,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
3216
3217
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não parece possuir um tipo iterável.`);
|
|
3217
3218
|
}
|
|
3218
3219
|
const tipoVetor = vetor.tipo;
|
|
3219
|
-
if (!tipoVetor.endsWith('[]') &&
|
|
3220
|
+
if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
|
|
3220
3221
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
|
|
3221
3222
|
}
|
|
3222
3223
|
this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelIteracao.lexema, tipoVetor.slice(0, -2)));
|
|
@@ -3389,8 +3390,9 @@ class AvaliadorSintaticoPitugues {
|
|
|
3389
3390
|
// para ela. Vai ser atualizado após avaliação do corpo da função.
|
|
3390
3391
|
this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, 'qualquer'));
|
|
3391
3392
|
const corpoDaFuncao = this.corpoDaFuncao(tipo);
|
|
3392
|
-
|
|
3393
|
-
|
|
3393
|
+
const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
|
|
3394
|
+
this.pilhaEscopos.definirInformacoesVariavel(simbolo.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(simbolo.lexema, tipoDaFuncao));
|
|
3395
|
+
const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao);
|
|
3394
3396
|
this.pilhaEscopos.registrarReferenciaFuncao(simbolo.lexema, funcaoDeclaracao);
|
|
3395
3397
|
return funcaoDeclaracao;
|
|
3396
3398
|
}
|
|
@@ -3482,7 +3484,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
3482
3484
|
inicializarPilhaEscopos() {
|
|
3483
3485
|
this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
|
|
3484
3486
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
3485
|
-
// Funções nativas de Delégua
|
|
3487
|
+
// Funções nativas de Delégua (e de Pituguês também, por enquanto)
|
|
3486
3488
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('aleatorio', 'inteiro', [
|
|
3487
3489
|
new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante('número', 'número'),
|
|
3488
3490
|
]));
|
|
@@ -7797,11 +7799,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7797
7799
|
exports.default = cyrb53;
|
|
7798
7800
|
/**
|
|
7799
7801
|
* Função de geração de hashes copiada de https://stackoverflow.com/a/52171480/1314276.
|
|
7800
|
-
* A ideia é gerar
|
|
7802
|
+
* A ideia é gerar _hashes_ únicos para nomes de arquivos importados e usar o _hash_ para os
|
|
7801
7803
|
* pragmas de elementos catalogados pelo lexador e usados pelo interpretador.
|
|
7802
|
-
* @param nomeArquivo Nome do arquivo
|
|
7803
|
-
* @param semente Uma semente de dispersão, padrão: 0
|
|
7804
|
-
* @returns
|
|
7804
|
+
* @param {string} nomeArquivo Nome do arquivo
|
|
7805
|
+
* @param {number} semente Uma semente de dispersão, padrão: 0
|
|
7806
|
+
* @returns {number} Número inteiro com o hash correspondente ao nome do arquivo
|
|
7805
7807
|
*/
|
|
7806
7808
|
function cyrb53(nomeArquivo, semente = 0) {
|
|
7807
7809
|
let h1 = 0xdeadbeef ^ semente, h2 = 0x41c6ce57 ^ semente;
|
|
@@ -9514,6 +9516,7 @@ const chamavel_1 = require("./chamavel");
|
|
|
9514
9516
|
class FuncaoPadrao extends chamavel_1.Chamavel {
|
|
9515
9517
|
constructor(valorAridade, funcao) {
|
|
9516
9518
|
super();
|
|
9519
|
+
this.descartarPrimeiroArgumento = true;
|
|
9517
9520
|
this.valorAridade = valorAridade;
|
|
9518
9521
|
this.funcao = funcao;
|
|
9519
9522
|
}
|
|
@@ -14059,6 +14062,7 @@ class Lexador {
|
|
|
14059
14062
|
}
|
|
14060
14063
|
if (this.performance) {
|
|
14061
14064
|
const deltaMapeamento = (0, browser_process_hrtime_1.default)(inicioMapeamento);
|
|
14065
|
+
// eslint-disable-next-line no-undef
|
|
14062
14066
|
console.log(`[Lexador] Tempo para mapeamento: ${deltaMapeamento[0] * 1e9 + deltaMapeamento[1]}ns`);
|
|
14063
14067
|
}
|
|
14064
14068
|
return {
|
|
@@ -14321,6 +14325,7 @@ exports.palavrasReservadas = {
|
|
|
14321
14325
|
nulo: delegua_1.default.NULO,
|
|
14322
14326
|
ou: delegua_1.default.OU,
|
|
14323
14327
|
padrao: delegua_1.default.PADRAO,
|
|
14328
|
+
padrão: delegua_1.default.PADRAO,
|
|
14324
14329
|
para: delegua_1.default.PARA,
|
|
14325
14330
|
pausa: delegua_1.default.PAUSA,
|
|
14326
14331
|
pegue: delegua_1.default.PEGUE,
|