@designliquido/delegua 1.10.0 → 1.11.1

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 (252) 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 +56 -28
  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 +149 -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 +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +60 -50
  31. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  32. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  33. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +5 -5
  34. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  35. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  36. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
  37. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  38. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
  39. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
  40. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
  41. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
  42. package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
  43. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  44. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  45. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  46. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  47. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  48. package/bibliotecas/biblioteca-global.js +93 -31
  49. package/bibliotecas/biblioteca-global.js.map +1 -1
  50. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  51. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
  52. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  53. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
  54. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
  55. package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
  56. package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
  57. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
  58. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  59. package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
  60. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
  61. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
  62. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  63. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
  64. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  65. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  66. package/bibliotecas/primitivas-dicionario.js +1 -1
  67. package/bibliotecas/primitivas-dicionario.js.map +1 -1
  68. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  69. package/bibliotecas/primitivas-numero.js.map +1 -1
  70. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  71. package/bibliotecas/primitivas-texto.js +70 -1
  72. package/bibliotecas/primitivas-texto.js.map +1 -1
  73. package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
  74. package/bibliotecas/primitivas-tupla.js +34 -14
  75. package/bibliotecas/primitivas-tupla.js.map +1 -1
  76. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  77. package/bibliotecas/primitivas-vetor.js +19 -1
  78. package/bibliotecas/primitivas-vetor.js.map +1 -1
  79. package/bin/package.json +1 -1
  80. package/construtos/ajuda-como-construto.d.ts +2 -2
  81. package/construtos/ajuda-como-construto.js +1 -1
  82. package/construtos/atribuir.d.ts.map +1 -1
  83. package/construtos/atribuir.js +5 -2
  84. package/construtos/atribuir.js.map +1 -1
  85. package/construtos/binario.d.ts.map +1 -1
  86. package/construtos/binario.js +1 -2
  87. package/construtos/binario.js.map +1 -1
  88. package/construtos/comentario-como-construto.d.ts.map +1 -1
  89. package/construtos/comentario-como-construto.js.map +1 -1
  90. package/construtos/decorador.d.ts.map +1 -1
  91. package/construtos/decorador.js +3 -1
  92. package/construtos/decorador.js.map +1 -1
  93. package/construtos/dicionario.d.ts.map +1 -1
  94. package/construtos/dicionario.js.map +1 -1
  95. package/construtos/tupla-n.d.ts +3 -3
  96. package/construtos/tupla-n.d.ts.map +1 -1
  97. package/construtos/tupla-n.js +4 -2
  98. package/construtos/tupla-n.js.map +1 -1
  99. package/declaracoes/ajuda.d.ts +3 -3
  100. package/declaracoes/classe.d.ts +5 -2
  101. package/declaracoes/classe.d.ts.map +1 -1
  102. package/declaracoes/classe.js +13 -4
  103. package/declaracoes/classe.js.map +1 -1
  104. package/declaracoes/interface.d.ts.map +1 -1
  105. package/declaracoes/interface.js.map +1 -1
  106. package/declaracoes/texto-documentacao.d.ts.map +1 -1
  107. package/declaracoes/texto-documentacao.js.map +1 -1
  108. package/estilizador/estilizador-delegua.d.ts.map +1 -1
  109. package/estilizador/estilizador-delegua.js +5 -1
  110. package/estilizador/estilizador-delegua.js.map +1 -1
  111. package/formatadores/formatador-delegua.d.ts.map +1 -1
  112. package/formatadores/formatador-delegua.js.map +1 -1
  113. package/formatadores/formatador-pitugues.d.ts.map +1 -1
  114. package/formatadores/formatador-pitugues.js +74 -29
  115. package/formatadores/formatador-pitugues.js.map +1 -1
  116. package/geracao-identificadores/index.js +2 -2
  117. package/geracao-identificadores/index.js.map +1 -1
  118. package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
  119. package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
  120. package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
  121. package/interfaces/modulo-interface.d.ts +2 -2
  122. package/interfaces/modulo-interface.d.ts.map +1 -1
  123. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  124. package/interpretador/comum.d.ts.map +1 -1
  125. package/interpretador/comum.js +65 -55
  126. package/interpretador/comum.js.map +1 -1
  127. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
  128. package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
  129. package/interpretador/depuracao/comum.d.ts.map +1 -1
  130. package/interpretador/depuracao/comum.js +8 -4
  131. package/interpretador/depuracao/comum.js.map +1 -1
  132. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  133. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -3
  134. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  135. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  136. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  137. package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
  138. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  139. package/interpretador/dialetos/pitugues/comum.js +2 -3
  140. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  141. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
  142. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
  143. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
  144. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
  145. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
  146. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  147. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
  148. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  149. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  150. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  151. package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
  152. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  153. package/interpretador/estruturas/delegua-funcao.js +3 -1
  154. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  155. package/interpretador/estruturas/descritor-tipo-classe.d.ts +14 -4
  156. package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
  157. package/interpretador/estruturas/descritor-tipo-classe.js +95 -35
  158. package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
  159. package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
  160. package/interpretador/estruturas/metodo-polimorfico.js +13 -9
  161. package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
  162. package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
  163. package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
  164. package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
  165. package/interpretador/estruturas/objeto-base.js +8 -4
  166. package/interpretador/estruturas/objeto-base.js.map +1 -1
  167. package/interpretador/estruturas/objeto-delegua-classe.d.ts +1 -0
  168. package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
  169. package/interpretador/estruturas/objeto-delegua-classe.js +41 -23
  170. package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
  171. package/interpretador/interpretador-base.d.ts +4 -4
  172. package/interpretador/interpretador-base.d.ts.map +1 -1
  173. package/interpretador/interpretador-base.js +175 -62
  174. package/interpretador/interpretador-base.js.map +1 -1
  175. package/interpretador/interpretador.d.ts.map +1 -1
  176. package/interpretador/interpretador.js +14 -13
  177. package/interpretador/interpretador.js.map +1 -1
  178. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  179. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  180. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  181. package/lexador/dialetos/lexador-calango.js.map +1 -1
  182. package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
  183. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  184. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  185. package/lexador/dialetos/lexador-pitugues.js +3 -1
  186. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  187. package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
  188. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  189. package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
  190. package/lexador/dialetos/lexador-prisma.js +25 -3
  191. package/lexador/dialetos/lexador-prisma.js.map +1 -1
  192. package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
  193. package/lexador/dialetos/lexador-tenda.js.map +1 -1
  194. package/lexador/filtro-paradigma.d.ts.map +1 -1
  195. package/lexador/filtro-paradigma.js.map +1 -1
  196. package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
  197. package/lexador/lexador-base-linha-unica.js.map +1 -1
  198. package/lexador/lexador-base.d.ts.map +1 -1
  199. package/lexador/lexador-base.js.map +1 -1
  200. package/lexador/lexador.d.ts.map +1 -1
  201. package/lexador/lexador.js.map +1 -1
  202. package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
  203. package/lexador/mapeamento-paradigmas.js.map +1 -1
  204. package/lexador/palavras-reservadas.d.ts +1 -0
  205. package/lexador/palavras-reservadas.d.ts.map +1 -1
  206. package/lexador/palavras-reservadas.js +3 -2
  207. package/lexador/palavras-reservadas.js.map +1 -1
  208. package/lexador/simbolo.d.ts.map +1 -1
  209. package/lexador/simbolo.js.map +1 -1
  210. package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
  211. package/package.json +1 -1
  212. package/tipos-de-simbolos/delegua.d.ts +1 -0
  213. package/tipos-de-simbolos/delegua.d.ts.map +1 -1
  214. package/tipos-de-simbolos/delegua.js +1 -0
  215. package/tipos-de-simbolos/delegua.js.map +1 -1
  216. package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
  217. package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
  218. package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
  219. package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
  220. package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
  221. package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
  222. package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
  223. package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
  224. package/tradutores/tradutor-assembly-arm.js +164 -156
  225. package/tradutores/tradutor-assembly-arm.js.map +1 -1
  226. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  227. package/tradutores/tradutor-assembly-x64.js +136 -127
  228. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  229. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  230. package/tradutores/tradutor-assemblyscript.js +10 -6
  231. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  232. package/tradutores/tradutor-calango.d.ts.map +1 -1
  233. package/tradutores/tradutor-calango.js.map +1 -1
  234. package/tradutores/tradutor-elixir.d.ts.map +1 -1
  235. package/tradutores/tradutor-elixir.js +9 -7
  236. package/tradutores/tradutor-elixir.js.map +1 -1
  237. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  238. package/tradutores/tradutor-javascript.js +2 -1
  239. package/tradutores/tradutor-javascript.js.map +1 -1
  240. package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
  241. package/tradutores/tradutor-mermaidjs.js +4 -8
  242. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  243. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  244. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  245. package/tradutores/tradutor-python.d.ts.map +1 -1
  246. package/tradutores/tradutor-python.js +1 -1
  247. package/tradutores/tradutor-python.js.map +1 -1
  248. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  249. package/tradutores/tradutor-ruby.d.ts.map +1 -1
  250. package/tradutores/tradutor-ruby.js +1 -1
  251. package/tradutores/tradutor-ruby.js.map +1 -1
  252. package/umd/delegua.js +1353 -730
