@designliquido/delegua 0.73.0 → 1.0.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.
Files changed (133) hide show
  1. package/analisador-semantico/analisador-semantico.js +1 -1
  2. package/analisador-semantico/analisador-semantico.js.map +1 -1
  3. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +4 -4
  4. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  5. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +34 -34
  6. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  7. package/avaliador-sintatico/avaliador-sintatico-base.js +35 -34
  8. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  9. package/avaliador-sintatico/avaliador-sintatico.d.ts +77 -73
  10. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  11. package/avaliador-sintatico/avaliador-sintatico.js +266 -245
  12. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  13. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts +14 -14
  14. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  15. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js +29 -28
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +1 -1
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +3 -3
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +13 -13
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +17 -17
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +41 -40
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +208 -140
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +13 -13
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
  31. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +25 -25
  32. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  33. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +37 -38
  34. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  35. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +105 -110
  36. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  37. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts +35 -35
  38. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  39. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +98 -101
  40. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  41. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +1 -1
  42. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  43. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +3 -3
  44. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  45. package/bibliotecas/biblioteca-global.d.ts +3 -2
  46. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  47. package/bibliotecas/biblioteca-global.js +92 -151
  48. package/bibliotecas/biblioteca-global.js.map +1 -1
  49. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +3 -2
  50. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  51. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +20 -25
  52. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  53. package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts +6 -0
  54. package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -0
  55. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +23 -0
  56. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -0
  57. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  58. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +16 -0
  59. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  60. package/bibliotecas/primitivas-tupla.d.ts +6 -0
  61. package/bibliotecas/primitivas-tupla.d.ts.map +1 -0
  62. package/bibliotecas/primitivas-tupla.js +45 -0
  63. package/bibliotecas/primitivas-tupla.js.map +1 -0
  64. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  65. package/bibliotecas/primitivas-vetor.js +38 -0
  66. package/bibliotecas/primitivas-vetor.js.map +1 -1
  67. package/bin/package.json +1 -1
  68. package/construtos/dicionario.d.ts +2 -1
  69. package/construtos/dicionario.d.ts.map +1 -1
  70. package/construtos/dicionario.js +2 -1
  71. package/construtos/dicionario.js.map +1 -1
  72. package/construtos/literal.d.ts +1 -1
  73. package/construtos/literal.d.ts.map +1 -1
  74. package/construtos/literal.js +4 -0
  75. package/construtos/literal.js.map +1 -1
  76. package/formatadores/formatador-delegua.d.ts.map +1 -1
  77. package/formatadores/formatador-delegua.js +10 -3
  78. package/formatadores/formatador-delegua.js.map +1 -1
  79. package/interfaces/avaliador-sintatico-interface.d.ts +1 -1
  80. package/interfaces/avaliador-sintatico-interface.d.ts.map +1 -1
  81. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +1 -1
  82. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -1
  83. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  84. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  85. package/interpretador/dialetos/pitugues/comum.js +19 -0
  86. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  87. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +1 -1
  88. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  89. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +3 -4
  90. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  91. package/interpretador/interpretador-base.d.ts.map +1 -1
  92. package/interpretador/interpretador-base.js +60 -15
  93. package/interpretador/interpretador-base.js.map +1 -1
  94. package/interpretador/interpretador.d.ts.map +1 -1
  95. package/interpretador/interpretador.js +49 -15
  96. package/interpretador/interpretador.js.map +1 -1
  97. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  98. package/lexador/dialetos/lexador-pitugues.js +8 -0
  99. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  100. package/lexador/lexador.d.ts.map +1 -1
  101. package/lexador/lexador.js +4 -0
  102. package/lexador/lexador.js.map +1 -1
  103. package/package.json +1 -1
  104. package/tipos-de-simbolos/delegua.d.ts +1 -0
  105. package/tipos-de-simbolos/delegua.d.ts.map +1 -1
  106. package/tipos-de-simbolos/delegua.js +1 -0
  107. package/tipos-de-simbolos/delegua.js.map +1 -1
  108. package/tipos-de-simbolos/pitugues.d.ts +2 -0
  109. package/tipos-de-simbolos/pitugues.d.ts.map +1 -1
  110. package/tipos-de-simbolos/pitugues.js +2 -0
  111. package/tipos-de-simbolos/pitugues.js.map +1 -1
  112. package/tradutores/tradutor-assembly-x64.js +122 -122
  113. package/tradutores/tradutor-assemblyscript.js +1 -1
  114. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  115. package/tradutores/tradutor-calango.d.ts +4 -3
  116. package/tradutores/tradutor-calango.d.ts.map +1 -1
  117. package/tradutores/tradutor-calango.js +7 -14
  118. package/tradutores/tradutor-calango.js.map +1 -1
  119. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  120. package/tradutores/tradutor-javascript.js +12 -5
  121. package/tradutores/tradutor-javascript.js.map +1 -1
  122. package/tradutores/tradutor-mermaidjs.js +1 -1
  123. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  124. package/tradutores/tradutor-portugol-ipt.d.ts +1 -1
  125. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  126. package/tradutores/tradutor-portugol-ipt.js +3 -3
  127. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  128. package/tradutores/tradutor-python.d.ts.map +1 -1
  129. package/tradutores/tradutor-python.js +12 -5
  130. package/tradutores/tradutor-python.js.map +1 -1
  131. package/tradutores/tradutor-reverso-tenda.js +1 -1
  132. package/tradutores/tradutor-reverso-tenda.js.map +1 -1
  133. package/umd/delegua.js +1219 -1247
