@designliquido/delegua 0.57.1 → 0.58.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.d.ts +7 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +69 -14
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +3 -3
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +26 -10
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts +23 -0
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -0
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js +199 -0
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -0
- package/avaliador-sintatico/elemento-montao-tipos.d.ts.map +1 -1
- package/avaliador-sintatico/elemento-montao-tipos.js.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/montao-tipos.d.ts +1 -1
- package/avaliador-sintatico/montao-tipos.d.ts.map +1 -1
- package/avaliador-sintatico/montao-tipos.js.map +1 -1
- package/avaliador-sintatico/pilha-escopos.d.ts.map +1 -1
- package/avaliador-sintatico/pilha-escopos.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts +7 -0
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +206 -0
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +8 -2
- package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +169 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +686 -0
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts +6 -0
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js +56 -0
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts +6 -0
- package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-numero.js +84 -0
- package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts +6 -0
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js +254 -0
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts +6 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +373 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -0
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +41 -13
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/elvis.d.ts +2 -2
- package/construtos/elvis.d.ts.map +1 -1
- package/construtos/elvis.js.map +1 -1
- package/construtos/enquanto-como-construto.d.ts +4 -4
- package/construtos/fazer-como-construto.d.ts +4 -4
- package/construtos/importar-como-construto.d.ts +3 -3
- package/construtos/importar-como-construto.d.ts.map +1 -1
- package/construtos/importar-como-construto.js.map +1 -1
- package/construtos/para-cada-como-construto.d.ts +6 -6
- package/construtos/para-como-construto.d.ts +4 -4
- package/construtos/se-ternario.d.ts +2 -2
- package/formatadores/formatador-pitugues.d.ts.map +1 -1
- package/formatadores/formatador-pitugues.js.map +1 -1
- package/geracao-identificadores/index.d.ts.map +1 -1
- package/geracao-identificadores/index.js.map +1 -1
- package/informacao-elemento-sintatico.d.ts +1 -1
- package/interfaces/delegua/enquanto-interface.d.ts +2 -2
- package/interfaces/delegua/fazer-interface.d.ts +2 -2
- package/interfaces/delegua/para-cada-interface.d.ts +2 -2
- package/interfaces/delegua/para-interface.d.ts +2 -2
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interfaces/visitante-delegua-interface.d.ts +3 -3
- package/interfaces/visitante-delegua-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +1 -0
- package/interpretador/comum.js.map +1 -1
- package/interpretador/depuracao/comum.d.ts.map +1 -1
- package/interpretador/depuracao/comum.js +6 -3
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/index.d.ts +2 -0
- package/interpretador/dialetos/pitugues/index.d.ts.map +1 -0
- package/interpretador/dialetos/pitugues/index.js +18 -0
- package/interpretador/dialetos/pitugues/index.js.map +1 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +17 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +248 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -0
- package/interpretador/estruturas/classe-de-modulo.d.ts +1 -1
- package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
- package/interpretador/estruturas/classe-de-modulo.js.map +1 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +2 -5
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts +5 -0
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +39 -22
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/dialetos/lexador-pitugues.js.map +1 -1
- package/lexador/dialetos/palavras-reservadas/pitugues.d.ts +1 -0
- package/lexador/dialetos/palavras-reservadas/pitugues.d.ts.map +1 -1
- package/lexador/dialetos/palavras-reservadas/pitugues.js +2 -1
- package/lexador/dialetos/palavras-reservadas/pitugues.js.map +1 -1
- package/lexador/micro-lexador-pitugues.d.ts +30 -0
- package/lexador/micro-lexador-pitugues.d.ts.map +1 -0
- package/lexador/micro-lexador-pitugues.js +210 -0
- package/lexador/micro-lexador-pitugues.js.map +1 -0
- package/package.json +1 -1
- package/quebras/index.d.ts.map +1 -1
- package/quebras/index.js.map +1 -1
- package/tipos-de-simbolos/pitugues.d.ts.map +1 -1
- package/tipos-de-simbolos/pitugues.js.map +1 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js.map +1 -1
- package/umd/delegua.js +389 -68
package/umd/delegua.js
CHANGED
|
@@ -293,6 +293,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
293
293
|
this.primitivasConhecidas = {};
|
|
294
294
|
this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
|
|
295
295
|
this.montaoTipos = new montao_tipos_1.MontaoTipos();
|
|
296
|
+
this.intuirTipoQualquerParaIdentificadores = false;
|
|
296
297
|
(0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'dicionário', primitivas_dicionario_1.default);
|
|
297
298
|
(0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'número', primitivas_numero_1.default);
|
|
298
299
|
(0, comum_1.registrarPrimitiva)(this.primitivasConhecidas, 'texto', primitivas_texto_1.default);
|
|
@@ -443,6 +444,34 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
443
444
|
this.blocos -= 1;
|
|
444
445
|
}
|
|
445
446
|
}
|
|
447
|
+
/**
|
|
448
|
+
* Resolve uma lista de compreensão.
|
|
449
|
+
* @returns {ListaCompreensao} A lista de compreensão resolvida.
|
|
450
|
+
*/
|
|
451
|
+
resolverCompreensaoDeLista(retornoExpressao) {
|
|
452
|
+
this.consumir(delegua_2.default.PARA, "Esperado instrução 'para' após identificado.");
|
|
453
|
+
this.consumir(delegua_2.default.CADA, "Esperado instrução 'cada' após 'para'.");
|
|
454
|
+
const simboloVariavelIteracao = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
|
|
455
|
+
if (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.DE, delegua_2.default.EM)) {
|
|
456
|
+
throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução em lista de compreensão.");
|
|
457
|
+
}
|
|
458
|
+
const localizacaoVetor = this.simboloAnterior();
|
|
459
|
+
const vetor = this.ou();
|
|
460
|
+
this.consumir(delegua_2.default.SE, "Esperado condição 'se' após vetor.");
|
|
461
|
+
const condicao = this.expressao();
|
|
462
|
+
this.consumir(delegua_2.default.COLCHETE_DIREITO, 'Espero fechamento de colchetes após condição.');
|
|
463
|
+
const tipoVetor = vetor.tipo;
|
|
464
|
+
if (!tipoVetor.endsWith('[]') && !['qualquer', 'vetor'].includes(tipoVetor)) {
|
|
465
|
+
throw this.erro(localizacaoVetor, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
|
|
466
|
+
}
|
|
467
|
+
const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao);
|
|
468
|
+
return new construtos_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
469
|
+
new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
470
|
+
new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao),
|
|
471
|
+
]), [], null),
|
|
472
|
+
])), 'qualquer[]' // TODO: Talvez um dia inferir o tipo aqui.
|
|
473
|
+
);
|
|
474
|
+
}
|
|
446
475
|
primario() {
|
|
447
476
|
const simboloAtual = this.simbolos[this.atual];
|
|
448
477
|
let valores = [];
|
|
@@ -458,6 +487,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
458
487
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
|
|
459
488
|
return this.construtoTupla();
|
|
460
489
|
}
|
|
490
|
+
// Ao resolver a expressão aqui, identificadores dentro da expressão de compreensão
|
|
491
|
+
// de lista serão tratados como 'qualquer', para evitar erros de tipo.
|
|
492
|
+
this.intuirTipoQualquerParaIdentificadores = true;
|
|
493
|
+
const retornoExpressaoOuPrimeiroValor = this.seTernario();
|
|
494
|
+
this.intuirTipoQualquerParaIdentificadores = false;
|
|
495
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.PARA) {
|
|
496
|
+
return this.resolverCompreensaoDeLista(retornoExpressaoOuPrimeiroValor);
|
|
497
|
+
}
|
|
498
|
+
// Aqui já sabemos que não é uma compreensão de lista.
|
|
499
|
+
valores.push(retornoExpressaoOuPrimeiroValor);
|
|
461
500
|
while (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.COLCHETE_DIREITO)) {
|
|
462
501
|
switch (this.simbolos[this.atual].tipo) {
|
|
463
502
|
case delegua_2.default.VIRGULA:
|
|
@@ -469,7 +508,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
469
508
|
valores.push(new construtos_1.ComentarioComoConstruto(simboloComentario));
|
|
470
509
|
break;
|
|
471
510
|
default:
|
|
472
|
-
const valor = this.
|
|
511
|
+
const valor = this.seTernario();
|
|
473
512
|
valores.push(valor);
|
|
474
513
|
break;
|
|
475
514
|
}
|
|
@@ -527,7 +566,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
527
566
|
case delegua_2.default.IDENTIFICADOR:
|
|
528
567
|
const simboloIdentificador = this.avancarEDevolverAnterior();
|
|
529
568
|
let tipoOperando;
|
|
530
|
-
if (
|
|
569
|
+
if (this.intuirTipoQualquerParaIdentificadores) {
|
|
570
|
+
// Esta indicação é utilizada para compreensões de lista, onde o
|
|
571
|
+
// tipo do identificador de iteração é 'qualquer' por definição.
|
|
572
|
+
tipoOperando = 'qualquer';
|
|
573
|
+
this.pilhaEscopos.definirInformacoesVariavel(simboloIdentificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloIdentificador.lexema, 'qualquer') // TODO: Talvez um dia inferir o tipo aqui.
|
|
574
|
+
);
|
|
575
|
+
}
|
|
576
|
+
else if (simboloIdentificador.lexema in this.tiposDefinidosEmCodigo) {
|
|
531
577
|
tipoOperando = simboloIdentificador.lexema;
|
|
532
578
|
}
|
|
533
579
|
else {
|
|
@@ -663,7 +709,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
663
709
|
const nome = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado nome de método ou propriedade após '.'.");
|
|
664
710
|
let tipoInferido = expressaoAnterior.tipo;
|
|
665
711
|
// Se não for um dicionário anônimo (ou seja, ser variável ou constante com nome)
|
|
666
|
-
if (expressaoAnterior.tipo === 'dicionário' &&
|
|
712
|
+
if (expressaoAnterior.tipo === 'dicionário' &&
|
|
713
|
+
expressaoAnterior.constructor !== construtos_1.Dicionario) {
|
|
667
714
|
// TODO: Achar algum caso em que aqui não seja variável.
|
|
668
715
|
const nomeDicionario = expressaoAnterior.simbolo.lexema;
|
|
669
716
|
const elementoDicionarioPilha = this.pilhaEscopos.obterElementoMontaoTipos(nomeDicionario);
|
|
@@ -1082,7 +1129,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1082
1129
|
const corpo = this.resolverDeclaracao();
|
|
1083
1130
|
return {
|
|
1084
1131
|
condicao,
|
|
1085
|
-
corpo
|
|
1132
|
+
corpo,
|
|
1086
1133
|
};
|
|
1087
1134
|
}
|
|
1088
1135
|
declaracaoEnquanto() {
|
|
@@ -1187,7 +1234,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1187
1234
|
const condicaoEnquanto = this.expressao();
|
|
1188
1235
|
return {
|
|
1189
1236
|
caminhoFazer,
|
|
1190
|
-
condicaoEnquanto
|
|
1237
|
+
condicaoEnquanto,
|
|
1191
1238
|
};
|
|
1192
1239
|
}
|
|
1193
1240
|
declaracaoFazer(simboloFazer) {
|
|
@@ -1218,7 +1265,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1218
1265
|
case delegua_2.default.CHAVE_ESQUERDA:
|
|
1219
1266
|
this.avancarEDevolverAnterior();
|
|
1220
1267
|
do {
|
|
1221
|
-
const identificadorImportacao = this.consumir(delegua_2.default.IDENTIFICADOR,
|
|
1268
|
+
const identificadorImportacao = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado identificador de elemento a ser importado.');
|
|
1222
1269
|
elementosImportacao.push(identificadorImportacao);
|
|
1223
1270
|
} while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
|
|
1224
1271
|
this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após lista de elementos a serem importados.");
|
|
@@ -1285,7 +1332,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1285
1332
|
nomeVariavelChave,
|
|
1286
1333
|
nomeVariavelValor,
|
|
1287
1334
|
dicionario,
|
|
1288
|
-
corpo
|
|
1335
|
+
corpo,
|
|
1289
1336
|
};
|
|
1290
1337
|
}
|
|
1291
1338
|
declaracaoParaCadaDicionario(simboloPara) {
|
|
@@ -1309,7 +1356,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1309
1356
|
}
|
|
1310
1357
|
}
|
|
1311
1358
|
const tipoVetor = vetor.tipo;
|
|
1312
|
-
if (!tipoVetor.endsWith('[]') &&
|
|
1359
|
+
if (!tipoVetor.endsWith('[]') &&
|
|
1360
|
+
!['dicionário', 'qualquer', 'texto', 'vetor'].includes(tipoVetor)) {
|
|
1313
1361
|
throw this.erro(simboloPara, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
|
|
1314
1362
|
}
|
|
1315
1363
|
let tipoVariavelIteracao = 'qualquer';
|
|
@@ -1322,7 +1370,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1322
1370
|
return {
|
|
1323
1371
|
variavelIteracao,
|
|
1324
1372
|
vetor,
|
|
1325
|
-
corpo
|
|
1373
|
+
corpo,
|
|
1326
1374
|
};
|
|
1327
1375
|
}
|
|
1328
1376
|
declaracaoParaCadaVetor(simboloPara) {
|
|
@@ -1373,7 +1421,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1373
1421
|
inicializador,
|
|
1374
1422
|
condicao,
|
|
1375
1423
|
incrementar,
|
|
1376
|
-
corpo
|
|
1424
|
+
corpo,
|
|
1377
1425
|
};
|
|
1378
1426
|
}
|
|
1379
1427
|
declaracaoParaTradicional(simboloPara) {
|
|
@@ -1642,11 +1690,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1642
1690
|
if (!tipoCorrespondente) {
|
|
1643
1691
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaAcessoMetodoOuPropriedade.simbolo, `Tipo '${entidadeChamadaAcessoMetodoOuPropriedade.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
|
|
1644
1692
|
}
|
|
1645
|
-
if (!(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
|
|
1646
|
-
|
|
1693
|
+
if (!(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
|
|
1694
|
+
tipoCorrespondente.metodos) &&
|
|
1695
|
+
!(entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
|
|
1696
|
+
tipoCorrespondente.propriedades)) {
|
|
1647
1697
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamadaAcessoMetodoOuPropriedade.simbolo, `Membro '${entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema}' não existe no tipo '${entidadeChamadaAcessoMetodoOuPropriedade.objeto.tipo}'.`);
|
|
1648
1698
|
}
|
|
1649
|
-
if (entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
|
|
1699
|
+
if (entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema in
|
|
1700
|
+
tipoCorrespondente.metodos) {
|
|
1650
1701
|
return tipoCorrespondente.metodos[entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema].tipo;
|
|
1651
1702
|
}
|
|
1652
1703
|
return tipoCorrespondente.propriedades[entidadeChamadaAcessoMetodoOuPropriedade.simbolo.lexema].tipo;
|
|
@@ -1713,7 +1764,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1713
1764
|
for (var i = 0; i < construto.valores.length; i++) {
|
|
1714
1765
|
const chaveCorrespondente = this.resolverValorConstruto(construto.chaves[i]);
|
|
1715
1766
|
const valorCorrespondente = construto.valores[i];
|
|
1716
|
-
subElementos[chaveCorrespondente] =
|
|
1767
|
+
subElementos[chaveCorrespondente] =
|
|
1768
|
+
this.resolverInformacaoElementoSintaticoDeDicionario(valorCorrespondente);
|
|
1717
1769
|
}
|
|
1718
1770
|
retorno.subElementos = subElementos;
|
|
1719
1771
|
const endereco = this.montaoTipos.adicionarReferencia(retorno);
|
|
@@ -2066,6 +2118,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2066
2118
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
2067
2119
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
2068
2120
|
]));
|
|
2121
|
+
this.pilhaEscopos.definirInformacoesVariavel('clonar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('clonar', 'qualquer', true, [
|
|
2122
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
2123
|
+
]));
|
|
2069
2124
|
this.pilhaEscopos.definirInformacoesVariavel('encontrar', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar', 'qualquer', true, [
|
|
2070
2125
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
2071
2126
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
@@ -3182,7 +3237,6 @@ const primitivas_dicionario_1 = __importDefault(require("../../bibliotecas/primi
|
|
|
3182
3237
|
const primitivas_numero_1 = __importDefault(require("../../bibliotecas/primitivas-numero"));
|
|
3183
3238
|
const primitivas_texto_1 = __importDefault(require("../../bibliotecas/primitivas-texto"));
|
|
3184
3239
|
const primitivas_vetor_1 = __importDefault(require("../../bibliotecas/primitivas-vetor"));
|
|
3185
|
-
const lista_compreensao_1 = require("../../construtos/lista-compreensao");
|
|
3186
3240
|
/**
|
|
3187
3241
|
* O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
3188
3242
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
@@ -3409,8 +3463,9 @@ class AvaliadorSintaticoPitugues {
|
|
|
3409
3463
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
|
|
3410
3464
|
return new construtos_1.Vetor(this.hashArquivo, simboloAtual.linha, [], 0, 'qualquer[]');
|
|
3411
3465
|
}
|
|
3412
|
-
if (this.simbolos[this.atual].tipo == 'IDENTIFICADOR' &&
|
|
3413
|
-
|
|
3466
|
+
if (this.simbolos[this.atual].tipo == 'IDENTIFICADOR' &&
|
|
3467
|
+
!this.verificarTipoProximoSimbolo(pitugues_2.default.VIRGULA)) {
|
|
3468
|
+
return this.resolverCompreensaoDeLista();
|
|
3414
3469
|
}
|
|
3415
3470
|
while (!this.verificarSeSimboloAtualEIgualA(pitugues_2.default.COLCHETE_DIREITO)) {
|
|
3416
3471
|
const valor = this.atribuir();
|
|
@@ -3617,8 +3672,22 @@ class AvaliadorSintaticoPitugues {
|
|
|
3617
3672
|
}
|
|
3618
3673
|
return expressao;
|
|
3619
3674
|
}
|
|
3675
|
+
seTernario() {
|
|
3676
|
+
let expressaoEntao = this.ou();
|
|
3677
|
+
if (this.simbolos[this.atual] && this.simbolos[this.atual].tipo === pitugues_2.default.SE && expressaoEntao.linha === this.simbolos[this.atual].linha) {
|
|
3678
|
+
while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
|
|
3679
|
+
const operador = this.simbolos[this.atual - 1];
|
|
3680
|
+
const expressaoOuCondicao = this.seTernario();
|
|
3681
|
+
this.consumir(pitugues_2.default.SENAO, `Esperado 'senão' ou 'senao' após caminho positivo em se ternário. Atual:
|
|
3682
|
+
${this.simbolos[this.atual].lexema}.`);
|
|
3683
|
+
const expressaoSenao = this.seTernario();
|
|
3684
|
+
expressaoEntao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, expressaoEntao, operador, expressaoSenao);
|
|
3685
|
+
}
|
|
3686
|
+
}
|
|
3687
|
+
return expressaoEntao;
|
|
3688
|
+
}
|
|
3620
3689
|
atribuir() {
|
|
3621
|
-
const expressao = this.
|
|
3690
|
+
const expressao = this.seTernario();
|
|
3622
3691
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.IGUAL) ||
|
|
3623
3692
|
this.verificarSeSimboloAtualEIgualA(pitugues_2.default.MAIS_IGUAL)) {
|
|
3624
3693
|
const igual = this.simboloAnterior();
|
|
@@ -3981,7 +4050,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
3981
4050
|
* Resolve uma lista de compreensão.
|
|
3982
4051
|
* @returns {ListaCompreensao} A lista de compreensão resolvida.
|
|
3983
4052
|
*/
|
|
3984
|
-
|
|
4053
|
+
resolverCompreensaoDeLista() {
|
|
3985
4054
|
// TODO: Se expressão não começar com um identificador, por exemplo `3 * x`, como faríamos para
|
|
3986
4055
|
// aceitar o `x` na avaliação da expressão?
|
|
3987
4056
|
if (this.simbolos[this.atual].tipo === pitugues_2.default.IDENTIFICADOR) {
|
|
@@ -3990,7 +4059,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
3990
4059
|
this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, 'qualquer') // TODO: Talvez um dia inferir o tipo aqui.
|
|
3991
4060
|
);
|
|
3992
4061
|
}
|
|
3993
|
-
|
|
4062
|
+
// TODO: Reavaliar a precedência do se ternário.
|
|
4063
|
+
const retornoExpressao = this.ou();
|
|
3994
4064
|
this.consumir(pitugues_2.default.PARA, "Esperado instrução 'para' após identificado.");
|
|
3995
4065
|
this.consumir(pitugues_2.default.CADA, "Esperado instrução 'cada' após 'para'.");
|
|
3996
4066
|
const simboloVariavelIteracao = this.consumir(pitugues_2.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
|
|
@@ -4005,7 +4075,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
4005
4075
|
throw this.erro(this.simbolos[this.atual], "Esperado palavras reservadas 'em' ou 'de' após variável de iteração em instrução em lista de compreensão.");
|
|
4006
4076
|
}
|
|
4007
4077
|
const localizacaoVetor = this.simboloAnterior();
|
|
4008
|
-
|
|
4078
|
+
// TODO: Reavaliar a precedência do se ternário.
|
|
4079
|
+
const vetor = this.ou();
|
|
4009
4080
|
this.consumir(pitugues_2.default.SE, "Esperado condição 'se' após vetor.");
|
|
4010
4081
|
const condicao = this.expressao();
|
|
4011
4082
|
this.consumir(pitugues_2.default.COLCHETE_DIREITO, 'Espero fechamento de colchetes após condição.');
|
|
@@ -4014,10 +4085,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
4014
4085
|
throw this.erro(localizacaoVetor, `Variável ou constante em 'para cada' não é iterável. Tipo resolvido: ${tipoVetor}.`);
|
|
4015
4086
|
}
|
|
4016
4087
|
const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao);
|
|
4017
|
-
return new
|
|
4088
|
+
return new construtos_1.ListaCompreensao(Number(this.simbolos[this.atual]), this.hashArquivo, retornoExpressao, vetor, new construtos_1.ParaCadaComoConstruto(retornoExpressao.hashArquivo, retornoExpressao.linha, variavelIteracao, vetor, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
4018
4089
|
new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(retornoExpressao.hashArquivo, retornoExpressao.linha, [
|
|
4019
|
-
new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao)
|
|
4020
|
-
]), [], null)
|
|
4090
|
+
new declaracoes_1.Retorna(simboloVariavelIteracao, retornoExpressao),
|
|
4091
|
+
]), [], null),
|
|
4021
4092
|
])), 'qualquer[]' // TODO: Talvez um dia inferir o tipo aqui.
|
|
4022
4093
|
);
|
|
4023
4094
|
}
|
|
@@ -4241,7 +4312,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
4241
4312
|
}
|
|
4242
4313
|
exports.AvaliadorSintaticoPitugues = AvaliadorSintaticoPitugues;
|
|
4243
4314
|
|
|
4244
|
-
},{"../../bibliotecas/primitivas-dicionario":21,"../../bibliotecas/primitivas-numero":22,"../../bibliotecas/primitivas-texto":23,"../../bibliotecas/primitivas-vetor":24,"../../construtos":52,"../../
|
|
4315
|
+
},{"../../bibliotecas/primitivas-dicionario":21,"../../bibliotecas/primitivas-numero":22,"../../bibliotecas/primitivas-texto":23,"../../bibliotecas/primitivas-vetor":24,"../../construtos":52,"../../declaracoes":97,"../../inferenciador":116,"../../informacao-elemento-sintatico":117,"../../lexador":174,"../../tipos-de-dados/dialetos/pitugues":183,"../../tipos-de-simbolos/pitugues":191,"../comum":3,"../erro-avaliador-sintatico":11,"../informacao-escopo":13,"../pilha-escopos":17,"browser-process-hrtime":367}],7:[function(require,module,exports){
|
|
4245
4316
|
"use strict";
|
|
4246
4317
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4247
4318
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -5977,6 +6048,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5977
6048
|
exports.aleatorio = aleatorio;
|
|
5978
6049
|
exports.aleatorioEntre = aleatorioEntre;
|
|
5979
6050
|
exports.algum = algum;
|
|
6051
|
+
exports.clonar = clonar;
|
|
5980
6052
|
exports.encontrar = encontrar;
|
|
5981
6053
|
exports.encontrarIndice = encontrarIndice;
|
|
5982
6054
|
exports.encontrarUltimo = encontrarUltimo;
|
|
@@ -6083,6 +6155,211 @@ async function algum(interpretador, vetor, funcaoPesquisa) {
|
|
|
6083
6155
|
}
|
|
6084
6156
|
return false;
|
|
6085
6157
|
}
|
|
6158
|
+
/**
|
|
6159
|
+
* Clona profundamente uma variável ou constante em Delégua.
|
|
6160
|
+
* @param {InterpretadorInterface} interpretador A instância do interpretador.
|
|
6161
|
+
* @param {VariavelInterface | any} valor O valor a ser clonado.
|
|
6162
|
+
* @returns {Promise<any>} Uma cópia profunda do valor fornecido.
|
|
6163
|
+
*/
|
|
6164
|
+
async function clonar(interpretador, valor) {
|
|
6165
|
+
// Resolver o valor caso seja uma VariavelInterface
|
|
6166
|
+
// Verificar se é null/undefined antes de usar hasOwnProperty
|
|
6167
|
+
let valorResolvido;
|
|
6168
|
+
if (valor === null || valor === undefined) {
|
|
6169
|
+
valorResolvido = valor;
|
|
6170
|
+
}
|
|
6171
|
+
else if (typeof valor === 'object' && valor.hasOwnProperty('valor')) {
|
|
6172
|
+
valorResolvido = valor.valor;
|
|
6173
|
+
}
|
|
6174
|
+
else {
|
|
6175
|
+
valorResolvido = valor;
|
|
6176
|
+
}
|
|
6177
|
+
// Map para evitar referências circulares
|
|
6178
|
+
const visitados = new WeakMap();
|
|
6179
|
+
function clonarProfundo(valorAtual) {
|
|
6180
|
+
var _a;
|
|
6181
|
+
// Valores primitivos (null, undefined, number, string, boolean)
|
|
6182
|
+
if (valorAtual === null || valorAtual === undefined) {
|
|
6183
|
+
return valorAtual;
|
|
6184
|
+
}
|
|
6185
|
+
if (typeof valorAtual !== 'object') {
|
|
6186
|
+
return valorAtual;
|
|
6187
|
+
}
|
|
6188
|
+
// Verificar se já visitamos este objeto (evitar referências circulares)
|
|
6189
|
+
if (visitados.has(valorAtual)) {
|
|
6190
|
+
return visitados.get(valorAtual);
|
|
6191
|
+
}
|
|
6192
|
+
// Arrays
|
|
6193
|
+
if (Array.isArray(valorAtual)) {
|
|
6194
|
+
const arrayClonado = [];
|
|
6195
|
+
visitados.set(valorAtual, arrayClonado);
|
|
6196
|
+
for (let i = 0; i < valorAtual.length; i++) {
|
|
6197
|
+
arrayClonado[i] = clonarProfundo(valorAtual[i]);
|
|
6198
|
+
}
|
|
6199
|
+
return arrayClonado;
|
|
6200
|
+
}
|
|
6201
|
+
// Objetos de Delégua - ObjetoDeleguaClasse
|
|
6202
|
+
if (valorAtual instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
|
|
6203
|
+
// Clonar propriedades do objeto
|
|
6204
|
+
const propriedadesClonadas = {};
|
|
6205
|
+
visitados.set(valorAtual, propriedadesClonadas);
|
|
6206
|
+
for (const chave in valorAtual.propriedades) {
|
|
6207
|
+
if (valorAtual.propriedades.hasOwnProperty(chave)) {
|
|
6208
|
+
propriedadesClonadas[chave] = clonarProfundo(valorAtual.propriedades[chave]);
|
|
6209
|
+
}
|
|
6210
|
+
}
|
|
6211
|
+
// Criar novo objeto com as propriedades clonadas
|
|
6212
|
+
// Nota: A classe em si não é clonada, apenas suas propriedades
|
|
6213
|
+
const objetoClonado = new objeto_delegua_classe_1.ObjetoDeleguaClasse(valorAtual.classe);
|
|
6214
|
+
objetoClonado.propriedades = propriedadesClonadas;
|
|
6215
|
+
return objetoClonado;
|
|
6216
|
+
}
|
|
6217
|
+
// Tuplas
|
|
6218
|
+
const nomeClasseTupla = (_a = valorAtual.constructor) === null || _a === void 0 ? void 0 : _a.name;
|
|
6219
|
+
if (nomeClasseTupla &&
|
|
6220
|
+
/^(Dupla|Trio|Quarteto|Quinteto|Sexteto|Septeto|Octeto|Noneto|Deceto)$/.test(nomeClasseTupla)) {
|
|
6221
|
+
const valoresClonados = [];
|
|
6222
|
+
visitados.set(valorAtual, valoresClonados);
|
|
6223
|
+
// Extrair valores da tupla baseado no tipo
|
|
6224
|
+
let valores = [];
|
|
6225
|
+
switch (nomeClasseTupla) {
|
|
6226
|
+
case 'Dupla':
|
|
6227
|
+
valores = [valorAtual.primeiro, valorAtual.segundo];
|
|
6228
|
+
break;
|
|
6229
|
+
case 'Trio':
|
|
6230
|
+
valores = [valorAtual.primeiro, valorAtual.segundo, valorAtual.terceiro];
|
|
6231
|
+
break;
|
|
6232
|
+
case 'Quarteto':
|
|
6233
|
+
valores = [
|
|
6234
|
+
valorAtual.primeiro,
|
|
6235
|
+
valorAtual.segundo,
|
|
6236
|
+
valorAtual.terceiro,
|
|
6237
|
+
valorAtual.quarto,
|
|
6238
|
+
];
|
|
6239
|
+
break;
|
|
6240
|
+
case 'Quinteto':
|
|
6241
|
+
valores = [
|
|
6242
|
+
valorAtual.primeiro,
|
|
6243
|
+
valorAtual.segundo,
|
|
6244
|
+
valorAtual.terceiro,
|
|
6245
|
+
valorAtual.quarto,
|
|
6246
|
+
valorAtual.quinto,
|
|
6247
|
+
];
|
|
6248
|
+
break;
|
|
6249
|
+
case 'Sexteto':
|
|
6250
|
+
valores = [
|
|
6251
|
+
valorAtual.primeiro,
|
|
6252
|
+
valorAtual.segundo,
|
|
6253
|
+
valorAtual.terceiro,
|
|
6254
|
+
valorAtual.quarto,
|
|
6255
|
+
valorAtual.quinto,
|
|
6256
|
+
valorAtual.sexto,
|
|
6257
|
+
];
|
|
6258
|
+
break;
|
|
6259
|
+
case 'Septeto':
|
|
6260
|
+
valores = [
|
|
6261
|
+
valorAtual.primeiro,
|
|
6262
|
+
valorAtual.segundo,
|
|
6263
|
+
valorAtual.terceiro,
|
|
6264
|
+
valorAtual.quarto,
|
|
6265
|
+
valorAtual.quinto,
|
|
6266
|
+
valorAtual.sexto,
|
|
6267
|
+
valorAtual.setimo,
|
|
6268
|
+
];
|
|
6269
|
+
break;
|
|
6270
|
+
case 'Octeto':
|
|
6271
|
+
valores = [
|
|
6272
|
+
valorAtual.primeiro,
|
|
6273
|
+
valorAtual.segundo,
|
|
6274
|
+
valorAtual.terceiro,
|
|
6275
|
+
valorAtual.quarto,
|
|
6276
|
+
valorAtual.quinto,
|
|
6277
|
+
valorAtual.sexto,
|
|
6278
|
+
valorAtual.setimo,
|
|
6279
|
+
valorAtual.oitavo,
|
|
6280
|
+
];
|
|
6281
|
+
break;
|
|
6282
|
+
case 'Noneto':
|
|
6283
|
+
valores = [
|
|
6284
|
+
valorAtual.primeiro,
|
|
6285
|
+
valorAtual.segundo,
|
|
6286
|
+
valorAtual.terceiro,
|
|
6287
|
+
valorAtual.quarto,
|
|
6288
|
+
valorAtual.quinto,
|
|
6289
|
+
valorAtual.sexto,
|
|
6290
|
+
valorAtual.setimo,
|
|
6291
|
+
valorAtual.oitavo,
|
|
6292
|
+
valorAtual.nono,
|
|
6293
|
+
];
|
|
6294
|
+
break;
|
|
6295
|
+
case 'Deceto':
|
|
6296
|
+
valores = [
|
|
6297
|
+
valorAtual.primeiro,
|
|
6298
|
+
valorAtual.segundo,
|
|
6299
|
+
valorAtual.terceiro,
|
|
6300
|
+
valorAtual.quarto,
|
|
6301
|
+
valorAtual.quinto,
|
|
6302
|
+
valorAtual.sexto,
|
|
6303
|
+
valorAtual.setimo,
|
|
6304
|
+
valorAtual.oitavo,
|
|
6305
|
+
valorAtual.nono,
|
|
6306
|
+
valorAtual.decimo,
|
|
6307
|
+
];
|
|
6308
|
+
break;
|
|
6309
|
+
default:
|
|
6310
|
+
// Se não conseguir identificar, tentar extrair valores diretamente
|
|
6311
|
+
if (valorAtual.valor) {
|
|
6312
|
+
valores = Array.isArray(valorAtual.valor)
|
|
6313
|
+
? valorAtual.valor
|
|
6314
|
+
: [valorAtual.valor];
|
|
6315
|
+
}
|
|
6316
|
+
}
|
|
6317
|
+
// Clonar valores
|
|
6318
|
+
for (let i = 0; i < valores.length; i++) {
|
|
6319
|
+
valoresClonados.push(clonarProfundo(valores[i]));
|
|
6320
|
+
}
|
|
6321
|
+
// Recriar a tupla com valores clonados
|
|
6322
|
+
switch (nomeClasseTupla) {
|
|
6323
|
+
case 'Dupla':
|
|
6324
|
+
return new construtos_1.Dupla(valoresClonados[0], valoresClonados[1]);
|
|
6325
|
+
case 'Trio':
|
|
6326
|
+
return new construtos_1.Trio(valoresClonados[0], valoresClonados[1], valoresClonados[2]);
|
|
6327
|
+
case 'Quarteto':
|
|
6328
|
+
return new construtos_1.Quarteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3]);
|
|
6329
|
+
case 'Quinteto':
|
|
6330
|
+
return new construtos_1.Quinteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4]);
|
|
6331
|
+
case 'Sexteto':
|
|
6332
|
+
return new construtos_1.Sexteto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5]);
|
|
6333
|
+
case 'Septeto':
|
|
6334
|
+
return new construtos_1.Septeto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6]);
|
|
6335
|
+
case 'Octeto':
|
|
6336
|
+
return new construtos_1.Octeto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7]);
|
|
6337
|
+
case 'Noneto':
|
|
6338
|
+
return new construtos_1.Noneto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7], valoresClonados[8]);
|
|
6339
|
+
case 'Deceto':
|
|
6340
|
+
return new construtos_1.Deceto(valoresClonados[0], valoresClonados[1], valoresClonados[2], valoresClonados[3], valoresClonados[4], valoresClonados[5], valoresClonados[6], valoresClonados[7], valoresClonados[8], valoresClonados[9]);
|
|
6341
|
+
default:
|
|
6342
|
+
// Se não conseguir recriar, retornar os valores clonados como array
|
|
6343
|
+
return valoresClonados;
|
|
6344
|
+
}
|
|
6345
|
+
}
|
|
6346
|
+
// DeleguaFuncao e FuncaoPadrao - funções não são clonadas profundamente
|
|
6347
|
+
// Elas mantêm referência à mesma definição, mas isso é comportamento esperado
|
|
6348
|
+
if (valorAtual instanceof estruturas_1.DeleguaFuncao || valorAtual instanceof funcao_padrao_1.FuncaoPadrao) {
|
|
6349
|
+
return valorAtual;
|
|
6350
|
+
}
|
|
6351
|
+
// Objetos simples (plain objects)
|
|
6352
|
+
const objetoClonado = {};
|
|
6353
|
+
visitados.set(valorAtual, objetoClonado);
|
|
6354
|
+
for (const chave in valorAtual) {
|
|
6355
|
+
if (valorAtual.hasOwnProperty(chave)) {
|
|
6356
|
+
objetoClonado[chave] = clonarProfundo(valorAtual[chave]);
|
|
6357
|
+
}
|
|
6358
|
+
}
|
|
6359
|
+
return objetoClonado;
|
|
6360
|
+
}
|
|
6361
|
+
return Promise.resolve(clonarProfundo(valorResolvido));
|
|
6362
|
+
}
|
|
6086
6363
|
/**
|
|
6087
6364
|
* Encontra o primeiro elemento de um vetor cuja função de pesquisa retorne
|
|
6088
6365
|
* verdadeiro na avaliação de cada elemento.
|
|
@@ -7067,7 +7344,7 @@ exports.default = {
|
|
|
7067
7344
|
],
|
|
7068
7345
|
implementacao: (interpretador, nomePrimitiva, vetor, elemento) => {
|
|
7069
7346
|
vetor.push(elemento);
|
|
7070
|
-
// TODO: Será que apenas isso é suficiente aqui?
|
|
7347
|
+
// TODO: Será que apenas isso é suficiente aqui?
|
|
7071
7348
|
if (nomePrimitiva !== '') {
|
|
7072
7349
|
interpretador.pilhaEscoposExecucao.atribuirVariavel({ lexema: nomePrimitiva }, vetor);
|
|
7073
7350
|
}
|
|
@@ -7127,18 +7404,47 @@ exports.default = {
|
|
|
7127
7404
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('excluirQuantidade', 'número'),
|
|
7128
7405
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('itens', 'qualquer[]'),
|
|
7129
7406
|
],
|
|
7130
|
-
implementacao: (interpretador, nomePrimitiva, vetor,
|
|
7407
|
+
implementacao: (interpretador, nomePrimitiva, vetor, posicaoInicial, quantidadeExclusao, ...itens) => {
|
|
7131
7408
|
let elementos = [];
|
|
7132
|
-
if (
|
|
7409
|
+
if (quantidadeExclusao || quantidadeExclusao === 0) {
|
|
7133
7410
|
elementos = !itens.length
|
|
7134
|
-
? vetor.splice(
|
|
7135
|
-
: vetor.splice(
|
|
7411
|
+
? vetor.splice(posicaoInicial, quantidadeExclusao)
|
|
7412
|
+
: vetor.splice(posicaoInicial, quantidadeExclusao, ...itens);
|
|
7413
|
+
if (nomePrimitiva !== '') {
|
|
7414
|
+
interpretador.pilhaEscoposExecucao.atribuirVariavel({ lexema: nomePrimitiva }, vetor);
|
|
7415
|
+
}
|
|
7416
|
+
return Promise.resolve(elementos);
|
|
7136
7417
|
}
|
|
7137
7418
|
else {
|
|
7138
|
-
elementos = !itens.length
|
|
7419
|
+
elementos = !itens.length
|
|
7420
|
+
? vetor.splice(posicaoInicial)
|
|
7421
|
+
: vetor.splice(posicaoInicial, ...itens);
|
|
7422
|
+
if (nomePrimitiva !== '') {
|
|
7423
|
+
interpretador.pilhaEscoposExecucao.atribuirVariavel({ lexema: nomePrimitiva }, elementos);
|
|
7424
|
+
}
|
|
7425
|
+
return Promise.resolve(vetor);
|
|
7139
7426
|
}
|
|
7140
|
-
return Promise.resolve(elementos);
|
|
7141
7427
|
},
|
|
7428
|
+
assinaturaFormato: 'vetor.encaixar(posicaoInicial?: número, quantidadeExclusao?: número, itens?: qualquer[])',
|
|
7429
|
+
documentacao: '# `vetor.encaixar(posicaoInicial, quantidadeExclusao, itens)` \n \n' +
|
|
7430
|
+
'Encaixa um vetor em outro, dadas posições de início e quantidade de ítens a serem excluídos do vetor original. \n' +
|
|
7431
|
+
'\n\n ## Exemplo de Código\n' +
|
|
7432
|
+
'\n\n```delegua\nvar v = [1, 2, 3, 4, 5]\n' +
|
|
7433
|
+
'escreva(v.encaixar()) // "[1, 2, 3, 4, 5]", ou seja, não faz coisa alguma.\n' +
|
|
7434
|
+
`var v1 = v.encaixar(2)\n` +
|
|
7435
|
+
'escreva(v) // "[3, 4, 5]", ou seja, a posição 2, onde fica o 3, passa a ser a nova posição inicial do vetor.\n' +
|
|
7436
|
+
'escreva(v1) // "[1, 2]", ou seja, o retorno de `encaixar()` são as posições removidas do vetor original.\n' +
|
|
7437
|
+
'var v2 = [1, 2, 3, 4, 5]\n' +
|
|
7438
|
+
'escreva(v2.encaixar(2, 1)) // "[3]"\n' +
|
|
7439
|
+
'escreva(v2) // "[1, 2, 4, 5]"\n```' +
|
|
7440
|
+
'var v3 = [1, 2, 3, 4, 5]\n' +
|
|
7441
|
+
'escreva(v3.encaixar(2, 1, "teste")) // "[3]"\n' +
|
|
7442
|
+
'escreva(v3) // "[1, 2, "teste", 4, 5]"\n```' +
|
|
7443
|
+
'\n\n ### Formas de uso \n' +
|
|
7444
|
+
'`encaixar` suporta sobrecarga do método.\n\n',
|
|
7445
|
+
exemploCodigo: 'vetor.encaixar(<nova posição inicial>)\n' +
|
|
7446
|
+
'vetor.encaixar(<a partir desta posição>, <exclua esta quantidade de elementos>)\n' +
|
|
7447
|
+
'vetor.encaixar(<a partir desta posição>, <exclua esta quantidade de elementos>, <adicione estes elementos>)',
|
|
7142
7448
|
},
|
|
7143
7449
|
fatiar: {
|
|
7144
7450
|
tipoRetorno: 'qualquer[]',
|
|
@@ -7154,7 +7460,7 @@ exports.default = {
|
|
|
7154
7460
|
'\n\n```delegua\nvar v = [1, 2, 3, 4, 5]\n' +
|
|
7155
7461
|
'escreva(v.fatiar()) // "[1, 2, 3, 4, 5]", ou seja, não faz coisa alguma.\n' +
|
|
7156
7462
|
'escreva(v.fatiar(2, 4)) // "[3, 4]"\n' +
|
|
7157
|
-
'escreva(v.fatiar(2)) // "[3, 4, 5]", ou seja,
|
|
7463
|
+
'escreva(v.fatiar(2)) // "[3, 4, 5]", ou seja, extrai trecho da 3ª posição até o final do vetor.\n```' +
|
|
7158
7464
|
'\n\n ### Formas de uso \n' +
|
|
7159
7465
|
'Fatiar suporta sobrecarga do método.\n\n',
|
|
7160
7466
|
exemploCodigo: 'vetor.fatiar(<a partir desta posição>)\n' +
|
|
@@ -7181,8 +7487,7 @@ exports.default = {
|
|
|
7181
7487
|
},
|
|
7182
7488
|
assinaturaFormato: 'vetor.filtrarPor(funcao: função)',
|
|
7183
7489
|
documentacao: '# `vetor.filtrarPor(funcao)` \n \n' +
|
|
7184
|
-
'
|
|
7185
|
-
'Elementos cujo retorno da função é `falso` são excluídos. \n' +
|
|
7490
|
+
'Devolve todos os elementos de um vetor cujo resultado da execução de uma função, passada por parâmetro, seja verdadeiro.\n' +
|
|
7186
7491
|
'\n\n ### Exemplo de Código\n' +
|
|
7187
7492
|
'\n\n```delegua\nvar v = [1, 2, 3, 4, 5]\n' +
|
|
7188
7493
|
'var funcaoNumerosImpares = funcao (n) { retorna n % 2 > 0 }\n' +
|
|
@@ -7226,13 +7531,13 @@ exports.default = {
|
|
|
7226
7531
|
],
|
|
7227
7532
|
implementacao: (interpretador, nomePrimitiva, vetor, separador) => Promise.resolve(vetor.join(separador)),
|
|
7228
7533
|
assinaturaFormato: 'vetor.juntar(separador: texto)',
|
|
7229
|
-
documentacao: '# `vetor.juntar(separador)` \n \n' +
|
|
7534
|
+
documentacao: '# `vetor.juntar(separador = ",")` \n \n' +
|
|
7230
7535
|
'Junta todos os elementos de um vetor em um texto, separando cada elemento pelo separador passado como parâmetro.\n' +
|
|
7231
7536
|
'\n\n ## Exemplo de Código\n' +
|
|
7232
7537
|
'\n\n```delegua\nvar v = [1, 2, 3]\n' +
|
|
7233
7538
|
'escreva(v.juntar(":")) // "1:2:3"\n```' +
|
|
7234
7539
|
'\n\n ### Formas de uso \n',
|
|
7235
|
-
exemploCodigo: 'vetor.juntar()',
|
|
7540
|
+
exemploCodigo: 'vetor.juntar()\n' + 'vetor.juntar(<separador>)',
|
|
7236
7541
|
},
|
|
7237
7542
|
mapear: {
|
|
7238
7543
|
tipoRetorno: 'qualquer[]',
|
|
@@ -7251,7 +7556,7 @@ exports.default = {
|
|
|
7251
7556
|
return retorno;
|
|
7252
7557
|
},
|
|
7253
7558
|
assinaturaFormato: 'vetor.mapear(funcao: função)',
|
|
7254
|
-
documentacao: '# `vetor.mapear(funcao)
|
|
7559
|
+
documentacao: '# `vetor.mapear(funcao)`\n\n' +
|
|
7255
7560
|
'Dada uma função passada como parâmetro, executa essa função para cada elemento do vetor. \n' +
|
|
7256
7561
|
'Cada elemento retornado por esta função é adicionado ao vetor resultante. \n' +
|
|
7257
7562
|
'\n\n ## Exemplo de Código\n' +
|
|
@@ -11025,6 +11330,7 @@ function carregarBibliotecasGlobais(pilhaEscoposExecucao) {
|
|
|
11025
11330
|
pilhaEscoposExecucao.definirVariavel('aleatorio', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.aleatorio));
|
|
11026
11331
|
pilhaEscoposExecucao.definirVariavel('aleatorioEntre', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.aleatorioEntre));
|
|
11027
11332
|
pilhaEscoposExecucao.definirVariavel('algum', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.algum));
|
|
11333
|
+
pilhaEscoposExecucao.definirVariavel('clonar', new funcao_padrao_1.FuncaoPadrao(1, bibliotecaGlobal.clonar));
|
|
11028
11334
|
pilhaEscoposExecucao.definirVariavel('encontrar', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrar));
|
|
11029
11335
|
pilhaEscoposExecucao.definirVariavel('encontrarIndice', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarIndice));
|
|
11030
11336
|
pilhaEscoposExecucao.definirVariavel('encontrarUltimo', new funcao_padrao_1.FuncaoPadrao(2, bibliotecaGlobal.encontrarUltimo));
|
|
@@ -11674,7 +11980,6 @@ const metodo_primitiva_1 = require("./estruturas/metodo-primitiva");
|
|
|
11674
11980
|
const lexador_1 = require("../lexador");
|
|
11675
11981
|
const avaliador_sintatico_1 = require("../avaliador-sintatico");
|
|
11676
11982
|
const espaco_memoria_1 = require("./espaco-memoria");
|
|
11677
|
-
const comum_1 = require("./comum");
|
|
11678
11983
|
const excecoes_1 = require("../excecoes");
|
|
11679
11984
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
11680
11985
|
const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
@@ -11730,7 +12035,6 @@ class InterpretadorBase {
|
|
|
11730
12035
|
emLacoRepeticao: false,
|
|
11731
12036
|
};
|
|
11732
12037
|
this.pilhaEscoposExecucao.empilhar(escopoExecucao);
|
|
11733
|
-
(0, comum_1.carregarBibliotecasGlobais)(this.pilhaEscoposExecucao);
|
|
11734
12038
|
}
|
|
11735
12039
|
visitarExpressaoSeparador(expressao) {
|
|
11736
12040
|
throw new Error('Método não implementado.');
|
|
@@ -12406,8 +12710,7 @@ class InterpretadorBase {
|
|
|
12406
12710
|
// para vetor de duplas.
|
|
12407
12711
|
// TODO: Converter elementos para `Construto` se necessário.
|
|
12408
12712
|
if (declaracao.vetorOuDicionario.tipo === 'dicionário') {
|
|
12409
|
-
valorVetorResolvido = Object.entries(valorVetorResolvido)
|
|
12410
|
-
.map(v => new construtos_1.Dupla(v[0], v[1]));
|
|
12713
|
+
valorVetorResolvido = Object.entries(valorVetorResolvido).map((v) => new construtos_1.Dupla(v[0], v[1]));
|
|
12411
12714
|
}
|
|
12412
12715
|
if (!Array.isArray(valorVetorResolvido)) {
|
|
12413
12716
|
return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
|
|
@@ -12837,7 +13140,7 @@ class InterpretadorBase {
|
|
|
12837
13140
|
const funcao = new estruturas_1.DeleguaFuncao(declaracao.simbolo.lexema, declaracao.funcao);
|
|
12838
13141
|
this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, funcao);
|
|
12839
13142
|
return Promise.resolve({
|
|
12840
|
-
declaracao: funcao
|
|
13143
|
+
declaracao: funcao,
|
|
12841
13144
|
});
|
|
12842
13145
|
}
|
|
12843
13146
|
/**
|
|
@@ -13189,7 +13492,7 @@ class InterpretadorBase {
|
|
|
13189
13492
|
exports.InterpretadorBase = InterpretadorBase;
|
|
13190
13493
|
|
|
13191
13494
|
}).call(this)}).call(this,require('_process'))
|
|
13192
|
-
},{"../avaliador-sintatico":12,"../bibliotecas/primitivas-dicionario":21,"../construtos":52,"../excecoes":110,"../inferenciador":116,"../lexador":174,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"../tipos-de-simbolos/delegua":187,"./
|
|
13495
|
+
},{"../avaliador-sintatico":12,"../bibliotecas/primitivas-dicionario":21,"../construtos":52,"../excecoes":110,"../inferenciador":116,"../lexador":174,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"../tipos-de-simbolos/delegua":187,"./espaco-memoria":143,"./estruturas":150,"./estruturas/metodo-primitiva":151,"./pilha-escopos-execucao":160,"_process":421,"browser-process-hrtime":367}],158:[function(require,module,exports){
|
|
13193
13496
|
"use strict";
|
|
13194
13497
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13195
13498
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
@@ -13204,6 +13507,7 @@ const excecoes_1 = require("../excecoes");
|
|
|
13204
13507
|
const declaracoes_1 = require("../declaracoes");
|
|
13205
13508
|
const quebras_1 = require("../quebras");
|
|
13206
13509
|
const montao_1 = require("./montao");
|
|
13510
|
+
const comum_1 = require("./comum");
|
|
13207
13511
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
13208
13512
|
const primitivas_numero_1 = __importDefault(require("../bibliotecas/primitivas-numero"));
|
|
13209
13513
|
const primitivas_texto_1 = __importDefault(require("../bibliotecas/primitivas-texto"));
|
|
@@ -13217,6 +13521,14 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13217
13521
|
constructor(diretorioBase, performance = false, funcaoDeRetorno = null, funcaoDeRetornoMesmaLinha = null) {
|
|
13218
13522
|
super(diretorioBase, performance, funcaoDeRetorno, funcaoDeRetornoMesmaLinha);
|
|
13219
13523
|
this.montao = new montao_1.Montao();
|
|
13524
|
+
this.pontoInicializacaoBibliotecasGlobais();
|
|
13525
|
+
}
|
|
13526
|
+
/**
|
|
13527
|
+
* Cada dialeto que deriva deste interpretador conhece este ponto de inicialização.
|
|
13528
|
+
* A partir daqui, cada dialeto pode carregar as bibliotecas globais específicas do seu dialeto.
|
|
13529
|
+
*/
|
|
13530
|
+
pontoInicializacaoBibliotecasGlobais() {
|
|
13531
|
+
(0, comum_1.carregarBibliotecasGlobais)(this.pilhaEscoposExecucao);
|
|
13220
13532
|
}
|
|
13221
13533
|
resolverReferenciaMontao(referenciaMontao) {
|
|
13222
13534
|
const valorMontao = this.montao.obterReferencia(this.hashArquivoDeclaracaoAtual, this.linhaDeclaracaoAtual, referenciaMontao.endereco);
|
|
@@ -13267,8 +13579,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13267
13579
|
}
|
|
13268
13580
|
if (objeto.valor instanceof estruturas_1.ObjetoPadrao)
|
|
13269
13581
|
return objeto.valor.paraTexto();
|
|
13270
|
-
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse ||
|
|
13271
|
-
objeto instanceof estruturas_1.DeleguaFuncao)
|
|
13582
|
+
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse || objeto instanceof estruturas_1.DeleguaFuncao)
|
|
13272
13583
|
return objeto.paraTexto();
|
|
13273
13584
|
if (objeto instanceof quebras_1.RetornoQuebra) {
|
|
13274
13585
|
if (typeof objeto.valor === 'boolean')
|
|
@@ -13306,7 +13617,8 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13306
13617
|
if (typeof valor === primitivos_1.default.BOOLEANO) {
|
|
13307
13618
|
valor = valor ? 'verdadeiro' : 'falso';
|
|
13308
13619
|
}
|
|
13309
|
-
if (valor instanceof estruturas_1.ReferenciaMontao ||
|
|
13620
|
+
if (valor instanceof estruturas_1.ReferenciaMontao ||
|
|
13621
|
+
((valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty) && (valor === null || valor === void 0 ? void 0 : valor.hasOwnProperty('tipo')))) {
|
|
13310
13622
|
valor = this.resolverValor(valor);
|
|
13311
13623
|
}
|
|
13312
13624
|
objetoEscrita[propriedade] = valor;
|
|
@@ -13345,13 +13657,14 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13345
13657
|
return Promise.resolve({
|
|
13346
13658
|
tipo: `função<${funcao.declaracao.tipo || 'qualquer'}>`,
|
|
13347
13659
|
tipoExplicito: funcao.declaracao.tipoExplicito,
|
|
13348
|
-
declaracao: funcao
|
|
13660
|
+
declaracao: funcao,
|
|
13349
13661
|
});
|
|
13350
13662
|
}
|
|
13351
13663
|
async logicaComumExecucaoEnquanto(enquanto, acumularRetornos) {
|
|
13352
13664
|
let retornoExecucao;
|
|
13353
13665
|
const retornos = [];
|
|
13354
|
-
while ((acumularRetornos ||
|
|
13666
|
+
while ((acumularRetornos ||
|
|
13667
|
+
!(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
|
|
13355
13668
|
this.eVerdadeiro(await this.avaliar(enquanto.condicao))) {
|
|
13356
13669
|
try {
|
|
13357
13670
|
retornoExecucao = await this.executar(enquanto.corpo);
|
|
@@ -13359,7 +13672,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13359
13672
|
if (acumularRetornos) {
|
|
13360
13673
|
return {
|
|
13361
13674
|
valorRetornado: retornos,
|
|
13362
|
-
tipo: 'vetor'
|
|
13675
|
+
tipo: 'vetor',
|
|
13363
13676
|
};
|
|
13364
13677
|
}
|
|
13365
13678
|
return null;
|
|
@@ -13383,7 +13696,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13383
13696
|
if (acumularRetornos) {
|
|
13384
13697
|
return {
|
|
13385
13698
|
valorRetornado: retornos,
|
|
13386
|
-
tipo: 'vetor'
|
|
13699
|
+
tipo: 'vetor',
|
|
13387
13700
|
};
|
|
13388
13701
|
}
|
|
13389
13702
|
return retornoExecucao;
|
|
@@ -13401,7 +13714,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13401
13714
|
if (acumularRetornos) {
|
|
13402
13715
|
return {
|
|
13403
13716
|
valorRetornado: retornos,
|
|
13404
|
-
tipo: 'vetor'
|
|
13717
|
+
tipo: 'vetor',
|
|
13405
13718
|
};
|
|
13406
13719
|
}
|
|
13407
13720
|
return null;
|
|
@@ -13421,12 +13734,13 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13421
13734
|
});
|
|
13422
13735
|
return Promise.reject(erro);
|
|
13423
13736
|
}
|
|
13424
|
-
} while ((acumularRetornos ||
|
|
13737
|
+
} while ((acumularRetornos ||
|
|
13738
|
+
!(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
|
|
13425
13739
|
this.eVerdadeiro(await this.avaliar(fazer.condicaoEnquanto)));
|
|
13426
13740
|
if (acumularRetornos) {
|
|
13427
13741
|
return {
|
|
13428
13742
|
valorRetornado: retornos,
|
|
13429
|
-
tipo: 'vetor'
|
|
13743
|
+
tipo: 'vetor',
|
|
13430
13744
|
};
|
|
13431
13745
|
}
|
|
13432
13746
|
}
|
|
@@ -13442,9 +13756,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13442
13756
|
}
|
|
13443
13757
|
let retornoExecucao;
|
|
13444
13758
|
const retornos = [];
|
|
13445
|
-
while (acumularRetornos ||
|
|
13446
|
-
|
|
13447
|
-
|
|
13759
|
+
while (acumularRetornos ||
|
|
13760
|
+
!(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) {
|
|
13761
|
+
if (para.condicao !== null && !this.eVerdadeiro(await this.avaliar(para.condicao))) {
|
|
13448
13762
|
break;
|
|
13449
13763
|
}
|
|
13450
13764
|
retornoExecucao = await this.executar(para.corpo);
|
|
@@ -13452,7 +13766,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13452
13766
|
if (acumularRetornos) {
|
|
13453
13767
|
return {
|
|
13454
13768
|
valorRetornado: retornos,
|
|
13455
|
-
tipo: 'vetor'
|
|
13769
|
+
tipo: 'vetor',
|
|
13456
13770
|
};
|
|
13457
13771
|
}
|
|
13458
13772
|
return null;
|
|
@@ -13470,7 +13784,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13470
13784
|
if (acumularRetornos) {
|
|
13471
13785
|
return {
|
|
13472
13786
|
valorRetornado: retornos,
|
|
13473
|
-
tipo: 'vetor'
|
|
13787
|
+
tipo: 'vetor',
|
|
13474
13788
|
};
|
|
13475
13789
|
}
|
|
13476
13790
|
return retornoExecucao;
|
|
@@ -13491,14 +13805,16 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13491
13805
|
if (paraCada.vetorOuDicionario.tipo === 'dicionário') {
|
|
13492
13806
|
valorVetorOuDicionarioResolvido = Object.entries(valorVetorOuDicionarioResolvido).map((v) => new construtos_1.Dupla(v[0], v[1]));
|
|
13493
13807
|
}
|
|
13494
|
-
if (paraCada.vetorOuDicionario.tipo === 'texto' ||
|
|
13808
|
+
if (paraCada.vetorOuDicionario.tipo === 'texto' ||
|
|
13809
|
+
typeof valorVetorOuDicionarioResolvido === 'string') {
|
|
13495
13810
|
valorVetorOuDicionarioResolvido = valorVetorOuDicionarioResolvido.split('');
|
|
13496
13811
|
}
|
|
13497
13812
|
if (!Array.isArray(valorVetorOuDicionarioResolvido)) {
|
|
13498
13813
|
return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
|
|
13499
13814
|
}
|
|
13500
13815
|
const retornos = [];
|
|
13501
|
-
while ((acumularRetornos ||
|
|
13816
|
+
while ((acumularRetornos ||
|
|
13817
|
+
!(retornoExecucao && retornoExecucao.valorRetornado instanceof quebras_1.Quebra)) &&
|
|
13502
13818
|
paraCada.posicaoAtual < valorVetorOuDicionarioResolvido.length) {
|
|
13503
13819
|
try {
|
|
13504
13820
|
if (paraCada.variavelIteracao instanceof construtos_1.Variavel) {
|
|
@@ -13514,7 +13830,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13514
13830
|
if (acumularRetornos) {
|
|
13515
13831
|
return {
|
|
13516
13832
|
valorRetornado: retornos,
|
|
13517
|
-
tipo: 'vetor'
|
|
13833
|
+
tipo: 'vetor',
|
|
13518
13834
|
};
|
|
13519
13835
|
}
|
|
13520
13836
|
return null;
|
|
@@ -13539,7 +13855,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13539
13855
|
if (acumularRetornos) {
|
|
13540
13856
|
return {
|
|
13541
13857
|
valorRetornado: retornos,
|
|
13542
|
-
tipo: 'vetor'
|
|
13858
|
+
tipo: 'vetor',
|
|
13543
13859
|
};
|
|
13544
13860
|
}
|
|
13545
13861
|
return retornoExecucao;
|
|
@@ -13997,7 +14313,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
13997
14313
|
return Promise.reject("Variável ou literal provida em instrução 'para cada' não é um vetor.");
|
|
13998
14314
|
}
|
|
13999
14315
|
const resultadoCompreensao = await this.avaliar(listaCompreensao.paraCada);
|
|
14000
|
-
const resultadoCompreensaoResolvido = resultadoCompreensao.valorRetornado
|
|
14316
|
+
const resultadoCompreensaoResolvido = resultadoCompreensao.valorRetornado
|
|
14317
|
+
.filter((r) => r !== null)
|
|
14318
|
+
.map((r) => this.resolverValor(r));
|
|
14001
14319
|
return resultadoCompreensaoResolvido;
|
|
14002
14320
|
}
|
|
14003
14321
|
visitarExpressaoPara(expressao) {
|
|
@@ -14132,7 +14450,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
14132
14450
|
escopoAnterior.espacoMemoria.valores = Object.assign(escopoAnterior.espacoMemoria.valores, ultimoEscopo.espacoMemoria.valores);
|
|
14133
14451
|
escopoAnterior.espacoMemoria.enderecosMontao = new Set([
|
|
14134
14452
|
...escopoAnterior.espacoMemoria.enderecosMontao,
|
|
14135
|
-
...ultimoEscopo.espacoMemoria.enderecosMontao
|
|
14453
|
+
...ultimoEscopo.espacoMemoria.enderecosMontao,
|
|
14136
14454
|
]);
|
|
14137
14455
|
}
|
|
14138
14456
|
else {
|
|
@@ -14152,7 +14470,9 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
14152
14470
|
const resultados = await super.interpretar(declaracoes, manterAmbiente);
|
|
14153
14471
|
if (resultados.resultado.length > 0) {
|
|
14154
14472
|
const ultimoResultado = resultados.resultado[resultados.resultado.length - 1];
|
|
14155
|
-
if (ultimoResultado &&
|
|
14473
|
+
if (ultimoResultado &&
|
|
14474
|
+
ultimoResultado.valorRetornado instanceof quebras_1.RetornoQuebra &&
|
|
14475
|
+
ultimoResultado.valorRetornado.valor instanceof estruturas_1.ReferenciaMontao) {
|
|
14156
14476
|
const ultimaDeclaracao = declaracoes[declaracoes.length - 1];
|
|
14157
14477
|
ultimoResultado.valorRetornado.valor = this.montao.obterReferencia(ultimaDeclaracao.hashArquivo, ultimaDeclaracao.linha, ultimoResultado.valorRetornado.valor.endereco);
|
|
14158
14478
|
}
|
|
@@ -14162,7 +14482,7 @@ class Interpretador extends interpretador_base_1.InterpretadorBase {
|
|
|
14162
14482
|
}
|
|
14163
14483
|
exports.Interpretador = Interpretador;
|
|
14164
14484
|
|
|
14165
|
-
},{"../bibliotecas/primitivas-dicionario":21,"../bibliotecas/primitivas-numero":22,"../bibliotecas/primitivas-texto":23,"../bibliotecas/primitivas-vetor":24,"../construtos":52,"../declaracoes":97,"../excecoes":110,"../inferenciador":116,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"./estruturas":150,"./interpretador-base":157,"./montao":159}],159:[function(require,module,exports){
|
|
14485
|
+
},{"../bibliotecas/primitivas-dicionario":21,"../bibliotecas/primitivas-numero":22,"../bibliotecas/primitivas-texto":23,"../bibliotecas/primitivas-vetor":24,"../construtos":52,"../declaracoes":97,"../excecoes":110,"../inferenciador":116,"../quebras":181,"../tipos-de-dados/delegua":182,"../tipos-de-dados/primitivos":184,"./comum":142,"./estruturas":150,"./interpretador-base":157,"./montao":159}],159:[function(require,module,exports){
|
|
14166
14486
|
"use strict";
|
|
14167
14487
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14168
14488
|
exports.Montao = void 0;
|
|
@@ -16342,13 +16662,14 @@ exports.palavrasReservadas = {
|
|
|
16342
16662
|
nulo: pitugues_1.default.NULO,
|
|
16343
16663
|
ou: pitugues_1.default.OU,
|
|
16344
16664
|
padrao: pitugues_1.default.PADRAO,
|
|
16665
|
+
padrão: pitugues_1.default.PADRAO,
|
|
16345
16666
|
para: pitugues_1.default.PARA,
|
|
16346
16667
|
pegue: pitugues_1.default.PEGUE,
|
|
16347
16668
|
quebrar: pitugues_1.default.QUEBRAR,
|
|
16348
16669
|
retorna: pitugues_1.default.RETORNA,
|
|
16349
16670
|
se: pitugues_1.default.SE,
|
|
16350
16671
|
senao: pitugues_1.default.SENAO,
|
|
16351
|
-
senão: pitugues_1.default.
|
|
16672
|
+
senão: pitugues_1.default.SENAO,
|
|
16352
16673
|
super: pitugues_1.default.SUPER,
|
|
16353
16674
|
sustar: pitugues_1.default.SUSTAR,
|
|
16354
16675
|
tendo: pitugues_1.default.TENDO,
|