@@ -68,6 +68,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
68
68
  if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
69
69
  return this.simbolos[this.atual].lexema;
70
70
  }
71
+ if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
72
+ return this.simbolos[this.atual].lexema;
73
+ }
71
74
  const lexemaElementar = this.simbolos[this.atual].lexema.toLowerCase();
72
75
  const tipoElementarResolvido = tipos.find((tipo) => tipo === lexemaElementar);
73
76
  if (!tipoElementarResolvido) {
@@ -94,7 +97,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
94
97
  }
95
98
  async construtoAjuda() {
96
99
  const simboloAjuda = this.avancarEDevolverAnterior();
97
- 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) {
98
102
  return new construtos_1.AjudaComoConstruto(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
99
103
  }
100
104
  this.avancarEDevolverAnterior(); // parêntese esquerdo
@@ -521,7 +525,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
521
525
  // o analisador semântico emitir o diagnóstico quando apropriado.
522
526
  tipoIdentificadorCorrespondente = 'qualquer';
523
527
  }
524
- if (!tipoIdentificadorCorrespondente.endsWith('[]') && !['dicionário', 'qualquer', 'texto', 'tupla', 'vetor'].includes(tipoIdentificadorCorrespondente)) {
528
+ if (!tipoIdentificadorCorrespondente.endsWith('[]') &&
529
+ !['dicionário', 'qualquer', 'texto', 'tupla', 'vetor'].includes(tipoIdentificadorCorrespondente)) {
525
530
  throw this.erro(this.simbolos[this.atual], `Tipo ${tipoIdentificadorCorrespondente} não suporta acesso por índice.`);
526
531
  }
527
532
  let tipoAcesso = 'qualquer';
@@ -595,8 +600,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
595
600
  if (expressaoAnterior.tipo === 'dicionário' &&
596
601
  expressaoAnterior.constructor !== construtos_1.Dicionario) {
597
602
  const elementoMontaoTipos = this.resolverElementoMontao(expressaoAnterior);
598
- if (elementoMontaoTipos &&
599
- nome.lexema in elementoMontaoTipos.subElementos) {
603
+ if (elementoMontaoTipos && nome.lexema in elementoMontaoTipos.subElementos) {
600
604
  tipoInferido = elementoMontaoTipos.subElementos[nome.lexema].tipo;
601
605
  }
602
606
  }
@@ -853,7 +857,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
853
857
  if (construto instanceof construtos_1.Unario) {
854
858
  const operando = construto.operando;
855
859
  // Verifica se o operando é um vetor
856
- 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('[]')) {
857
863
  return true;
858
864
  }
859
865
  // Verifica recursivamente para casos como !![]
@@ -1464,7 +1470,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1464
1470
  }
1465
1471
  async declaracaoSe() {
1466
1472
  const condicao = await this.expressao();
1467
- const caminhoEntao = await this.resolverDeclaracao();
1473
+ const caminhoEntao = (await this.resolverDeclaracao());
1468
1474
  let caminhoSenao = null;
1469
1475
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.SENAO, delegua_2.default.SENÃO)) {
1470
1476
  caminhoSenao = await this.resolverDeclaracao();
@@ -1595,20 +1601,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1595
1601
  // Uma delas é a variável/constante ser uma classe padrão.
1596
1602
  // Isso ocorre quando a importação é feita de uma biblioteca Node.js.
1597
1603
  // Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
1598
- if (entidadeChamada.objeto.tipo &&
1599
- entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
1604
+ if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
1600
1605
  const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
1601
1606
  if (!tipoCorrespondente) {
1602
1607
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
1603
1608
  }
1604
- if (!(entidadeChamada.simbolo.lexema in
1605
- tipoCorrespondente.metodos) &&
1606
- !(entidadeChamada.simbolo.lexema in
1607
- tipoCorrespondente.propriedades)) {
1609
+ if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
1610
+ !(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
1608
1611
  throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Membro '${entidadeChamada.simbolo.lexema}' não existe no tipo '${entidadeChamada.objeto.tipo}'.`);
1609
1612
  }
1610
- if (entidadeChamada.simbolo.lexema in
1611
- tipoCorrespondente.metodos) {
1613
+ if (entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) {
1612
1614
  const metodoCorrespondente = tipoCorrespondente.metodos[entidadeChamada.simbolo.lexema];
1613
1615
  return metodoCorrespondente.tipoRetorno || 'qualquer';
1614
1616
  }
@@ -1961,7 +1963,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1961
1963
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo da interface.");
1962
1964
  const metodos = [];
1963
1965
  const propriedades = [];
1964
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
1966
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
1967
+ !this.estaNoFinal()) {
1965
1968
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
1966
1969
  if (this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA))
1967
1970
  break;
@@ -2012,13 +2015,19 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2012
2015
  const simbolo = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da classe.');
2013
2016
  // Pré-registro para permitir auto-referência no corpo da própria classe,
2014
2017
  // como em `MinhaClasse.propriedadeEstatica` dentro de métodos.
2015
- 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 : {};
2016
2020
  const pilhaDecoradoresClasse = Array.from(this.pilhaDecoradores);
2017
- let superClasse = null;
2021
+ // Verificar `herda SuperclasseA, SuperclasseB`
2022
+ const superClasses = [];
2018
2023
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.HERDA)) {
2019
- const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
2020
- this.superclasseAtual = simboloSuperclasse.lexema;
2021
- superClasse = new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema);
2024
+ do {
2025
+ const simboloSuperclasse = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
2026
+ if (superClasses.length === 0) {
2027
+ this.superclasseAtual = simboloSuperclasse.lexema;
2028
+ }
2029
+ superClasses.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloSuperclasse.lexema));
2030
+ } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
2022
2031
  }
2023
2032
  // Verificar `implementa InterfaceA, InterfaceB`
2024
2033
  const implementaInterfaces = [];
@@ -2027,6 +2036,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2027
2036
  implementaInterfaces.push(this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de interface após "implementa".'));
2028
2037
  } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
2029
2038
  }
2039
+ // Verificar `mescla MisturávelA, MisturávelB`
2040
+ const mesclas = [];
2041
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.MESCLA)) {
2042
+ do {
2043
+ const simboloMisturavel = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome de classe após "mescla".');
2044
+ mesclas.push(new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1], simboloMisturavel.lexema));
2045
+ } while (this.verificarSeSimboloAtualEIgualA(delegua_2.default.VIRGULA));
2046
+ }
2030
2047
  this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
2031
2048
  this.pilhaDecoradores = [];
2032
2049
  const metodos = [];
@@ -2037,7 +2054,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2037
2054
  */
2038
2055
  const compreenderMembros = async (acessoPadrao, ehEstaticoPadrao, ehAbstratoPadrao = false) => {
2039
2056
  var _a;
2040
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2057
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
2058
+ !this.estaNoFinal()) {
2041
2059
  // Pular comentários normais dentro do corpo da classe.
2042
2060
  if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
2043
2061
  this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
@@ -2058,12 +2076,12 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2058
2076
  // Detecção de bloco de contexto: modificador seguido de '{'
2059
2077
  const tipoAtual = this.simbolos[this.atual].tipo;
2060
2078
  const tipoProximo = (_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo;
2061
- const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual)
2062
- && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2063
- const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO
2064
- && tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
2065
- const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO
2066
- && 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;
2067
2085
  if (ehBlocoAcesso) {
2068
2086
  const novoAcesso = tipoAtual === delegua_2.default.PRIVADO ? 'privado' : 'protegido';
2069
2087
  this.avancarEDevolverAnterior(); // consume modificador de acesso
@@ -2160,14 +2178,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2160
2178
  for (const declaracao of corpo) {
2161
2179
  expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
2162
2180
  }
2163
- 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));
2164
2184
  const retornaChamadoExplicitamente = tiposRetornos.size > 0;
2165
2185
  tiposRetornos.delete('qualquer');
2166
2186
  if (tipoRetorno === 'qualquer') {
2167
2187
  if (tiposRetornos.size > 0) {
2168
2188
  tipoRetorno = tiposRetornos.values().next().value;
2169
2189
  }
2170
- else if (!retornaChamadoExplicitamente && !definicaoExplicitaDeTipo) {
2190
+ else if (!retornaChamadoExplicitamente &&
2191
+ !definicaoExplicitaDeTipo) {
2171
2192
  tipoRetorno = 'vazio';
2172
2193
  }
2173
2194
  }
@@ -2189,7 +2210,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2189
2210
  const nomePropriedade = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado identificador para nome de propriedade.');
2190
2211
  this.consumir(delegua_2.default.DOIS_PONTOS, 'Esperado dois-pontos após nome de propriedade.');
2191
2212
  const tipoPropriedade = this.avancarEDevolverAnterior();
2192
- const prop = new declaracoes_1.PropriedadeClasse(nomePropriedade, tipoPropriedade.lexema, Array.from(this.pilhaDecoradores), modificadorAcesso, ehEstatico);
2213
+ let nomeTipoPropriedade = tipoPropriedade.lexema;
2214
+ if (this.verificarTipoSimboloAtual(delegua_2.default.COLCHETE_ESQUERDO)) {
2215
+ this.avancarEDevolverAnterior(); // consume '['
2216
+ this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após '[' na definição do tipo de propriedade.");
2217
+ nomeTipoPropriedade = `${nomeTipoPropriedade}[]`;
2218
+ }
2219
+ const prop = new declaracoes_1.PropriedadeClasse(nomePropriedade, nomeTipoPropriedade, Array.from(this.pilhaDecoradores), modificadorAcesso, ehEstatico);
2193
2220
  prop.documentacao = docAtual;
2194
2221
  // Auto-propriedade: `nome: tipo { obter; definir; }`
2195
2222
  // Ou corpo personalizado: `nome: tipo { obter() { ... } definir(valor) { ... } }`
@@ -2217,13 +2244,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2217
2244
  let tipoAcessor = 'qualquer';
2218
2245
  let expressoesRetornaAcessor = [];
2219
2246
  for (const declaracao of corpoAcessor) {
2220
- expressoesRetornaAcessor = expressoesRetornaAcessor.concat((0, comum_1.buscarRetornos)(declaracao));
2247
+ expressoesRetornaAcessor =
2248
+ expressoesRetornaAcessor.concat((0, comum_1.buscarRetornos)(declaracao));
2221
2249
  }
2222
- 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));
2223
2253
  const retornaExplicitamenteAcessor = tiposRetornosAcessor.size > 0;
2224
2254
  tiposRetornosAcessor.delete('qualquer');
2225
2255
  if (tiposRetornosAcessor.size > 0) {
2226
- tipoAcessor = tiposRetornosAcessor.values().next().value;
2256
+ tipoAcessor = tiposRetornosAcessor
2257
+ .values()
2258
+ .next().value;
2227
2259
  }
2228
2260
  else if (!retornaExplicitamenteAcessor) {
2229
2261
  tipoAcessor = 'vazio';
@@ -2275,28 +2307,59 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2275
2307
  await compreenderMembros('publico', false);
2276
2308
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
2277
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;
2278
2311
  for (const nomeInterface of implementaInterfaces) {
2279
2312
  const interfaceDecl = this.interfacesDeclaradas[nomeInterface.lexema];
2280
2313
  if (!interfaceDecl) {
2281
2314
  this.erros.push(this.erro(nomeInterface, `Interface '${nomeInterface.lexema}' não foi declarada antes da classe '${simbolo.lexema}'.`));
2282
2315
  continue;
2283
2316
  }
2317
+ const membrosFaltando = [];
2284
2318
  for (const assinatura of interfaceDecl.metodos) {
2285
2319
  const nomeMetodo = assinatura.nome.lexema;
2286
2320
  const implementado = metodos.some((m) => m.simbolo.lexema === nomeMetodo);
2287
2321
  if (!implementado) {
2288
- 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
+ });
2289
2331
  }
2290
2332
  }
2291
2333
  for (const prop of interfaceDecl.propriedades) {
2292
2334
  const nomeProp = prop.nome.lexema;
2293
2335
  const implementada = propriedades.some((p) => p.nome.lexema === nomeProp);
2294
2336
  if (!implementada) {
2295
- 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);
2296
2359
  }
2297
2360
  }
2298
2361
  }
2299
- const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstatica, implementaInterfaces);
2362
+ const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasses, metodos, propriedades, pilhaDecoradoresClasse, ehAbstrata, ehEstatica, implementaInterfaces, mesclas);
2300
2363
  this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
2301
2364
  this.superclasseAtual = undefined;
2302
2365
  return definicaoClasse;
@@ -2320,7 +2383,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2320
2383
  if (!this.primitivasConhecidas[nomeTipo]) {
2321
2384
  this.primitivasConhecidas[nomeTipo] = {};
2322
2385
  }
2323
- while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
2386
+ while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
2387
+ !this.estaNoFinal()) {
2324
2388
  // Pular comentários dentro do corpo da extensão.
2325
2389
  if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
2326
2390
  this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
@@ -2368,7 +2432,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2368
2432
  const metodo = new declaracoes_1.FuncaoDeclaracao(nomeMetodo, corpoFuncao, tipoDaFuncao);
2369
2433
  metodos.push(metodo);
2370
2434
  const argumentos = params.map((parametro) => new informacao_elemento_sintatico_1.InformacaoElementoSintatico(parametro.nome.lexema, parametro.tipoDado || 'qualquer', parametro.valorPadrao === undefined));
2371
- 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);
2372
2437
  }
2373
2438
  this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' ao final da extensão.");
2374
2439
  return new declaracoes_1.Extensao(simboloTipo, metodos, ehGlobal, this.hashArquivo);
@@ -2400,7 +2465,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2400
2465
  this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) &&
2401
2466
  this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
2402
2467
  this.avancarEDevolverAnterior();
2403
- const declaracaoFuncao = await this.funcao('funcao');
2468
+ const declaracaoFuncao = (await this.funcao('funcao'));
2404
2469
  declaracaoFuncao.documentacao = docTopLevel;
2405
2470
  return declaracaoFuncao;
2406
2471
  }
@@ -2474,7 +2539,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2474
2539
  this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) &&
2475
2540
  this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
2476
2541
  this.avancarEDevolverAnterior();
2477
- const declaracaoFuncao = await this.funcao('funcao');
2542
+ const declaracaoFuncao = (await this.funcao('funcao'));
2478
2543
  declaracaoFuncao.documentacao = new construtos_1.ComentarioComoConstruto(simboloDoc);
2479
2544
  return declaracaoFuncao;
2480
2545
  }
@@ -2544,7 +2609,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2544
2609
  }
2545
2610
  async declaracaoAjuda() {
2546
2611
  const simboloAjuda = this.avancarEDevolverAnterior();
2547
- if (this.estaNoFinal() || this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
2612
+ if (this.estaNoFinal() ||
2613
+ this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
2548
2614
  return new declaracoes_1.Ajuda(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
2549
2615
  }
2550
2616
  this.avancarEDevolverAnterior(); // parêntese esquerdo
@@ -2566,10 +2632,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2566
2632
  this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
2567
2633
  // Funções nativas de Delégua
2568
2634
  this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
2635
+ this.pilhaEscopos.definirInformacoesVariavel('aleatório', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatório', 'número'));
2569
2636
  this.pilhaEscopos.definirInformacoesVariavel('aleatorioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorioEntre', 'número', true, [
2570
2637
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
2571
2638
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
2572
2639
  ]));
2640
+ this.pilhaEscopos.definirInformacoesVariavel('aleatórioEntre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatórioEntre', 'número', true, [
2641
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
2642
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
2643
+ ]));
2573
2644
  this.pilhaEscopos.definirInformacoesVariavel('algum', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('algum', 'lógico', true, [
2574
2645
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2575
2646
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
@@ -2585,14 +2656,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2585
2656
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2586
2657
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2587
2658
  ]));
2659
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÍndice', 'inteiro', true, [
2660
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2661
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2662
+ ]));
2588
2663
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimo', 'inteiro', true, [
2589
2664
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2590
2665
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2591
2666
  ]));
2667
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimo', 'inteiro', true, [
2668
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2669
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2670
+ ]));
2592
2671
  this.pilhaEscopos.definirInformacoesVariavel('encontrarUltimoIndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarUltimoIndice', 'inteiro', true, [
2593
2672
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2594
2673
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2595
2674
  ]));
2675
+ this.pilhaEscopos.definirInformacoesVariavel('encontrarÚltimoÍndice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrarÚltimoÍndice', 'inteiro', true, [
2676
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2677
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
2678
+ ]));
2596
2679
  this.pilhaEscopos.definirInformacoesVariavel('filtrarPor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrarPor', 'qualquer[]', true, [
2597
2680
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2598
2681
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
@@ -2601,6 +2684,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2601
2684
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2602
2685
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2603
2686
  ]));
2687
+ this.pilhaEscopos.definirInformacoesVariavel('incluído', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('incluído', 'lógico', true, [
2688
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2689
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2690
+ ]));
2604
2691
  this.pilhaEscopos.definirInformacoesVariavel('inteiro', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('inteiro', 'inteiro', true, [
2605
2692
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
2606
2693
  ]));
@@ -2616,6 +2703,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2616
2703
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2617
2704
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoMapeamento', 'função'),
2618
2705
  ]));
2706
+ this.pilhaEscopos.definirInformacoesVariavel('maximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'qualquer', true, [
2707
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2708
+ ]));
2709
+ this.pilhaEscopos.definirInformacoesVariavel('máximo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('máximo', 'qualquer', true, [
2710
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2711
+ ]));
2712
+ this.pilhaEscopos.definirInformacoesVariavel('minimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'qualquer', true, [
2713
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2714
+ ]));
2715
+ this.pilhaEscopos.definirInformacoesVariavel('mínimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('mínimo', 'qualquer', true, [
2716
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2717
+ ]));
2619
2718
  this.pilhaEscopos.definirInformacoesVariavel('numero', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('número', 'número', true, [
2620
2719
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2621
2720
  ]));
@@ -2634,6 +2733,10 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2634
2733
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2635
2734
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
2636
2735
  ]));
2736
+ this.pilhaEscopos.definirInformacoesVariavel('primeiroEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiroEmCondição', 'qualquer', true, [
2737
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2738
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
2739
+ ]));
2637
2740
  this.pilhaEscopos.definirInformacoesVariavel('real', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('real', 'número', true, [
2638
2741
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2639
2742
  ]));
@@ -2649,12 +2752,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
2649
2752
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
2650
2753
  ]));
2651
2754
  this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
2652
- new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer')
2755
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2653
2756
  ]));
2654
2757
  this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
2655
2758
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2656
2759
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
2657
2760
  ]));
2761
+ this.pilhaEscopos.definirInformacoesVariavel('todosEmCondição', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondição', 'lógico', true, [
2762
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
2763
+ new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
2764
+ ]));
2658
2765
  this.pilhaEscopos.definirInformacoesVariavel('tupla', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'tupla', true, [
2659
2766
  new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
2660
2767
  ]));