@designliquido/delegua 1.18.1 → 1.18.2
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 +21 -2
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +19 -2
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +8 -8
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +19 -19
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bin/package.json +2 -2
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +78 -158
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +1 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +9 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/package.json +2 -2
- package/umd/delegua.js +48 -12
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/delegua",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.2",
|
|
4
4
|
"description": "Linguagem de programação simples e moderna usando português estruturado.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"jest": "^30.0.2",
|
|
103
103
|
"jest-coverage-badges": "^1.1.2",
|
|
104
104
|
"prettier": "^3.5.3",
|
|
105
|
-
"release-it": "^
|
|
105
|
+
"release-it": "^20.0.0",
|
|
106
106
|
"rimraf": "^6.0.1",
|
|
107
107
|
"ts-jest": "^29.3.0",
|
|
108
108
|
"ts-node": "^10.9.2",
|
package/umd/delegua.js
CHANGED
|
@@ -822,6 +822,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
822
822
|
visitarDeclaracaoEscolha(declaracao) {
|
|
823
823
|
const identificadorOuLiteral = declaracao.identificadorOuLiteral;
|
|
824
824
|
const tipo = identificadorOuLiteral.tipo || 'qualquer';
|
|
825
|
+
const tiposLiteraisCasos = [];
|
|
825
826
|
for (let caminho of declaracao.caminhos) {
|
|
826
827
|
for (let condicao of caminho.condicoes) {
|
|
827
828
|
switch (condicao.constructor) {
|
|
@@ -830,7 +831,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
830
831
|
const tiposNumericos = ['inteiro', 'número', 'real'];
|
|
831
832
|
const ambosSaoNumericos = tiposNumericos.includes(condicaoLiteral.tipo) &&
|
|
832
833
|
tiposNumericos.includes(tipo);
|
|
833
|
-
if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos) {
|
|
834
|
+
if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos && tipo !== 'qualquer') {
|
|
834
835
|
this.erro({
|
|
835
836
|
lexema: condicaoLiteral.valor,
|
|
836
837
|
tipo: condicaoLiteral.tipo,
|
|
@@ -838,6 +839,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
838
839
|
hashArquivo: condicaoLiteral.hashArquivo,
|
|
839
840
|
}, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
|
|
840
841
|
}
|
|
842
|
+
tiposLiteraisCasos.push(condicaoLiteral.tipo);
|
|
841
843
|
break;
|
|
842
844
|
case construtos_1.Variavel:
|
|
843
845
|
const condicaoVariavel = condicao;
|
|
@@ -850,6 +852,23 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
850
852
|
}
|
|
851
853
|
}
|
|
852
854
|
}
|
|
855
|
+
if (tipo === 'qualquer' && tiposLiteraisCasos.length > 0 && identificadorOuLiteral instanceof construtos_1.Variavel) {
|
|
856
|
+
const tiposUnicos = [...new Set(tiposLiteraisCasos)];
|
|
857
|
+
if (tiposUnicos.length === 1) {
|
|
858
|
+
const tipoInferido = tiposUnicos[0];
|
|
859
|
+
const variavelEscopo = this.gerenciadorEscopos.buscar(identificadorOuLiteral.simbolo.lexema);
|
|
860
|
+
if (variavelEscopo) {
|
|
861
|
+
this.sugestao(identificadorOuLiteral.simbolo, `Um tipo melhor pode ser inferido para '${identificadorOuLiteral.simbolo.lexema}': '${tipoInferido}'`, [{
|
|
862
|
+
titulo: `Alterar tipo de '${identificadorOuLiteral.simbolo.lexema}' para '${tipoInferido}'`,
|
|
863
|
+
textoOriginal: 'qualquer',
|
|
864
|
+
textoSubstituto: tipoInferido,
|
|
865
|
+
linha: variavelEscopo.linha,
|
|
866
|
+
colunaInicio: 0,
|
|
867
|
+
colunaFim: 0,
|
|
868
|
+
}]);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
}
|
|
853
872
|
return Promise.resolve();
|
|
854
873
|
}
|
|
855
874
|
async visitarDeclaracaoEnquanto(declaracao) {
|
|
@@ -1277,7 +1296,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1277
1296
|
this.erro(argumento.simbolo, `Variável ou função '${argumento.simbolo.lexema}' não existe.`);
|
|
1278
1297
|
continue;
|
|
1279
1298
|
}
|
|
1280
|
-
if (possivelVariavel && possivelVariavel.
|
|
1299
|
+
if (possivelVariavel && !possivelVariavel.inicializada) {
|
|
1281
1300
|
this.aviso(argumento.simbolo, `Variável '${argumento.simbolo.lexema}' não foi inicializada.`);
|
|
1282
1301
|
}
|
|
1283
1302
|
}
|
|
@@ -3823,9 +3842,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3823
3842
|
// Isso ocorre quando a importação é feita de uma biblioteca Node.js.
|
|
3824
3843
|
// Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
|
|
3825
3844
|
if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
3826
|
-
const
|
|
3845
|
+
const tipoObjeto = entidadeChamada.objeto.tipo;
|
|
3846
|
+
// Classe definida em código (local ou importada de arquivo .delegua) tem precedência.
|
|
3847
|
+
if (tipoObjeto in this.tiposDefinidosEmCodigo) {
|
|
3848
|
+
const classeDefinida = this.tiposDefinidosEmCodigo[tipoObjeto];
|
|
3849
|
+
if (classeDefinida instanceof declaracoes_1.Classe) {
|
|
3850
|
+
const nomeMembro = entidadeChamada.simbolo.lexema;
|
|
3851
|
+
const metodo = classeDefinida.metodos?.find(m => m.simbolo.lexema === nomeMembro);
|
|
3852
|
+
if (metodo) {
|
|
3853
|
+
return metodo.tipo || 'qualquer';
|
|
3854
|
+
}
|
|
3855
|
+
const propriedade = classeDefinida.propriedades?.find(p => p.nome.lexema === nomeMembro);
|
|
3856
|
+
if (propriedade) {
|
|
3857
|
+
return propriedade.tipo || 'qualquer';
|
|
3858
|
+
}
|
|
3859
|
+
return 'qualquer';
|
|
3860
|
+
}
|
|
3861
|
+
}
|
|
3862
|
+
const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[tipoObjeto];
|
|
3827
3863
|
if (!tipoCorrespondente) {
|
|
3828
|
-
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${
|
|
3864
|
+
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${tipoObjeto}' não foi encontrado entre os tipos definidos por bibliotecas.`);
|
|
3829
3865
|
}
|
|
3830
3866
|
if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
|
|
3831
3867
|
!(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
|
|
@@ -7414,7 +7450,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7414
7450
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
7415
7451
|
// Funções nativas de Delégua (e de Pituguês também, por enquanto)
|
|
7416
7452
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
|
|
7417
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7453
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
|
|
7418
7454
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
7419
7455
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
7420
7456
|
]));
|
|
@@ -7430,19 +7466,19 @@ class AvaliadorSintaticoPitugues {
|
|
|
7430
7466
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7431
7467
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7432
7468
|
]));
|
|
7433
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7469
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_indice', 'inteiro', true, [
|
|
7434
7470
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7435
7471
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7436
7472
|
]));
|
|
7437
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7473
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo', 'inteiro', true, [
|
|
7438
7474
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7439
7475
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7440
7476
|
]));
|
|
7441
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7477
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo_indice', 'inteiro', true, [
|
|
7442
7478
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7443
7479
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7444
7480
|
]));
|
|
7445
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7481
|
+
this.pilhaEscopos.definirInformacoesVariavel('filtrar_por', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrar_por', 'qualquer[]', true, [
|
|
7446
7482
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7447
7483
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7448
7484
|
]));
|
|
@@ -7481,11 +7517,11 @@ class AvaliadorSintaticoPitugues {
|
|
|
7481
7517
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7482
7518
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoOrdenacao', 'função'),
|
|
7483
7519
|
]));
|
|
7484
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7520
|
+
this.pilhaEscopos.definirInformacoesVariavel('para_cada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('para_cada', 'qualquer[]', true, [
|
|
7485
7521
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7486
7522
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7487
7523
|
]));
|
|
7488
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7524
|
+
this.pilhaEscopos.definirInformacoesVariavel('primeiro_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiro_em_condicao', 'qualquer', true, [
|
|
7489
7525
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7490
7526
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7491
7527
|
]));
|
|
@@ -7512,7 +7548,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7512
7548
|
this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
|
|
7513
7549
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7514
7550
|
]));
|
|
7515
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7551
|
+
this.pilhaEscopos.definirInformacoesVariavel('todos_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos_em_condicao', 'lógico', true, [
|
|
7516
7552
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7517
7553
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
|
|
7518
7554
|
]));
|