@@ -87,13 +87,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
87
87
  }
88
88
  return tipoElementarResolvido;
89
89
  }
90
- obterChaveDicionario() {
90
+ async obterChaveDicionario() {
91
91
  switch (this.simbolos[this.atual].tipo) {
92
92
  case tenda_1.default.NUMERO:
93
93
  case tenda_1.default.TEXTO:
94
94
  case tenda_1.default.FALSO:
95
95
  case tenda_1.default.VERDADEIRO:
96
- return this.primario();
96
+ return await this.primario();
97
97
  case tenda_1.default.IDENTIFICADOR:
98
98
  const simboloIdentificador = this.avancarEDevolverAnterior();
99
99
  let tipoOperando;
@@ -117,7 +117,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
117
117
  throw this.erro(this.simbolos[this.atual], `Símbolo ${this.simbolos[this.atual].tipo} inesperado ou inválido como chave de dicionário.`);
118
118
  }
119
119
  }
120
- construtoDicionario(simboloChaveEsquerda) {
120
+ async construtoDicionario(simboloChaveEsquerda) {
121
121
  this.avancarEDevolverAnterior();
122
122
  const chaves = [];
123
123
  const valores = [];
@@ -125,9 +125,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
125
125
  return new construtos_1.Dicionario(this.hashArquivo, Number(simboloChaveEsquerda.linha), [], []);
126
126
  }
127
127
  while (!this.verificarSeSimboloAtualEIgualA(tenda_1.default.CHAVE_DIREITA)) {
128
- const chave = this.obterChaveDicionario();
128
+ const chave = await this.obterChaveDicionario();
129
129
  this.consumir(tenda_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
130
- const valor = this.atribuir();
130
+ const valor = await this.atribuir();
131
131
  chaves.push(chave);
132
132
  valores.push(valor);
133
133
  if (this.simbolos[this.atual].tipo !== tenda_1.default.CHAVE_DIREITA) {
@@ -136,23 +136,23 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
136
136
  }
137
137
  return new construtos_1.Dicionario(this.hashArquivo, Number(simboloChaveEsquerda.linha), chaves, valores);
138
138
  }
139
- construtoTupla() {
140
- const expressao = this.expressao();
139
+ async construtoTupla() {
140
+ const expressao = await this.expressao();
141
141
  const argumentos = [expressao];
142
142
  while (this.simbolos[this.atual].tipo === tenda_1.default.VIRGULA) {
143
143
  this.avancarEDevolverAnterior();
144
- argumentos.push(this.expressao());
144
+ argumentos.push(await this.expressao());
145
145
  }
146
146
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
147
147
  this.consumir(tenda_1.default.COLCHETE_DIREITO, "Esperado ']' após a expressão.");
148
148
  return new tuplas_1.SeletorTuplas(...argumentos);
149
149
  }
150
- primario() {
150
+ async primario() {
151
151
  const simboloAtual = this.simbolos[this.atual];
152
152
  let valores = [];
153
153
  switch (simboloAtual.tipo) {
154
154
  case tenda_1.default.CHAVE_ESQUERDA:
155
- return this.construtoDicionario(simboloAtual);
155
+ return await this.construtoDicionario(simboloAtual);
156
156
  case tenda_1.default.COLCHETE_ESQUERDO:
157
157
  this.avancarEDevolverAnterior();
158
158
  valores = [];
@@ -161,9 +161,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
161
161
  }
162
162
  while (!this.verificarSeSimboloAtualEIgualA(tenda_1.default.COLCHETE_DIREITO)) {
163
163
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
164
- return this.construtoTupla();
164
+ return await this.construtoTupla();
165
165
  }
166
- const valor = this.atribuir();
166
+ const valor = await this.atribuir();
167
167
  valores.push(valor);
168
168
  if (this.simbolos[this.atual].tipo !== tenda_1.default.COLCHETE_DIREITO) {
169
169
  this.consumir(tenda_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
@@ -194,7 +194,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
194
194
  // Avançamos o parêntese esquerdo aqui, porque `corpoDaFuncao`
195
195
  // espera que esse parêntese esquerdo já foi consumido.
196
196
  this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado parêntese esquerdo após palavra reservada 'função'.");
197
- const corpoDaFuncao = this.corpoDaFuncao(simboloFuncao.lexema);
197
+ const corpoDaFuncao = await this.corpoDaFuncao(simboloFuncao.lexema);
198
198
  this.pilhaEscopos.definirInformacoesVariavel(simboloFuncao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloFuncao.lexema, 'função'));
199
199
  return corpoDaFuncao;
200
200
  case tenda_1.default.IDENTIFICADOR:
@@ -229,7 +229,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
229
229
  return new construtos_1.Literal(this.hashArquivo, Number(simboloNumeroTexto.linha), simboloNumeroTexto.literal, tipoDadosElementar);
230
230
  case tenda_1.default.PARENTESE_ESQUERDO:
231
231
  this.avancarEDevolverAnterior();
232
- const expressao = this.expressao();
232
+ const expressao = await this.expressao();
233
233
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
234
234
  return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
235
235
  case tenda_1.default.SUPER:
@@ -244,12 +244,12 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
244
244
  }
245
245
  throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
246
246
  }
247
- chamar() {
248
- let expressao = this.primario();
247
+ async chamar() {
248
+ let expressao = await this.primario();
249
249
  while (true) {
250
250
  let tipoPrimitiva = undefined;
251
251
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
252
- expressao = this.finalizarChamada(expressao, tipoPrimitiva);
252
+ expressao = await this.finalizarChamada(expressao, tipoPrimitiva);
253
253
  }
254
254
  else if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO)) {
255
255
  const nome = this.consumir(tenda_1.default.IDENTIFICADOR, "Esperado nome de método ou propriedade após '.'.");
@@ -257,7 +257,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
257
257
  expressao = new construtos_1.AcessoMetodoOuPropriedade(this.hashArquivo, expressao, nome);
258
258
  }
259
259
  else if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.COLCHETE_ESQUERDO)) {
260
- const indice = this.expressao();
260
+ const indice = await this.expressao();
261
261
  const simboloFechamento = this.consumir(tenda_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
262
262
  expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
263
263
  }
@@ -387,17 +387,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
387
387
  }
388
388
  return entidadeChamada;
389
389
  }
390
- declaracaoDeFuncao(identificador) {
390
+ async declaracaoDeFuncao(identificador) {
391
391
  // Se houver chamadas recursivas à função, precisamos definir um tipo
392
392
  // para ela. Vai ser atualizado após avaliação do corpo da função.
393
393
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, 'qualquer'));
394
- const corpoDaFuncao = this.corpoDaFuncao('implícita');
394
+ const corpoDaFuncao = await this.corpoDaFuncao('implícita');
395
395
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, corpoDaFuncao.tipo));
396
396
  const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(identificador, corpoDaFuncao, corpoDaFuncao.tipo);
