@designliquido/delegua 1.11.0 → 1.12.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 (242) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts +2 -2
  2. package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
  3. package/analisador-semantico/analisador-semantico-base.js +14 -6
  4. package/analisador-semantico/analisador-semantico-base.js.map +1 -1
  5. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  6. package/analisador-semantico/analisador-semantico.js +38 -19
  7. package/analisador-semantico/analisador-semantico.js.map +1 -1
  8. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  9. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +41 -18
  10. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  11. package/analisador-semantico/funcao-hipotetica-interface.d.ts +1 -1
  12. package/analisador-semantico/gerenciador-escopos.d.ts +1 -1
  13. package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
  14. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  15. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  16. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  17. package/avaliador-sintatico/avaliador-sintatico.js +99 -42
  18. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  19. package/avaliador-sintatico/comum.d.ts.map +1 -1
  20. package/avaliador-sintatico/comum.js.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +91 -96
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  31. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  32. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +4 -4
  33. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  34. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  35. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
  36. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  37. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
  38. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
  39. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
  40. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
  41. package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
  42. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  43. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  44. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  45. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  46. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  47. package/bibliotecas/biblioteca-global.js +93 -31
  48. package/bibliotecas/biblioteca-global.js.map +1 -1
  49. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  50. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
  51. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  52. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
  53. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
  54. package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
  55. package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
  56. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
  57. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  58. package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
  59. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
  60. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
  61. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  62. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
  63. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  64. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  65. package/bibliotecas/primitivas-dicionario.js +1 -1
  66. package/bibliotecas/primitivas-dicionario.js.map +1 -1
  67. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  68. package/bibliotecas/primitivas-numero.js.map +1 -1
  69. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  70. package/bibliotecas/primitivas-texto.js +1 -1
  71. package/bibliotecas/primitivas-texto.js.map +1 -1
  72. package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
  73. package/bibliotecas/primitivas-tupla.js +34 -14
  74. package/bibliotecas/primitivas-tupla.js.map +1 -1
  75. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  76. package/bibliotecas/primitivas-vetor.js +1 -1
  77. package/bibliotecas/primitivas-vetor.js.map +1 -1
  78. package/bin/package.json +1 -1
  79. package/construtos/ajuda-como-construto.d.ts +2 -2
  80. package/construtos/ajuda-como-construto.js +1 -1
  81. package/construtos/atribuir.d.ts.map +1 -1
  82. package/construtos/atribuir.js +5 -2
  83. package/construtos/atribuir.js.map +1 -1
  84. package/construtos/binario.d.ts.map +1 -1
  85. package/construtos/binario.js +1 -2
  86. package/construtos/binario.js.map +1 -1
  87. package/construtos/comentario-como-construto.d.ts.map +1 -1
  88. package/construtos/comentario-como-construto.js.map +1 -1
  89. package/construtos/decorador.d.ts.map +1 -1
  90. package/construtos/decorador.js +3 -1
  91. package/construtos/decorador.js.map +1 -1
  92. package/construtos/dicionario.d.ts.map +1 -1
  93. package/construtos/dicionario.js.map +1 -1
  94. package/construtos/tupla-n.d.ts +3 -3
  95. package/construtos/tupla-n.d.ts.map +1 -1
  96. package/construtos/tupla-n.js +4 -2
  97. package/construtos/tupla-n.js.map +1 -1
  98. package/declaracoes/ajuda.d.ts +3 -3
  99. package/declaracoes/funcao.d.ts +2 -1
  100. package/declaracoes/funcao.d.ts.map +1 -1
  101. package/declaracoes/funcao.js +2 -1
  102. package/declaracoes/funcao.js.map +1 -1
  103. package/declaracoes/interface.d.ts.map +1 -1
  104. package/declaracoes/interface.js.map +1 -1
  105. package/declaracoes/texto-documentacao.d.ts.map +1 -1
  106. package/declaracoes/texto-documentacao.js.map +1 -1
  107. package/estilizador/estilizador-delegua.d.ts.map +1 -1
  108. package/estilizador/estilizador-delegua.js +5 -1
  109. package/estilizador/estilizador-delegua.js.map +1 -1
  110. package/formatadores/formatador-delegua.d.ts.map +1 -1
  111. package/formatadores/formatador-delegua.js.map +1 -1
  112. package/formatadores/formatador-pitugues.d.ts.map +1 -1
  113. package/formatadores/formatador-pitugues.js +74 -29
  114. package/formatadores/formatador-pitugues.js.map +1 -1
  115. package/geracao-identificadores/index.js +2 -2
  116. package/geracao-identificadores/index.js.map +1 -1
  117. package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
  118. package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
  119. package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
  120. package/interfaces/modulo-interface.d.ts +2 -2
  121. package/interfaces/modulo-interface.d.ts.map +1 -1
  122. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  123. package/interpretador/comum.d.ts.map +1 -1
  124. package/interpretador/comum.js +55 -55
  125. package/interpretador/comum.js.map +1 -1
  126. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
  127. package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
  128. package/interpretador/depuracao/comum.d.ts.map +1 -1
  129. package/interpretador/depuracao/comum.js +8 -4
  130. package/interpretador/depuracao/comum.js.map +1 -1
  131. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  132. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -3
  133. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  134. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  135. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  136. package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
  137. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  138. package/interpretador/dialetos/pitugues/comum.js +2 -3
  139. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  140. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
  141. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
  142. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
  143. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
  144. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
  145. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  146. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
  147. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  148. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  149. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  150. package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
  151. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  152. package/interpretador/estruturas/delegua-funcao.js +3 -1
  153. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  154. package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
  155. package/interpretador/estruturas/descritor-tipo-classe.js +6 -6
  156. package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
  157. package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
  158. package/interpretador/estruturas/metodo-polimorfico.js +13 -9
  159. package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
  160. package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
  161. package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
  162. package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
  163. package/interpretador/estruturas/objeto-base.js.map +1 -1
  164. package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
  165. package/interpretador/estruturas/objeto-delegua-classe.js +10 -6
  166. package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
  167. package/interpretador/interpretador-base.d.ts +4 -4
  168. package/interpretador/interpretador-base.d.ts.map +1 -1
  169. package/interpretador/interpretador-base.js +123 -54
  170. package/interpretador/interpretador-base.js.map +1 -1
  171. package/interpretador/interpretador.d.ts.map +1 -1
  172. package/interpretador/interpretador.js +28 -17
  173. package/interpretador/interpretador.js.map +1 -1
  174. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  175. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  176. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  177. package/lexador/dialetos/lexador-calango.js.map +1 -1
  178. package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
  179. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  180. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  181. package/lexador/dialetos/lexador-pitugues.js +21 -13
  182. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  183. package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
  184. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  185. package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
  186. package/lexador/dialetos/lexador-prisma.js +25 -3
  187. package/lexador/dialetos/lexador-prisma.js.map +1 -1
  188. package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
  189. package/lexador/dialetos/lexador-tenda.js.map +1 -1
  190. package/lexador/filtro-paradigma.d.ts.map +1 -1
  191. package/lexador/filtro-paradigma.js.map +1 -1
  192. package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
  193. package/lexador/lexador-base-linha-unica.js.map +1 -1
  194. package/lexador/lexador-base.d.ts.map +1 -1
  195. package/lexador/lexador-base.js.map +1 -1
  196. package/lexador/lexador.d.ts.map +1 -1
  197. package/lexador/lexador.js.map +1 -1
  198. package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
  199. package/lexador/mapeamento-paradigmas.js.map +1 -1
  200. package/lexador/palavras-reservadas.js +2 -2
  201. package/lexador/palavras-reservadas.js.map +1 -1
  202. package/lexador/simbolo.d.ts.map +1 -1
  203. package/lexador/simbolo.js.map +1 -1
  204. package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
  205. package/package.json +1 -1
  206. package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
  207. package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
  208. package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
  209. package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
  210. package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
  211. package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
  212. package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
  213. package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
  214. package/tradutores/tradutor-assembly-arm.js +164 -156
  215. package/tradutores/tradutor-assembly-arm.js.map +1 -1
  216. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  217. package/tradutores/tradutor-assembly-x64.js +136 -127
  218. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  219. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  220. package/tradutores/tradutor-assemblyscript.js +10 -6
  221. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  222. package/tradutores/tradutor-calango.d.ts.map +1 -1
  223. package/tradutores/tradutor-calango.js.map +1 -1
  224. package/tradutores/tradutor-elixir.d.ts.map +1 -1
  225. package/tradutores/tradutor-elixir.js +9 -7
  226. package/tradutores/tradutor-elixir.js.map +1 -1
  227. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  228. package/tradutores/tradutor-javascript.js +2 -1
  229. package/tradutores/tradutor-javascript.js.map +1 -1
  230. package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
  231. package/tradutores/tradutor-mermaidjs.js +4 -8
  232. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  233. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  234. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  235. package/tradutores/tradutor-python.d.ts.map +1 -1
  236. package/tradutores/tradutor-python.js +1 -1
  237. package/tradutores/tradutor-python.js.map +1 -1
  238. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  239. package/tradutores/tradutor-ruby.d.ts.map +1 -1
  240. package/tradutores/tradutor-ruby.js +1 -1
  241. package/tradutores/tradutor-ruby.js.map +1 -1
  242. package/umd/delegua.js +1056 -720
