@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
@@ -97,7 +97,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
97
97
  }
98
98
  async construtoAjuda() {
99
99
  const simboloAjuda = this.avancarEDevolverAnterior();
100
- if (this.estaNoFinal() || this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
100
+ if (this.estaNoFinal() ||
101
+ this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
101
102
  return new construtos_1.AjudaComoConstruto(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
102
103
  }
103
104
  this.avancarEDevolverAnterior(); // parêntese esquerdo
@@ -524,7 +525,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
524
525
  // o analisador semântico emitir o diagnóstico quando apropriado.
525
526
  tipoIdentificadorCorrespondente = 'qualquer';
526
527
  }
527
- if (!tipoIdentificadorCorrespondente.endsWith('[]') && !['dicionário', 'qualquer', 'texto', 'tupla', 'vetor'].includes(tipoIdentificadorCorrespondente)) {
528
+ if (!tipoIdentificadorCorrespondente.endsWith('[]') &&
529
+ !['dicionário', 'qualquer', 'texto', 'tupla', 'vetor'].includes(tipoIdentificadorCorrespondente)) {
528
530
  throw this.erro(this.simbolos[this.atual], `Tipo ${tipoIdentificadorCorrespondente} não suporta acesso por índice.`);
529
531
  }
530
532
  let tipoAcesso = 'qualquer';
@@ -598,8 +600,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
598
600
  if (expressaoAnterior.tipo === 'dicionário' &&
599
601
  expressaoAnterior.constructor !== construtos_1.Dicionario) {
600
602
  const elementoMontaoTipos = this.resolverElementoMontao(expressaoAnterior);
601
- if (elementoMontaoTipos &&
602
- nome.lexema in elementoMontaoTipos.subElementos) {
603
+ if (elementoMontaoTipos && nome.lexema in elementoMontaoTipos.subElementos) {
603
604
  tipoInferido = elementoMontaoTipos.subElementos[nome.lexema].tipo;
604
605
  }
605
606
  }
@@ -856,7 +857,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
856
857
  if (construto instanceof construtos_1.Unario) {
857
858
  const operando = construto.operando;
858
859
  // Verifica se o operando é um vetor
859
- if (operando instanceof construtos_1.Vetor || operando.tipo === 'vetor' || operando.tipo.endsWith('[]')) {
860
+ if (operando instanceof construtos_1.Vetor ||
861
+ operando.tipo === 'vetor' ||
862
+ operando.tipo.endsWith('[]')) {
860
863
  return true;
861
864
  }
862
865
  // Verifica recursivamente para casos como !![]
@@ -1467,7 +1470,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1467
1470
  }
1468
1471
  async declaracaoSe() {
1469
1472
  const condicao = await this.expressao();
1470
- const caminhoEntao = await this.resolverDeclaracao();
1473
+ const caminhoEntao = (await this.resolverDeclaracao());
1471
1474
  let caminhoSenao = null;
1472
1475
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.SENAO, delegua_2.default.SENÃO)) {
1473
1476
  caminhoSenao = await this.resolverDeclaracao();
@@ -1598,20 +1601,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1598
1601
  // Uma delas é a variável/constante ser uma classe padrão.
1599
1602
  // Isso ocorre quando a importação é feita de uma biblioteca Node.js.
1600
1603
  // Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
1601
- if (entidadeChamada.objeto.tipo &&
1602
- entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
1604
+ if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
1603
1605
  const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
1604
1606
  if (!tipoCorrespondente) {
1605
1607
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
1606
1608
  }
1607
- if (!(entidadeChamada.simbolo.lexema in
1608
- tipoCorrespondente.metodos) &&
1609
- !(entidadeChamada.simbolo.lexema in
1610
- tipoCorrespondente.propriedades)) {
1609
+ if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
1610
+ !(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
1611
1611
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Membro '${entidadeChamada.simbolo.lexema}' não existe no tipo '${entidadeChamada.objeto.tipo}'.`);
1612
1612
  }
1613
- if (entidadeChamada.simbolo.lexema in
1614
- tipoCorrespondente.metodos) {
1613
+ if (entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) {
1615
1614
  const metodoCorrespondente = tipoCorrespondente.metodos[entidadeChamada.simbolo.lexema];
1616
1615
  return metodoCorrespondente.tipoRetorno || 'qualquer';
1617
1616
  }
@@ -1964,7 +1963,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1964
1963
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo da interface.");
1965
1964
  const metodos = [];
1966
1965
  const propriedades = [];
1967
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
1966
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
1967
+ !this.estaNoFinal()) {
1968
1968
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
1969
1969
  if (this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA))
1970
1970
  break;
@@ -2015,7 +2015,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2015
2015
  const simbolo = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da classe.');
2016
2016
  // Pré-registro para permitir auto-referência no corpo da própria classe,
2017
2017
  // como em `MinhaClasse.propriedadeEstatica` dentro de métodos.
2018
- this.tiposDefinidosEmCodigo[simbolo.lexema] = (_a = this.tiposDefinidosEmCodigo[simbolo.lexema]) !== null && _a !== void 0 ? _a : {};
2018
+ this.tiposDefinidosEmCodigo[simbolo.lexema] =
2019
+ (_a = this.tiposDefinidosEmCodigo[simbolo.lexema]) !== null && _a !== void 0 ? _a : {};
2019
2020
  const pilhaDecoradoresClasse = Array.from(this.pilhaDecoradores);
2020
2021
  // Verificar `herda SuperclasseA, SuperclasseB`
2021
2022
  const superClasses = [];
@@ -2053,7 +2054,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2053
2054
  */
2054
2055
  const compreenderMembros = async (acessoPadrao, ehEstaticoPadrao, ehAbstratoPadrao = false) => {
2055
2056
  var _a;
2056
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2057
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
2058
+ !this.estaNoFinal()) {
2057
2059
  // Pular comentários normais dentro do corpo da classe.
2058
2060
  if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
2059
2061
  this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
@@ -2074,12 +2076,12 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2074
2076
  // Detecção de bloco de contexto: modificador seguido de '{'
2075
2077
  const tipoAtual = this.simbolos[this.atual].tipo;
2076
2078
  const tipoProximo = (_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo;
2077
- const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual)
2078
- && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2079
- const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO
2080
- && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2081
- const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO
2082
- && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2079
+ const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual) &&
2080
+ tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2081
+ const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO &&
2082
+ tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2083
+ const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO &&
2084
+ tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2083
2085
  if (ehBlocoAcesso) {
2084
2086
  const novoAcesso = tipoAtual === delegua_2.default.PRIVADO ? 'privado' : 'protegido';
2085
2087
  this.avancarEDevolverAnterior(); // consume modificador de acesso
@@ -2176,14 +2178,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2176
2178
  for (const declaracao of corpo) {
2177
2179
  expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
2178
2180
  }
2179
- const tiposRetornos = new Set(expressoesRetorna.filter((e) => e.tipo !== 'qualquer').map((e) => e.tipo));
2181
+ const tiposRetornos = new Set(expressoesRetorna
2182
+ .filter((e) => e.tipo !== 'qualquer')
2183
+ .map((e) => e.tipo));
2180
2184
  const retornaChamadoExplicitamente = tiposRetornos.size > 0;
2181
2185
  tiposRetornos.delete('qualquer');
2182
2186
  if (tipoRetorno === 'qualquer') {
2183
2187
  if (tiposRetornos.size > 0) {
2184
2188
  tipoRetorno = tiposRetornos.values().next().value;
2185
2189
  }
2186
- else if (!retornaChamadoExplicitamente && !definicaoExplicitaDeTipo) {
2190
+ else if (!retornaChamadoExplicitamente &&
2191
+ !definicaoExplicitaDeTipo) {
2187
2192
  tipoRetorno = 'vazio';
2188
2193
  }
2189
2194
  }
@@ -2239,13 +2244,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2239
2244
  let tipoAcessor = 'qualquer';
2240
2245
  let expressoesRetornaAcessor = [];
2241
2246
  for (const declaracao of corpoAcessor) {
2242
- expressoesRetornaAcessor = expressoesRetornaAcessor.concat((0, comum_1.buscarRetornos)(declaracao));
2247
+ expressoesRetornaAcessor =
2248
+ expressoesRetornaAcessor.concat((0, comum_1.buscarRetornos)(declaracao));
2243
2249
  }
2244
- const tiposRetornosAcessor = new Set(expressoesRetornaAcessor.filter((e) => e.tipo !== 'qualquer').map((e) => e.tipo));
2250
+ const tiposRetornosAcessor = new Set(expressoesRetornaAcessor
2251
+ .filter((e) => e.tipo !== 'qualquer')
2252
+ .map((e) => e.tipo));
2245
2253
  const retornaExplicitamenteAcessor = tiposRetornosAcessor.size > 0;
2246
2254
  tiposRetornosAcessor.delete('qualquer');
2247
2255
  if (tiposRetornosAcessor.size > 0) {
2248
- tipoAcessor = tiposRetornosAcessor.values().next().value;
2256
+ tipoAcessor = tiposRetornosAcessor
2257
+ .values()
2258
+ .next().value;
2249
2259
  }
2250
2260
  else if (!retornaExplicitamenteAcessor) {
2251
2261
  tipoAcessor = 'vazio';
@@ -2297,24 +2307,55 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2297
2307
  await compreenderMembros('publico', false);
2298
2308
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
2299
2309
  // Verificação em tempo de análise: classe deve implementar todos os contratos das interfaces.
2310
+ const linhaFinalClasse = this.simbolos[this.atual - 1].linha;
2300
2311
  for (const nomeInterface of implementaInterfaces) {
2301
2312
  const interfaceDecl = this.interfacesDeclaradas[nomeInterface.lexema];
2302
2313
  if (!interfaceDecl) {
2303
2314
  this.erros.push(this.erro(nomeInterface, `Interface '${nomeInterface.lexema}' não foi declarada antes da classe '${simbolo.lexema}'.`));
2304
2315
  continue;
2305
2316
  }
2317
+ const membrosFaltando = [];
2306
2318
  for (const assinatura of interfaceDecl.metodos) {
2307
2319
  const nomeMetodo = assinatura.nome.lexema;
2308
2320
  const implementado = metodos.some((m) => m.simbolo.lexema === nomeMetodo);
2309
2321
  if (!implementado) {
2310
- this.erros.push(this.erro(simbolo, `Classe '${simbolo.lexema}' não implementa o método '${nomeMetodo}' exigido pela interface '${nomeInterface.lexema}'.`));
2322
+ membrosFaltando.push({
2323
+ tipo: 'metodo',
2324
+ nome: nomeMetodo,
2325
+ parametros: assinatura.parametros.map((p) => ({
2326
+ nome: p.nome.lexema,
2327
+ tipoDado: p.tipoDado,
2328
+ })),
2329
+ tipoRetorno: assinatura.tipoRetorno,
2330
+ });
2311
2331
  }
2312
2332
  }
2313
2333
  for (const prop of interfaceDecl.propriedades) {
2314
2334
  const nomeProp = prop.nome.lexema;
2315
2335
  const implementada = propriedades.some((p) => p.nome.lexema === nomeProp);
2316
2336
  if (!implementada) {
2317
- this.erros.push(this.erro(simbolo, `Classe '${simbolo.lexema}' não declara a propriedade '${nomeProp}' exigida pela interface '${nomeInterface.lexema}'.`));
2337
+ membrosFaltando.push({
2338
+ tipo: 'propriedade',
2339
+ nome: nomeProp,
2340
+ tipoPropriedade: prop.tipo,
2341
+ });
2342
+ }
2343
+ }
2344
+ if (membrosFaltando.length > 0) {
2345
+ const correcaoSugerida = {
2346
+ tipo: 'implementar-interface',
2347
+ nomeInterface: nomeInterface.lexema,
2348
+ nomeClasse: simbolo.lexema,
2349
+ membrosFaltando,
2350
+ linhaFinalClasse,
2351
+ };
2352
+ for (const membro of membrosFaltando) {
2353
+ const mensagem = membro.tipo === 'metodo'
2354
+ ? `Classe '${simbolo.lexema}' não implementa o método '${membro.nome}' exigido pela interface '${nomeInterface.lexema}'.`
2355
+ : `Classe '${simbolo.lexema}' não declara a propriedade '${membro.nome}' exigida pela interface '${nomeInterface.lexema}'.`;
2356
+ const erro = this.erro(simbolo, mensagem);
2357
+ erro.correcaoSugerida = correcaoSugerida;
2358
+ this.erros.push(erro);
2318
2359
  }
2319
2360
  }
2320
2361
  }
@@ -2342,7 +2383,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2342
2383
  if (!this.primitivasConhecidas[nomeTipo]) {
2343
2384
  this.primitivasConhecidas[nomeTipo] = {};
2344
2385
  }
2345
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2386
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
2387
+ !this.estaNoFinal()) {
2346
2388
  // Pular comentários dentro do corpo da extensão.
2347
2389
  if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
2348
2390
  this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
@@ -2390,7 +2432,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2390
2432
  const metodo = new declaracoes_1.FuncaoDeclaracao(nomeMetodo, corpoFuncao, tipoDaFuncao);
2391
2433
  metodos.push(metodo);
2392
2434
  const argumentos = params.map((parametro) => new informacao_elemento_sintatico_1.InformacaoElementoSintatico(parametro.nome.lexema, parametro.tipoDado || 'qualquer', parametro.valorPadrao === undefined));
2393
- this.primitivasConhecidas[nomeTipo][nomeMetodo.lexema] = new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeMetodo.lexema, tipoRetorno, true, argumentos);
2435
+ this.primitivasConhecidas[nomeTipo][nomeMetodo.lexema] =
2436
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeMetodo.lexema, tipoRetorno, true, argumentos);
2394
2437
  }
2395
2438
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' ao final da extensão.");
2396
2439
  return new declaracoes_1.Extensao(simboloTipo, metodos, ehGlobal, this.hashArquivo);
@@ -2418,13 +2461,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2418
2461
  const simboloDoc = this.avancarEDevolverAnterior();
2419
2462
  docTopLevel = new construtos_1.ComentarioComoConstruto(simboloDoc);
2420
2463
  }
2421
- if ((this.verificarTipoSimboloAtual(delegua_2.default.FUNCAO) ||
2422
- this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) &&
2423
- this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
2424
- this.avancarEDevolverAnterior();
2425
- const declaracaoFuncao = await this.funcao('funcao');
2426
- declaracaoFuncao.documentacao = docTopLevel;
2427
- return declaracaoFuncao;
2464
+ if (this.verificarTipoSimboloAtual(delegua_2.default.FUNCAO) ||
2465
+ this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) {
2466
+ if (this.verificarTipoProximoSimbolo(delegua_2.default.DE)) {
2467
+ this.avancarEDevolverAnterior(); // `função`
2468
+ this.avancarEDevolverAnterior(); // `de`
2469
+ const simboloDecorador = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado 'decorador' após 'função de'.");
2470
+ if (simboloDecorador.lexema !== 'decorador') {
2471
+ throw this.erro(simboloDecorador, "Esperado 'decorador' após 'função de'.");
2472
+ }
2473
+ const declaracaoFuncao = (await this.funcao('funcao'));
2474
+ declaracaoFuncao.eFuncaoDeDecorador = true;
2475
+ declaracaoFuncao.documentacao = docTopLevel;
2476
+ return declaracaoFuncao;
2477
+ }
2478
+ if (this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
2479
+ this.avancarEDevolverAnterior();
2480
+ const declaracaoFuncao = (await this.funcao('funcao'));
2481
+ declaracaoFuncao.documentacao = docTopLevel;
2482
+ return declaracaoFuncao;
2483
+ }
2428
2484
  }
2429
2485
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CLASSE)) {
2430
2486
  return await this.declaracaoDeClasse();
@@ -2496,7 +2552,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2496
2552
  this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) &&
2497
2553
  this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
2498
2554
  this.avancarEDevolverAnterior();
2499
- const declaracaoFuncao = await this.funcao('funcao');
2555
+ const declaracaoFuncao = (await this.funcao('funcao'));
2500
2556
  declaracaoFuncao.documentacao = new construtos_1.ComentarioComoConstruto(simboloDoc);
2501
2557
  return declaracaoFuncao;
2502
2558
  }
@@ -2566,7 +2622,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2566
2622
  }
2567
2623
  async declaracaoAjuda() {
2568
2624
  const simboloAjuda = this.avancarEDevolverAnterior();
2569
- if (this.estaNoFinal() || this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
2625
+ if (this.estaNoFinal() ||
2626
+ this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
2570
2627
  return new declaracoes_1.Ajuda(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
2571
2628
  }
2572
2629
  this.avancarEDevolverAnterior(); // parêntese esquerdo
@@ -2708,7 +2765,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2708
2765
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2709
2766
  ]));
2710
2767
  this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
2711
- new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer')
2768
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2712
2769
  ]));
2713
2770
  this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
2714
2771
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),