397
397
  this.pilhaEscopos.registrarReferenciaFuncao(identificador.lexema, funcaoDeclaracao);
398
398
  return funcaoDeclaracao;
399
399
  }
400
- finalizarChamada(entidadeChamada, tipoPrimitiva = undefined) {
400
+ async finalizarChamada(entidadeChamada, tipoPrimitiva = undefined) {
401
401
  const argumentos = [];
402
402
  if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
403
403
  do {
@@ -405,7 +405,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
405
405
  if (argumentos.length >= 255) {
406
406
  throw this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 argumentos.');
407
407
  }
408
- argumentos.push(this.expressao());
408
+ argumentos.push(await this.expressao());
409
409
  } while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
410
410
  }
411
411
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
@@ -416,19 +416,19 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
416
416
  construtoChamada.tipo = 'qualquer';
417
417
  return construtoChamada;
418
418
  }
419
- unario() {
419
+ async unario() {
420
420
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.NÃO, tenda_1.default.SUBTRACAO, tenda_1.default.BIT_NOT, tenda_1.default.INCREMENTAR, tenda_1.default.DECREMENTAR)) {
421
421
  const operador = this.simbolos[this.atual - 1];
422
- const direito = this.unario();
422
+ const direito = await this.unario();
423
423
  return new construtos_1.Unario(this.hashArquivo, operador, direito, 'ANTES');
424
424
  }