@@ -53,20 +53,16 @@ class AvaliadorSintaticoPitugues {
53
53
  // Uma delas é a variável/constante ser uma classe padrão.
54
54
  // Isso ocorre quando a importação é feita de uma biblioteca Node.js.
55
55
  // Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
56
- if (entidadeChamada.objeto.tipo &&
57
- entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
56
+ if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
58
57
  const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
59
58
  if (!tipoCorrespondente) {
60
59
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
61
60
  }
62
- if (!(entidadeChamada.simbolo.lexema in
63
- tipoCorrespondente.metodos) &&
64
- !(entidadeChamada.simbolo.lexema in
65
- tipoCorrespondente.propriedades)) {
61
+ if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
62
+ !(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
66
63
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Membro '${entidadeChamada.simbolo.lexema}' não existe no tipo '${entidadeChamada.objeto.tipo}'.`);
67
64
  }
68
- if (entidadeChamada.simbolo.lexema in
69
- tipoCorrespondente.metodos) {
65
+ if (entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) {
70
66
  const metodoCorrespondente = tipoCorrespondente.metodos[entidadeChamada.simbolo.lexema];
71
67
  return metodoCorrespondente.tipoRetorno || 'qualquer';
72
68
  }
@@ -199,7 +195,8 @@ class AvaliadorSintaticoPitugues {
199
195
  pos++;
200
196
  }
201
197
  // Verifica se há um identificador obrigatório
202
- if (pos >= this.simbolos.length || this.simbolos[pos].tipo !== pitugues_2.default.IDENTIFICADOR) {
198
+ if (pos >= this.simbolos.length ||
199
+ this.simbolos[pos].tipo !== pitugues_2.default.IDENTIFICADOR) {
203
200
  return false;
204
201
  }
205
202
  pos++;
@@ -222,7 +219,7 @@ class AvaliadorSintaticoPitugues {
222
219
  }
223
220
  temPadraoVarComoPalavraChave() {
224
221
  // Verifica padrão: var identificador = ...
225
- if (this.simbolos[this.atual].lexema !== "var") {
222
+ if (this.simbolos[this.atual].lexema !== 'var') {
226
223
  return false;
227
224
  }
228
225
  const proximo = this.simbolos[this.atual + 1];
@@ -255,7 +252,9 @@ class AvaliadorSintaticoPitugues {
255
252
  this.consumir(pitugues_2.default.MULTIPLICACAO, '');
256
253
  ehRestoAtual = true;
257
254
  }
258
- const identificador = this.consumir(pitugues_2.default.IDENTIFICADOR, ehRestoAtual ? 'Esperado nome de variável após operador *.' : 'Esperado nome de variável.');
255
+ const identificador = this.consumir(pitugues_2.default.IDENTIFICADOR, ehRestoAtual
256
+ ? 'Esperado nome de variável após operador *.'
257
+ : 'Esperado nome de variável.');
259
258
  // Verifica * no nome da variável
260
259
  if (identificador.lexema.startsWith('*')) {
261
260
  ehRestoAtual = true;
@@ -283,10 +282,10 @@ class AvaliadorSintaticoPitugues {
283
282
  }
284
283
  construirValidacaoDesempacotamento(identificador, origem, qtdEsperada) {
285
284
  const linha = identificador.linha;
286
- const chamadaTamanho = new construtos_1.Chamada(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, new lexador_1.Simbolo(pitugues_2.default.IDENTIFICADOR, "tamanho", null, linha, -1)), [origem]);
287
- const condicaoErro = new construtos_1.Binario(this.hashArquivo, chamadaTamanho, new lexador_1.Simbolo(pitugues_2.default.DIFERENTE, "!=", null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, qtdEsperada, 'número'));
285
+ const chamadaTamanho = new construtos_1.Chamada(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, new lexador_1.Simbolo(pitugues_2.default.IDENTIFICADOR, 'tamanho', null, linha, -1)), [origem]);
286
+ const condicaoErro = new construtos_1.Binario(this.hashArquivo, chamadaTamanho, new lexador_1.Simbolo(pitugues_2.default.DIFERENTE, '!=', null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, qtdEsperada, 'número'));
288
287
  const mensagem = `Erro de execução: Você tentou desempacotar em ${qtdEsperada} variáveis, mas o vetor possui tamanho diferente.`;
289
- const falha = new declaracoes_1.Falhar(new lexador_1.Simbolo(pitugues_2.default.FALHAR, "falhar", null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, mensagem, 'texto'));
288
+ const falha = new declaracoes_1.Falhar(new lexador_1.Simbolo(pitugues_2.default.FALHAR, 'falhar', null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, mensagem, 'texto'));
290
289
  return new declaracoes_1.Se(condicaoErro, new declaracoes_1.Bloco(this.hashArquivo, linha, [falha]), [], null);
291
290
  }
292
291
  async declaracaoDeVariaveis() {
@@ -298,7 +297,8 @@ class AvaliadorSintaticoPitugues {
298
297
  const ehDesempacotamento = qtdIdentificadores > 1 && qtdValores === 1;
299
298
  if (indexResto > -1) {
300
299
  if (qtdValores < qtdIdentificadores - 1) {
301
- if (!ehDesempacotamento || (ehDesempacotamento && inicializadores[0] instanceof construtos_1.Literal)) {
300
+ if (!ehDesempacotamento ||
301
+ (ehDesempacotamento && inicializadores[0] instanceof construtos_1.Literal)) {
302
302
  throw this.erro(this.simboloAnterior(), 'Quantidade insuficiente de valores para desempacotamento com operador de resto.');
303
303
  }
304
304
  }
@@ -334,7 +334,7 @@ class AvaliadorSintaticoPitugues {
334
334
  for (let i = 0; i < identificadores.length; i++) {
335
335
  const identificador = identificadores[i];
336
336
  let inicializador;
337
- let tipo = "qualquer";
337
+ let tipo = 'qualquer';
338
338
  if (i === indexResto) {
339
339
  const valoresResto = inicializadores.slice(cursorValores, cursorValores + qtdParaResto);
340
340
  let tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(valoresResto);
@@ -381,7 +381,8 @@ class AvaliadorSintaticoPitugues {
381
381
  }
382
382
  }
383
383
  erro(simbolo, mensagemDeErro) {
384
- const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
384
+ const simboloParaErro = simbolo || this.simboloAnterior();
385
+ const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simboloParaErro, mensagemDeErro);
385
386
  this.erros.push(excecao);
386
387
  return excecao;
387
388
  }
@@ -396,7 +397,7 @@ class AvaliadorSintaticoPitugues {
396
397
  return this.simboloAtual().tipo === tipo;
397
398
  }
398
399
  verificarTipoProximoSimbolo(tipo) {
399
- if (this.estaNoFinal())
400
+ if (this.atual + 1 >= this.simbolos.length)
400
401
  return false;
401
402
  return this.simbolos[this.atual + 1].tipo === tipo;
402
403
  }
@@ -541,17 +542,19 @@ class AvaliadorSintaticoPitugues {
541
542
  case pitugues_2.default.INTERPOLACAO:
542
543
  const simboloInterpolacao = this.avancarEDevolverAnterior();
543
544
  const conteudoOriginal = simboloInterpolacao.literal;
544
- const codigoTransformado = '"' + conteudoOriginal.replace(/\{(.*?)\}/g, (_, miolo) => {
545
- // 'miolo' é o texto que estava dentro das chaves. Ex: "valor" ou "valor:.2f"
546
- if (miolo.includes(':')) {
547
- const [variavel, formato] = miolo.split(':').map(s => s.trim());
548
- if (variavel !== "") {
549
- // Transforma {valor:.2f} em "{:.2f}".formatar(valor)
550
- return '" + "{:' + formato + '}".formatar(' + variavel + ') + "';
545
+ const codigoTransformado = '"' +
546
+ conteudoOriginal.replace(/\{(.*?)\}/g, (_, miolo) => {
547
+ // 'miolo' é o texto que estava dentro das chaves. Ex: "valor" ou "valor:.2f"
548
+ if (miolo.includes(':')) {
549
+ const [variavel, formato] = miolo.split(':').map((s) => s.trim());
550
+ if (variavel !== '') {
551
+ // Transforma {valor:.2f} em "{:.2f}".formatar(valor)
552
+ return '" + "{:' + formato + '}".formatar(' + variavel + ') + "';
553
+ }
551
554
  }
552
- }
553
- return '" + (' + miolo.trim() + ') + "';
554
- }) + '"';
555
+ return '" + (' + miolo.trim() + ') + "';
556
+ }) +
557
+ '"';
555
558
  const microLexador = new micro_lexador_pitugues_1.MicroLexadorPitugues();
556
559
  const retornoMicroLexador = microLexador.mapear(codigoTransformado);
557
560
  const microAvaliadorSintatico = new micro_avaliador_sintatico_pitugues_1.MicroAvaliadorSintaticoPitugues();
@@ -564,7 +567,7 @@ class AvaliadorSintaticoPitugues {
564
567
  }
565
568
  catch (erro) {
566
569
  this.erros.push(erro);
567
- return new construtos_1.Literal(this.hashArquivo, simboloInterpolacao.linha, "");
570
+ return new construtos_1.Literal(this.hashArquivo, simboloInterpolacao.linha, '');
568
571
  }
569
572
  const declaracao = retornoMicroAvaliador.declaracoes[0];
570
573
  return declaracao.expressao;
@@ -622,11 +625,11 @@ class AvaliadorSintaticoPitugues {
622
625
  let passo = null;
623
626
  if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS)) {
624
627
  ehFatiamento = true;
625
- if (!this.verificarTipoSimboloAtual(pitugues_2.default.DOIS_PONTOS)
626
- && !this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
628
+ if (!this.verificarTipoSimboloAtual(pitugues_2.default.DOIS_PONTOS) &&
629
+ !this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
627
630
  fim = await this.expressao();
628
- if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS)
629
- && !this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
631
+ if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS) &&
632
+ !this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
630
633
  passo = await this.expressao();
631
634
  }
632
635
  const simboloFechamento = this.consumir(pitugues_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
@@ -758,7 +761,9 @@ class AvaliadorSintaticoPitugues {
758
761
  }
759
762
  async seTernario() {
760
763
  let expressaoEntao = await this.ou();
761
- if (this.simbolos[this.atual] && this.simbolos[this.atual].tipo === pitugues_2.default.SE && expressaoEntao.linha === this.simbolos[this.atual].linha) {
764
+ if (this.simbolos[this.atual] &&
765
+ this.simbolos[this.atual].tipo === pitugues_2.default.SE &&
766
+ expressaoEntao.linha === this.simbolos[this.atual].linha) {
762
767
  while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
763
768
  const operador = this.simbolos[this.atual - 1];
764
769
  const expressaoOuCondicao = await this.seTernario();
@@ -860,54 +865,40 @@ class AvaliadorSintaticoPitugues {
860
865
  let declaracoes = [];
861
866
  let simboloAtual = this.simboloAtual();
862
867
  const simboloAnterior = this.simboloAnterior();
863
- // Situação 1: não tem bloco de escopo.
864
- //
865
- // Exemplo: `se verdadeiro: escreva('Alguma coisa')`.
866
- // Neste caso, linha do símbolo atual é igual à linha do símbolo anterior.
868
+ if (!simboloAtual) {
869
+ throw this.erro(simboloAnterior, 'Esperado corpo do escopo após a declaração.');
870
+ }
871
+ // Declaração na mesma linha (ex: 'se verdadeiro: escreva("Oi")')
867
872
  if (simboloAtual.linha === simboloAnterior.linha) {
868
- const declaracoesBloco = await this.resolverDeclaracaoForaDeBloco();
869
- if (declaracoesBloco !== null) {
870
- if (Array.isArray(declaracoesBloco)) {
871
- declaracoes = declaracoes.concat(declaracoesBloco);
872
- }
873
- else {
874
- declaracoes.push(declaracoesBloco);
875
- }
876
- }
873
+ const retorno = await this.resolverDeclaracaoForaDeBloco();
874
+ if (retorno !== null)
875
+ declaracoes = declaracoes.concat(retorno);
877
876
  }
878
877
  else {
879
- // Situação 2: símbolo atual fica na próxima linha.
880
- //
881
- // Verifica-se o número de espaços à esquerda da linha através dos pragmas.
882
- // Se número de espaços da linha do símbolo atual é menor ou igual ao número de espaços
883
- // da linha anterior, e bloco ainda não começou, é uma situação de erro.
884
- let espacosIndentacaoLinhaAtual = this.localizacoes[simboloAtual.linha].espacosIndentacao;
885
- const espacosIndentacaoLinhaAnterior = this.localizacoes[simboloAnterior.linha].espacosIndentacao;
886
- if (espacosIndentacaoLinhaAtual <= espacosIndentacaoLinhaAnterior) {
878
+ // Bloco de múltiplas linhas baseado em indentação
879
+ let espacosAtual = this
880
+ .localizacoes[simboloAtual.linha]
881
+ .espacosIndentacao;
882
+ const espacosAnterior = this
883
+ .localizacoes[simboloAnterior.linha]
884
+ .espacosIndentacao;
885
+ if (espacosAtual <= espacosAnterior) {
887
886
  throw this.erro(simboloAtual, `Indentação inconsistente na linha ${simboloAtual.linha}. ` +
888
- `Esperado: >= ${espacosIndentacaoLinhaAnterior}. ` +
889
- `Atual: ${espacosIndentacaoLinhaAtual}`);
890
- }
891
- // Indentação ok, é um bloco de escopo.
892
- // Inclui todas as declarações cujas linhas tenham o mesmo número de espaços
893
- // de indentação do bloco.
894
- // Se `simboloAtual` for definido em algum momento como indefinido,
895
- // Significa que o código acabou, então o bloco também acabou.
896
- const espacosIndentacaoBloco = espacosIndentacaoLinhaAtual;
897
- while (espacosIndentacaoLinhaAtual === espacosIndentacaoBloco) {
898
- const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
899
- if (retornoDeclaracao !== null) {
900
- if (Array.isArray(retornoDeclaracao)) {
901
- declaracoes = declaracoes.concat(retornoDeclaracao);
902
- }
903
- else {
904
- declaracoes.push(retornoDeclaracao);
905
- }
906
- }
887
+ `Esperado: >= ${espacosAnterior}. ` +
888
+ `Atual: ${espacosAtual}`);
889
+ }
890
+ const indentacaoBloco = espacosAtual;
891
+ // Consome as declarações enquanto a indentação for estritamente igual à do bloco
892
+ while (simboloAtual && espacosAtual === indentacaoBloco) {
893
+ const retorno = await this.resolverDeclaracaoForaDeBloco();
894
+ if (retorno !== null)
895
+ declaracoes = declaracoes.concat(retorno);
907
896
  simboloAtual = this.simboloAtual();
908
- if (!simboloAtual)
909
- break;
910
- espacosIndentacaoLinhaAtual = this.localizacoes[simboloAtual.linha].espacosIndentacao;
897
+ if (simboloAtual) {
898
+ espacosAtual = this
899
+ .localizacoes[simboloAtual.linha]
900
+ .espacosIndentacao;
901
+ }
911
902
  }
912
903
  }
913
904
  this.pilhaEscopos.removerUltimo();
@@ -917,7 +908,7 @@ class AvaliadorSintaticoPitugues {
917
908
  try {
918
909
  this.blocos += 1;
919
910
  const condicao = await this.expressao();
920
- const bloco = await this.resolverDeclaracao();
911
+ const bloco = (await this.resolverDeclaracao());
921
912
  return new declaracoes_1.Enquanto(condicao, bloco);
922
913
  }
923
914
  finally {
@@ -991,7 +982,7 @@ class AvaliadorSintaticoPitugues {
991
982
  }
992
983
  this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeVariavelIteracao.lexema, tipoVetor.slice(0, -2)));
993
984
  // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
994
- const corpo = await this.resolverDeclaracao();
985
+ const corpo = (await this.resolverDeclaracao());
995
986
  return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Variavel(this.hashArquivo, nomeVariavelIteracao), vetor, corpo);
996
987
  }
997
988
  async declaracaoPara() {
@@ -1023,7 +1014,7 @@ class AvaliadorSintaticoPitugues {
1023
1014
  this.pilhaEscopos.definirInformacoesVariavel(simboloSegundaVariavel.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloSegundaVariavel.lexema, 'qualquer'));
1024
1015
  }
1025
1016
  // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
1026
- const corpo = await this.resolverDeclaracao();
1017
+ const corpo = (await this.resolverDeclaracao());
1027
1018
  return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, alvoIteracao, corpo);
1028
1019
  }
1029
1020
  finally {
@@ -1052,7 +1043,7 @@ class AvaliadorSintaticoPitugues {
1052
1043
  }
1053
1044
  async declaracaoSe() {
1054
1045
  const condicao = await this.expressao();
1055
- const caminhoEntao = await this.resolverDeclaracao();
1046
+ const caminhoEntao = (await this.resolverDeclaracao());
1056
1047
  let caminhoSenao = null;
1057
1048
  if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SENAO, pitugues_2.default.SENÃO)) {
1058
1049
  caminhoSenao = await this.resolverDeclaracao();
@@ -1130,11 +1121,13 @@ class AvaliadorSintaticoPitugues {
1130
1121
  this.consumir(pitugues_2.default.DOIS_PONTOS, `Esperado ':' antes do escopo do bloco 'pegue'.`);
1131
1122
  this.pilhaEscopos.definirInformacoesVariavel(variavelExcecao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelExcecao.lexema, 'qualquer'));
1132
1123
  const corpo = await this.blocoEscopo();
1133
- blocoPegue = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloTente.linha, [{
1134
- abrangencia: "padrao",
1124
+ blocoPegue = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloTente.linha, [
1125
+ {
1126
+ abrangencia: 'padrao',
1135
1127
  nome: variavelExcecao,
1136
- tipoDado: "qualquer",
1137
- }], corpo, "vazio", false);
1128
+ tipoDado: 'qualquer',
1129
+ },
1130
+ ], corpo, 'vazio', false);
1138
1131
  }
1139
1132
  else {
1140
1133
  // Caso 2: sem parâmetro de erro.
@@ -1159,7 +1152,7 @@ class AvaliadorSintaticoPitugues {
1159
1152
  const simboloFazer = this.simboloAnterior();
1160
1153
  try {
1161
1154
  this.blocos += 1;
1162
- const declaracaoOuBlocoFazer = await this.resolverDeclaracao();
1155
+ const declaracaoOuBlocoFazer = (await this.resolverDeclaracao());
1163
1156
  this.consumir(pitugues_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo da declaração 'fazer'.");
1164
1157
  const condicaoEnquanto = await this.expressao();
1165
1158
  return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), declaracaoOuBlocoFazer, condicaoEnquanto);
@@ -1325,7 +1318,7 @@ class AvaliadorSintaticoPitugues {
1325
1318
  const simboloAnterior = this.simbolos[this.atual - 1];
1326
1319
  if (simboloAnterior.tipo === pitugues_2.default.IDENTIFICADOR) {
1327
1320
  this.consumir(pitugues_2.default.DOIS_PONTOS, "Esperado ':' antes do escopo da classe.");
1328
- const tipoPropriedade = this.consumir(pitugues_2.default.IDENTIFICADOR, "Esperado tipo de propriedade após dois-pontos, em declaração de classe.");
1321
+ const tipoPropriedade = this.consumir(pitugues_2.default.IDENTIFICADOR, 'Esperado tipo de propriedade após dois-pontos, em declaração de classe.');
1329
1322
  const propriedade = new declaracoes_1.PropriedadeClasse(simboloAnterior, tipoPropriedade.lexema, []);
1330
1323
  propriedades.push(propriedade);
1331
1324
  }
@@ -1381,11 +1374,10 @@ class AvaliadorSintaticoPitugues {
1381
1374
  */
1382
1375
  async resolverDeclaracaoForaDeBloco() {
1383
1376
  try {
1384
- if ((this.verificarTipoSimboloAtual(pitugues_2.default.FUNCAO) ||
1385
- this.verificarTipoSimboloAtual(pitugues_2.default.FUNÇÃO)) &&
1386
- this.verificarTipoProximoSimbolo(pitugues_2.default.IDENTIFICADOR)) {
1377
+ if (this.verificarTipoSimboloAtual(pitugues_2.default.FUNCAO) ||
1378
+ this.verificarTipoSimboloAtual(pitugues_2.default.FUNÇÃO)) {
1387
1379
  this.avancarEDevolverAnterior();
1388
- return await this.funcao('funcao');
1380
+ return await this.funcao('da função');
1389
1381
  }
1390
1382
  if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.CLASSE))
1391
1383
  return await this.declaracaoDeClasse();
@@ -1480,8 +1472,10 @@ class AvaliadorSintaticoPitugues {
1480
1472
  case pitugues_2.default.DE: {
1481
1473
  const proximo = this.simbolos[this.atual + 1];
1482
1474
  const aposProximo = this.simbolos[this.atual + 2];
1483
- if (proximo && proximo.tipo === pitugues_2.default.IDENTIFICADOR &&
1484
- aposProximo && aposProximo.tipo === pitugues_2.default.IMPORTAR) {
1475
+ if (proximo &&
1476
+ proximo.tipo === pitugues_2.default.IDENTIFICADOR &&
1477
+ aposProximo &&
1478
+ aposProximo.tipo === pitugues_2.default.IMPORTAR) {
1485
1479
  this.avancarEDevolverAnterior();
1486
1480
  return this.declaracaoImportarDe();
1487
1481
  }
@@ -1596,7 +1590,7 @@ class AvaliadorSintaticoPitugues {
1596
1590
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('elemento', 'qualquer'),
1597
1591
  ]));
1598
1592
  this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
1599
- new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer')
1593
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
1600
1594
  ]));
1601
1595
  this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
1602
1596
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
@@ -1606,7 +1600,7 @@ class AvaliadorSintaticoPitugues {
1606
1600
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
1607
1601
  ]));
1608
1602
  this.pilhaEscopos.definirInformacoesVariavel('vetor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'vetor', true, [
1609
- new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'qualquer')
1603
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'qualquer'),
1610
1604
  ]));
1611
1605
  }
1612
1606
  async analisar(retornoLexador, hashArquivo) {
@@ -1633,7 +1627,8 @@ class AvaliadorSintaticoPitugues {
1633
1627
  else {
1634
1628
  declaracoes.push(retornoDeclaracao);
1635
1629
  }
1636
- if (!this.estaNoFinal() && this.verificarTipoSimboloAtual(pitugues_2.default.PONTO_E_VIRGULA)) {
1630
+ if (!this.estaNoFinal() &&
1631
+ this.verificarTipoSimboloAtual(pitugues_2.default.PONTO_E_VIRGULA)) {
1637
1632
  // Verificar se este ; está na mesma linha da declaração anterior
1638
1633
  const declaracaoAnterior = declaracoes[declaracoes.length - 1];
1639
1634
  const linhaDeclaraoAnterior = declaracaoAnterior.linha || 0;