@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.
Files changed (25) hide show
  1. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  2. package/analisador-semantico/analisador-semantico.js +21 -2
  3. package/analisador-semantico/analisador-semantico.js.map +1 -1
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +1 -1
  5. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  6. package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -0
  7. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  8. package/avaliador-sintatico/avaliador-sintatico.js +93 -5
  9. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  10. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +8 -8
  11. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  12. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +1 -1
  13. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  14. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +19 -19
  15. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  16. package/bin/package.json +2 -2
  17. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  18. package/interpretador/dialetos/pitugues/comum.js +78 -158
  19. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  20. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +1 -0
  21. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  22. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +9 -0
  23. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  24. package/package.json +2 -2
  25. 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.1",
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": "^19.0.3",
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.valor === undefined) {
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 tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
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 '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
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 corpoOp = await this.blocoEscopo();
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 corpo = await this.blocoEscopo();
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 corpoAcessor = await this.blocoEscopo();
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('aleatorioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorioEntre', 'número', true, [
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('encontrarIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarIndice', 'inteiro', true, [
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('encontrarUltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimo', 'inteiro', true, [
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('encontrarUltimoIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimoIndice', 'inteiro', true, [
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('filtrarPor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrarPor', 'qualquer[]', true, [
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('paraCada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('paraCada', 'qualquer[]', true, [
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('primeiroEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiroEmCondicao', 'qualquer', true, [
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('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
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
  ]));