425
- return this.chamar();
425
+ return await this.chamar();
426
426
  }
427
- multiplicar() {
428
- let expressao = this.exponenciacao();
427
+ async multiplicar() {
428
+ let expressao = await this.exponenciacao();
429
429
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.DIVISAO, tenda_1.default.DIVISAO_INTEIRA, tenda_1.default.MODULO, tenda_1.default.MULTIPLICACAO)) {
430
430
  const operador = this.simbolos[this.atual - 1];
431
- const direito = this.exponenciacao();
431
+ const direito = await this.exponenciacao();
432
432
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
433
433
  }
434
434
  return expressao;
@@ -438,53 +438,53 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
438
438
  * ser avaliado pelo Interpretador.
439
439
  * @returns Um Construto, normalmente um `Binario`, ou `Unario` se houver alguma operação unária para ser avaliada.
440
440
  */
441
- adicaoOuSubtracao() {
442
- let expressao = this.multiplicar();
441
+ async adicaoOuSubtracao() {
442
+ let expressao = await this.multiplicar();
443
443
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.SUBTRACAO, tenda_1.default.ADICAO)) {
444
444
  const operador = this.simbolos[this.atual - 1];
445
- const direito = this.multiplicar();
445
+ const direito = await this.multiplicar();
446
446
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
447
447
  }
448
448
  return expressao;
449
449
  }
450
- bitShift() {
451
- let expressao = this.adicaoOuSubtracao();
450
+ async bitShift() {
451
+ let expressao = await this.adicaoOuSubtracao();
452
452
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.MENOR_MENOR, tenda_1.default.MAIOR_MAIOR)) {
453
453
  const operador = this.simbolos[this.atual - 1];
454
- const direito = this.adicaoOuSubtracao();
454
+ const direito = await this.adicaoOuSubtracao();
455
455
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
456
456
  }
457
457
  return expressao;
458
458
  }
459
- bitE() {
460
- let expressao = this.bitShift();
459
+ async bitE() {
460
+ let expressao = await this.bitShift();
461
461
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.BIT_AND)) {
462
462
  const operador = this.simbolos[this.atual - 1];
463
- const direito = this.bitShift();
463
+ const direito = await this.bitShift();
464
464
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
465
465
  }
466
466
  return expressao;
467
467
  }
468
- bitOu() {
469
- let expressao = this.bitE();
468
+ async bitOu() {
469
+ let expressao = await this.bitE();
470
470
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.BIT_OR, tenda_1.default.BIT_XOR)) {
471
471
  const operador = this.simbolos[this.atual - 1];
472
- const direito = this.bitE();
472
+ const direito = await this.bitE();
473
473
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
474
474
  }
475
475
  return expressao;
476
476
  }
477
- comparar() {
478
- let expressao = this.bitOu();
477
+ async comparar() {
478
+ let expressao = await this.bitOu();
479
479
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.MAIOR, tenda_1.default.MAIOR_IGUAL, tenda_1.default.MENOR, tenda_1.default.MENOR_IGUAL)) {
480
480
  const operador = this.simbolos[this.atual - 1];
481
- const direito = this.bitOu();
481
+ const direito = await this.bitOu();
482
482
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
483
483
  }
484
484
  return expressao;
485
485
  }
