@designliquido/delegua 1.18.1 → 1.18.3
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 +2 -0
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +93 -5
- 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 +122 -15
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/delegua",
|
|
3
|
-
"version": "1.18.
|
|
3
|
+
"version": "1.18.3",
|
|
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)) {
|
|
@@ -3838,6 +3874,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3838
3874
|
const propriedadeCorrespondente = tipoCorrespondente.propriedades[entidadeChamada.simbolo.lexema];
|
|
3839
3875
|
return propriedadeCorrespondente.tipo;
|
|
3840
3876
|
}
|
|
3877
|
+
// Chamada via 'isto': verificar métodos da classe em análise antes de checar primitivas.
|
|
3878
|
+
if (entidadeChamada.objeto instanceof construtos_1.Isto) {
|
|
3879
|
+
if (this.metodosClasseAtualEmAnalise) {
|
|
3880
|
+
const nomeMembro = entidadeChamada.simbolo.lexema;
|
|
3881
|
+
const metodo = this.metodosClasseAtualEmAnalise.find(m => m.simbolo.lexema === nomeMembro);
|
|
3882
|
+
if (metodo) {
|
|
3883
|
+
return metodo.tipo || 'qualquer';
|
|
3884
|
+
}
|
|
3885
|
+
}
|
|
3886
|
+
return 'qualquer';
|
|
3887
|
+
}
|
|
3841
3888
|
// Este caso ocorre quando a variável/constante é do tipo 'qualquer',
|
|
3842
3889
|
// e a chamada normalmente é feita para uma primitiva.
|
|
3843
3890
|
// A inferência, portanto, ocorre pelo uso da primitiva.
|
|
@@ -4347,7 +4394,20 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4347
4394
|
}
|
|
4348
4395
|
this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do operador.");
|
|
4349
4396
|
this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do operador.");
|
|
4350
|
-
const
|
|
4397
|
+
const indiceAberturaCorpoOp = this.atual - 1;
|
|
4398
|
+
const quantidadeErrosAntesCorpoOp = this.erros.length;
|
|
4399
|
+
let corpoOp = [];
|
|
4400
|
+
try {
|
|
4401
|
+
corpoOp = await this.blocoEscopo();
|
|
4402
|
+
}
|
|
4403
|
+
catch (erro) {
|
|
4404
|
+
this.erros.push(erro);
|
|
4405
|
+
}
|
|
4406
|
+
if (this.erros.length > quantidadeErrosAntesCorpoOp) {
|
|
4407
|
+
this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoOp);
|
|
4408
|
+
corpoOp = [];
|
|
4409
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
4410
|
+
}
|
|
4351
4411
|
const corpoFuncaoOp = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloNomeMetodo.linha, paramsOp, corpoOp);
|
|
4352
4412
|
const metodoOp = new declaracoes_1.FuncaoDeclaracao(simboloNomeMetodo, corpoFuncaoOp);
|
|
4353
4413
|
metodoOp.estatico = ehEstatico;
|
|
@@ -4405,7 +4465,20 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4405
4465
|
// Método concreto: com corpo.
|
|
4406
4466
|
// Inferência de tipo de retorno igual a corpoDaFuncao().
|
|
4407
4467
|
this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
|
|
4408
|
-
const
|
|
4468
|
+
const indiceAberturaCorpo = this.atual - 1;
|
|
4469
|
+
const quantidadeErrosAntesCorpo = this.erros.length;
|
|
4470
|
+
let corpo = [];
|
|
4471
|
+
try {
|
|
4472
|
+
corpo = await this.blocoEscopo();
|
|
4473
|
+
}
|
|
4474
|
+
catch (erro) {
|
|
4475
|
+
this.erros.push(erro);
|
|
4476
|
+
}
|
|
4477
|
+
if (this.erros.length > quantidadeErrosAntesCorpo) {
|
|
4478
|
+
this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpo);
|
|
4479
|
+
corpo = [];
|
|
4480
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
4481
|
+
}
|
|
4409
4482
|
let expressoesRetorna = [];
|
|
4410
4483
|
for (const declaracao of corpo) {
|
|
4411
4484
|
expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
|
|
@@ -4471,7 +4544,21 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4471
4544
|
}
|
|
4472
4545
|
this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros do acessor.");
|
|
4473
4546
|
this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do acessor.");
|
|
4474
|
-
const
|
|
4547
|
+
const indiceAberturaCorpoAcessor = this.atual - 1;
|
|
4548
|
+
const quantidadeErrosAntesCorpoAcessor = this.erros.length;
|
|
4549
|
+
let corpoAcessor = [];
|
|
4550
|
+
try {
|
|
4551
|
+
corpoAcessor = await this.blocoEscopo();
|
|
4552
|
+
}
|
|
4553
|
+
catch (erro) {
|
|
4554
|
+
this.erros.push(erro);
|
|
4555
|
+
}
|
|
4556
|
+
if (this.erros.length >
|
|
4557
|
+
quantidadeErrosAntesCorpoAcessor) {
|
|
4558
|
+
this.atual = this.encontrarIndiceAposFechamentoDeBloco(indiceAberturaCorpoAcessor);
|
|
4559
|
+
corpoAcessor = [];
|
|
4560
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
4561
|
+
}
|
|
4475
4562
|
// Inferência de tipo de retorno
|
|
4476
4563
|
let tipoAcessor = 'qualquer';
|
|
4477
4564
|
let expressoesRetornaAcessor = [];
|
|
@@ -4536,6 +4623,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4536
4623
|
}
|
|
4537
4624
|
}
|
|
4538
4625
|
};
|
|
4626
|
+
this.metodosClasseAtualEmAnalise = metodos;
|
|
4539
4627
|
await compreenderMembros('publico', false);
|
|
4540
4628
|
this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
4541
4629
|
// Verificação em tempo de análise: classe deve implementar todos os contratos das interfaces.
|
|
@@ -4594,6 +4682,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4594
4682
|
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasses, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstrangeira, ehEstatica, implementaInterfaces, mesclas);
|
|
4595
4683
|
this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
|
|
4596
4684
|
this.superclasseAtual = undefined;
|
|
4685
|
+
this.metodosClasseAtualEmAnalise = undefined;
|
|
4597
4686
|
return definicaoClasse;
|
|
4598
4687
|
}
|
|
4599
4688
|
/**
|
|
@@ -4741,6 +4830,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4741
4830
|
* @returns Sempre retorna `void`.
|
|
4742
4831
|
*/
|
|
4743
4832
|
sincronizar() {
|
|
4833
|
+
if (this.estaNoFinal()) {
|
|
4834
|
+
return;
|
|
4835
|
+
}
|
|
4744
4836
|
this.avancarEDevolverAnterior(); // avança além do token com erro
|
|
4745
4837
|
while (!this.estaNoFinal()) {
|
|
4746
4838
|
// Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
|
|
@@ -4764,6 +4856,21 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4764
4856
|
this.avancarEDevolverAnterior();
|
|
4765
4857
|
}
|
|
4766
4858
|
}
|
|
4859
|
+
encontrarIndiceAposFechamentoDeBloco(indiceAbertura) {
|
|
4860
|
+
let aberturasPendentes = 1;
|
|
4861
|
+
for (let indice = indiceAbertura + 1; indice < this.simbolos.length; indice++) {
|
|
4862
|
+
if (this.simbolos[indice].tipo === delegua_2.default.CHAVE_ESQUERDA) {
|
|
4863
|
+
aberturasPendentes++;
|
|
4864
|
+
}
|
|
4865
|
+
else if (this.simbolos[indice].tipo === delegua_2.default.CHAVE_DIREITA) {
|
|
4866
|
+
aberturasPendentes--;
|
|
4867
|
+
if (aberturasPendentes === 0) {
|
|
4868
|
+
return indice + 1;
|
|
4869
|
+
}
|
|
4870
|
+
}
|
|
4871
|
+
}
|
|
4872
|
+
return this.simbolos.length;
|
|
4873
|
+
}
|
|
4767
4874
|
/**
|
|
4768
4875
|
* Todas as resoluções triviais da linguagem, ou seja, todas as
|
|
4769
4876
|
* resoluções que podem ocorrer dentro ou fora de um bloco.
|
|
@@ -7414,7 +7521,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7414
7521
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
7415
7522
|
// Funções nativas de Delégua (e de Pituguês também, por enquanto)
|
|
7416
7523
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
|
|
7417
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7524
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
|
|
7418
7525
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
7419
7526
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
7420
7527
|
]));
|
|
@@ -7430,19 +7537,19 @@ class AvaliadorSintaticoPitugues {
|
|
|
7430
7537
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7431
7538
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7432
7539
|
]));
|
|
7433
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7540
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_indice', 'inteiro', true, [
|
|
7434
7541
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7435
7542
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7436
7543
|
]));
|
|
7437
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7544
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo', 'inteiro', true, [
|
|
7438
7545
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7439
7546
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7440
7547
|
]));
|
|
7441
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7548
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo_indice', 'inteiro', true, [
|
|
7442
7549
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7443
7550
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7444
7551
|
]));
|
|
7445
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7552
|
+
this.pilhaEscopos.definirInformacoesVariavel('filtrar_por', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrar_por', 'qualquer[]', true, [
|
|
7446
7553
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7447
7554
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7448
7555
|
]));
|
|
@@ -7481,11 +7588,11 @@ class AvaliadorSintaticoPitugues {
|
|
|
7481
7588
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7482
7589
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoOrdenacao', 'função'),
|
|
7483
7590
|
]));
|
|
7484
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7591
|
+
this.pilhaEscopos.definirInformacoesVariavel('para_cada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('para_cada', 'qualquer[]', true, [
|
|
7485
7592
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7486
7593
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7487
7594
|
]));
|
|
7488
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7595
|
+
this.pilhaEscopos.definirInformacoesVariavel('primeiro_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiro_em_condicao', 'qualquer', true, [
|
|
7489
7596
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7490
7597
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7491
7598
|
]));
|
|
@@ -7512,7 +7619,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7512
7619
|
this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
|
|
7513
7620
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7514
7621
|
]));
|
|
7515
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7622
|
+
this.pilhaEscopos.definirInformacoesVariavel('todos_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos_em_condicao', 'lógico', true, [
|
|
7516
7623
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7517
7624
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
|
|
7518
7625
|
]));
|