486
- comparacaoIgualdade() {
487
- let expressao = this.comparar();
486
+ async comparacaoIgualdade() {
487
+ let expressao = await this.comparar();
488
488
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.NÃO, tenda_1.default.É)) {
489
489
  const operador = this.simbolos[this.atual - 1];
490
490
  if (operador.tipo === tenda_1.default.NÃO) {
@@ -493,25 +493,25 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
493
493
  operador.lexema = 'não é';
494
494
  operador.literal = 'não é';
495
495
  }
496
- const direito = this.comparar();
496
+ const direito = await this.comparar();
497
497
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
498
498
  }
499
499
  return expressao;
500
500
  }
501
- em() {
502
- let expressao = this.comparacaoIgualdade();
501
+ async em() {
502
+ let expressao = await this.comparacaoIgualdade();
503
503
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.TEM)) {
504
504
  const operador = this.simbolos[this.atual - 1];
505
- const direito = this.comparacaoIgualdade();
505
+ const direito = await this.comparacaoIgualdade();
506
506
  expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
507
507
  }
508
508
  return expressao;
509
509
  }
510
- e() {
511
- let expressao = this.em();
510
+ async e() {
511
+ let expressao = await this.em();
512
512
  while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.E)) {
513
513
  const operador = this.simbolos[this.atual - 1];
514
- const direito = this.em();
514
+ const direito = await this.em();
515
515
  expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
516
516
  }
517
517
  return expressao;
@@ -520,11 +520,11 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
520
520
  * Método que resolve atribuições.
521
521
  * @returns Um construto do tipo `Atribuir`, `Conjunto` ou `AtribuicaoPorIndice`.
522
522
  */
523
- atribuir() {
524
- const expressao = this.ou();
523
+ async atribuir() {
524
+ const expressao = await this.ou();
525
525
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.IGUAL)) {
526
526
  const igual = this.simbolos[this.atual - 1];
527
- const valor = this.expressao();
527
+ const valor = await this.atribuir();
528
528
  switch (expressao.constructor) {
529
529
  case construtos_1.Variavel:
530
530
  return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
@@ -543,27 +543,27 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
543
543
  * Declaração para comando `leia`, para ler dados de entrada do usuário.
544
544
  * @returns Um objeto da classe `Leia`.
545
545
  */
546
- expressaoLeia() {
546
+ async expressaoLeia() {
547
547
  const simboloLeia = this.avancarEDevolverAnterior();
548
548
  this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos argumentos em instrução `leia`.");
549
549
  const argumentos = [];
550
550
  if (this.simbolos[this.atual].tipo !== tenda_1.default.PARENTESE_DIREITO) {
551
551
  do {
552
- argumentos.push(this.expressao());
552
+ argumentos.push(await this.expressao());
553
553
  } while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
554
554
  }
555
555
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos em instrução `leia`.");
556
556
  return new construtos_1.Leia(simboloLeia, argumentos);
557
557
  }
558
558
  // TODO: Depreciar.
559
- expressao() {
560
- return this.atribuir();
559
+ async expressao() {
560
+ return await this.atribuir();
561
561
  }
562
- blocoEscopo(tipo) {
562
+ async blocoEscopo(tipo) {
563
563
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
564
564
  let declaracoes = [];
565
565
  while (!this.verificarTipoSimboloAtual(tenda_1.default.FIM) && !this.estaNoFinal()) {
566
- const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
566
+ const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
567
567
  if (Array.isArray(retornoDeclaracao)) {
568
568
  declaracoes = declaracoes.concat(retornoDeclaracao);
569
569
  }
@@ -587,26 +587,26 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
587
587
  this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
588
588
  return new declaracoes_1.Continua(this.simbolos[this.atual - 1]);
589
589
  }
590
- declaracaoEnquanto() {
590
+ async declaracaoEnquanto() {
591
591
  try {
592
592
  const simboloEnquanto = this.simbolos[this.atual - 1];
593
593
  this.blocos += 1;
594
- const condicao = this.expressao();
594
+ const condicao = await this.expressao();
595
595
  this.consumir(tenda_1.default.FAÇA, "Esperado 'faça' depois da condição.");
596
- const blocoCorpo = this.blocoEscopo('enquanto');
596
+ const blocoCorpo = await this.blocoEscopo('enquanto');
597
597
  return new declaracoes_1.Enquanto(condicao, new declaracoes_1.Bloco(simboloEnquanto.linha, simboloEnquanto.hashArquivo, blocoCorpo));
598
598
  }
599
599
  finally {
600
600
  this.blocos -= 1;
601
601
  }
602
602
  }
603
- declaracaoEscreva() {
603
+ async declaracaoEscreva() {
604
604
  const simboloAtual = this.simbolos[this.atual];
605
605
  this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
606
606
  const argumentos = [];
607
607
  if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
608
608
  do {
609
- argumentos.push(this.expressao());
609
+ argumentos.push(await this.expressao());
610
610
  } while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
611
611
  }
612
612
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
@@ -614,13 +614,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
614
614
  // this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PONTO_E_VIRGULA);
615
615
  return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
616
616
  }
617
- declaracaoExpressao() {
618
- const expressao = this.expressao();
617
+ async declaracaoExpressao() {
618
+ const expressao = await this.expressao();
619
619
  // Ponto-e-vírgula é opcional aqui.
620
620
  this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
621
621
  return new declaracoes_1.Expressao(expressao);
622
622
  }
623
- declaracaoPara() {
623
+ async declaracaoPara() {
624
624
  const simboloPara = this.simbolos[this.atual - 1];
625
625
  this.consumir(tenda_1.default.CADA, `Esperado palavra reservada 'cada' após 'para'.`);
626
626
  this.blocos += 1;
@@ -628,17 +628,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
628
628
  this.consumir(tenda_1.default.EM, "Esperado palavra reservada 'em' após variável de iteração em instrução 'para cada'.");
629
629
  // Se for um literal ou identificador numérico, segue um `para`
630
630
  // tradicional de Delégua, com variável de controle e passo positivo, incrementado em 1.
631
- const literalOuVariavelInicio = this.adicaoOuSubtracao();
631
+ const literalOuVariavelInicio = await this.adicaoOuSubtracao();
632
632
  this.blocos -= 1;
633
633
  switch (literalOuVariavelInicio.constructor) {
634
634
  case construtos_1.Literal:
635
- return this.declaracaoParaTradicional(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
635
+ return await this.declaracaoParaTradicional(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
636
636
  // TODO: Terminar
637
637
  default:
638
- return this.declaracaoParaCada(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
638
+ return await this.declaracaoParaCada(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
639
639
  }
640
640
  }
641
- declaracaoParaCada(simboloParaCada, simboloVariavelIteracao, literalOuVariavelIteravel) {
641
+ async declaracaoParaCada(simboloParaCada, simboloVariavelIteracao, literalOuVariavelIteravel) {
642
642
  const tipoVetor = literalOuVariavelIteravel.tipo;
643
643
  // TODO: Permitir 'qualquer' aqui é bastante frágil. Criar uma forma de validar o tipo
644
644
  // antes dessa avaliação.
@@ -651,17 +651,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
651
651
  }
652
652
  this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, tipoVariavelIteracao));
653
653
  this.consumir(tenda_1.default.FAÇA, "Esperado palavra reservada 'faça' após literal ou variável de iteração em declaração 'para cada'.");
654
- const corpo = this.blocoEscopo();
654
+ const corpo = await this.blocoEscopo();
655
655
  return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloParaCada.linha), new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao), literalOuVariavelIteravel, new declaracoes_1.Bloco(simboloParaCada.hashArquivo, simboloParaCada.linha, corpo));
656
656
  }
657
- declaracaoParaTradicional(simboloPara, simboloVariavelIteracao, literalOuVariavelInicio) {
657
+ async declaracaoParaTradicional(simboloPara, simboloVariavelIteracao, literalOuVariavelInicio) {
658
658
  this.consumir(tenda_1.default.ATÉ, "Esperado palavra reservada 'até' após literal ou identificador de início de declaração 'para cada'.");
659
- const literalOuVariavelFim = this.adicaoOuSubtracao();
659
+ const literalOuVariavelFim = await this.adicaoOuSubtracao();
660
660
  this.consumir(tenda_1.default.FAÇA, "Esperado palavra reservada 'faça' após literal ou variável de passo final em declaração 'para cada'.");
661
661
  // A variável de iteração precisa ser definida aqui, para que o corpo de `para cada` (um escopo)
662
662
  // seja capaz de reconhecer a variável e seu tipo.
663
663
  this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, 'inteiro'));
664
- const corpo = this.blocoEscopo();
664
+ const corpo = await this.blocoEscopo();
665
665
  // `variavelIteracao <= valorFinal`
666
666
  let operadorCondicao = new simbolo_1.Simbolo(tenda_1.default.MENOR_IGUAL, '<=', null, Number(simboloPara.linha), this.hashArquivo);
667
667
  let operadorCondicaoIncremento = new simbolo_1.Simbolo(tenda_1.default.MENOR, '<', null, Number(simboloPara.linha), this.hashArquivo);
@@ -673,7 +673,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
673
673
  // Incremento, feito em construto especial `FimPara`.
674
674
  new construtos_1.FimPara(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), operadorCondicaoIncremento, literalOuVariavelFim), new declaracoes_1.Expressao(new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), new simbolo_1.Simbolo(tenda_1.default.ADICAO, '+', null, Number(simboloPara.linha), this.hashArquivo), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), 1))))), new declaracoes_1.Bloco(simboloPara.hashArquivo, simboloPara.linha, corpo));
675
675
  }
676
- declaracaoRetorna() {
676
+ async declaracaoRetorna() {
677
677
  const simboloChave = this.simbolos[this.atual - 1];
678
678
  let valor = null;
679
679
  if ([
@@ -691,19 +691,19 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
691
691
  tenda_1.default.TEXTO,
692
692
  tenda_1.default.VERDADEIRO,
693
693
  ].includes(this.simbolos[this.atual].tipo)) {
694
- valor = this.expressao();
694
+ valor = await this.expressao();
695
695
  }
696
696
  // Ponto-e-vírgula é opcional aqui.
697
697
  this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
698
698
  return new declaracoes_1.Retorna(simboloChave, valor);
699
699
  }
700
- declaracaoSe() {
701
- const condicao = this.expressao();
700
+ async declaracaoSe() {
701
+ const condicao = await this.expressao();
702
702
  this.consumir(tenda_1.default.ENTÃO, "Esperado 'então' após a condição.");
703
- const caminhoEntao = this.resolverDeclaracao();
703
+ const caminhoEntao = await this.resolverDeclaracao();
704
704
  let caminhoSenao = null;
705
705
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.SENÃO)) {
706
- caminhoSenao = this.resolverDeclaracao();
706
+ caminhoSenao = await this.resolverDeclaracao();
707
707
  }
708
708
  return new declaracoes_1.Se(condicao, caminhoEntao, [], caminhoSenao);
709
709
  }
@@ -723,7 +723,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
723
723
  * @see resolverDeclaracaoForaDeBloco para as declarações que não podem
724
724
  * ocorrer em blocos de escopo elementares.
725
725
  */
726
- resolverDeclaracao() {
726
+ async resolverDeclaracao() {
727
727
  switch (this.simbolos[this.atual].tipo) {
728
728
  case tenda_1.default.COMENTARIO:
729
729
  return this.declaracaoComentarioUmaLinha();
@@ -738,7 +738,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
738
738
  return this.declaracaoEscreva();
739
739
  case tenda_1.default.FAÇA:
740
740
  this.avancarEDevolverAnterior();
741
- return this.blocoEscopo();
741
+ return await this.blocoEscopo();
742
742
  case tenda_1.default.PARA:
743
743
  this.avancarEDevolverAnterior();
744
744
  return this.declaracaoPara();
@@ -754,7 +754,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
754
754
  return this.declaracaoRetorna();
755
755
  case tenda_1.default.TENTE:
756
756
  this.avancarEDevolverAnterior();
757
- return this.declaracaoTente();
757
+ return await this.declaracaoTente();
758
758
  case tenda_1.default.SEJA:
759
759
  this.avancarEDevolverAnterior();
760
760
  return this.declaracaoDeVariaveisOuFuncoes();
@@ -771,7 +771,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
771
771
  throw this.erro(this.simbolos[this.atual], 'Não é permitido ter dois identificadores seguidos na mesma linha.');
772
772
  }
773
773
  }
774
- return this.declaracaoExpressao();
774
+ return await this.declaracaoExpressao();
775
775
  }
776
776
  logicaComumInferenciaTiposVariaveis(inicializador) {
777
777
  switch (inicializador.constructor) {
@@ -823,9 +823,6 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
823
823
  case tuplas_1.Noneto:
824
824
  case tuplas_1.Deceto:
825
825
  return delegua_1.default.TUPLA;
826
- /* case 'ImportarBiblioteca':
827
- case 'ModuloDeclaracoes':
828
- return 'módulo'; */
829
826
  default:
830
827
  return inicializador.tipo;
831
828
  }
@@ -835,24 +832,24 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
835
832
  * @returns Um Construto, ou do tipo `Var` para variável, ou do tipo `FuncaoDeclaracao` se for
836
833
  * declaração de função.
837
834
  */
838
- declaracaoDeVariaveisOuFuncoes() {
835
+ async declaracaoDeVariaveisOuFuncoes() {
839
836
  const identificador = this.consumir(tenda_1.default.IDENTIFICADOR, 'Esperado nome da variável ou função.');
840
837
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
841
838
  return this.declaracaoDeFuncao(identificador);
842
839
  }
843
840
  this.consumir(tenda_1.default.IGUAL, "Esperado símbolo de igual após nome de identificador em declaração 'seja'.");
844
- const inicializador = this.expressao();
841
+ const inicializador = await this.expressao();
845
842
  const tipo = this.logicaComumInferenciaTiposVariaveis(inicializador);
846
843
  this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
847
844
  return new declaracoes_1.Var(identificador, inicializador, tipo);
848
845
  }
849
- logicaComumParametros() {
846
+ async logicaComumParametros() {
850
847
  const parametros = [];
851
848
  do {
852
849
  const parametro = {};
853
850
  parametro.nome = this.consumir(tenda_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
854
851
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.IGUAL)) {
855
- const valorPadrao = this.primario();
852
+ const valorPadrao = await this.primario();
856
853
  parametro.valorPadrao = valorPadrao;
857
854
  }
858
855
  if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.DOIS_PONTOS)) {
@@ -867,13 +864,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
867
864
  } while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
868
865
  return parametros;
869
866
  }
870
- corpoDaFuncao(tipo) {
867
+ async corpoDaFuncao(tipo) {
871
868
  // O parêntese esquerdo aqui é o símbolo atual.
872
869
  // Ele já foi lido neste ponto.
873
870
  const parenteseEsquerdo = this.simbolos[this.atual];
874
871
  let parametros = [];
875
872
  if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
876
- parametros = this.logicaComumParametros();
873
+ parametros = await this.logicaComumParametros();
877
874
  }
878
875
  this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
879
876
  switch (tipo) {
@@ -885,7 +882,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
885
882
  this.consumir(tenda_1.default.IGUAL, 'Esperado sinal de igual após fechamento de parênteses para declaração de função.');
886
883
  break;
887
884
  }
888
- const corpo = this.resolverDeclaracao();
885
+ const corpo = (await this.resolverDeclaracao());
889
886
  // Se o corpo for uma `Expressao`, corpo é convertido para `Retorna`.
890
887
  // Tenda trabalha com retornos implícitos.
891
888
  let corpoResolvido = [];
@@ -906,9 +903,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
906
903
  * @returns Uma `Declaracao` ou várias, dependendo do retorno de `resolverDeclaracao`.
907
904
  * @see resolverDeclaracao
908
905
  */
909
- resolverDeclaracaoForaDeBloco() {
906
+ async resolverDeclaracaoForaDeBloco() {
910
907
  try {
911
- return this.resolverDeclaracao();
908
+ return await this.resolverDeclaracao();
912
909
  }
913
910
  catch (erro) {
914
911
  this.sincronizar();
@@ -951,7 +948,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
951
948
  }
952
949
  }
953
950
  }
954
- analisar(retornoLexador, hashArquivo) {
951
+ async analisar(retornoLexador, hashArquivo) {
955
952
  const inicioAnalise = (0, browser_process_hrtime_1.default)();
956
953
  this.erros = [];
957
954
  this.atual = 0;
@@ -962,7 +959,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
962
959
  this.inicializarPilhaEscopos();
963
960
  let declaracoes = [];
964
961
  while (!this.estaNoFinal()) {
965
- const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
962
+ const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
966
963
  if (Array.isArray(retornoDeclaracao)) {
967
964
  declaracoes = declaracoes.concat(retornoDeclaracao);
968
965
  }