@designliquido/delegua 0.36.1 → 0.36.2

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 (490) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts +69 -69
  2. package/analisador-semantico/analisador-semantico-base.js +180 -180
  3. package/analisador-semantico/analisador-semantico.d.ts +59 -59
  4. package/analisador-semantico/analisador-semantico.js +442 -442
  5. package/analisador-semantico/analisador-semantico.js.map +1 -1
  6. package/analisador-semantico/index.d.ts +3 -3
  7. package/analisador-semantico/index.js +19 -19
  8. package/analisador-semantico/pilha-variaveis.d.ts +20 -20
  9. package/analisador-semantico/pilha-variaveis.js +25 -25
  10. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +69 -69
  11. package/avaliador-sintatico/avaliador-sintatico-base.js +223 -223
  12. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  13. package/avaliador-sintatico/avaliador-sintatico.d.ts +126 -126
  14. package/avaliador-sintatico/avaliador-sintatico.js +1093 -1093
  15. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +73 -73
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +648 -648
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +21 -21
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +149 -149
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +87 -87
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +770 -770
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +34 -34
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +168 -168
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/index.d.ts +3 -3
  29. package/avaliador-sintatico/dialetos/index.js +19 -19
  30. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
  31. package/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
  32. package/avaliador-sintatico/index.d.ts +6 -6
  33. package/avaliador-sintatico/index.js +22 -22
  34. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts +27 -27
  35. package/avaliador-sintatico/micro-avaliador-sintatico-base.js +116 -116
  36. package/avaliador-sintatico/micro-avaliador-sintatico-base.js.map +1 -1
  37. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts +33 -33
  38. package/avaliador-sintatico/micro-avaliador-sintatico.js +287 -287
  39. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  40. package/avaliador-sintatico/retornos/index.d.ts +3 -3
  41. package/avaliador-sintatico/retornos/index.js +19 -19
  42. package/avaliador-sintatico/retornos/retorno-declaracao.d.ts +3 -3
  43. package/avaliador-sintatico/retornos/retorno-declaracao.js +2 -2
  44. package/avaliador-sintatico/retornos/retorno-primario.d.ts +3 -3
  45. package/avaliador-sintatico/retornos/retorno-primario.js +2 -2
  46. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.d.ts +2 -2
  47. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.js +2 -2
  48. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +59 -59
  49. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +150 -150
  50. package/bibliotecas/biblioteca-global.d.ts +157 -157
  51. package/bibliotecas/biblioteca-global.js +497 -498
  52. package/bibliotecas/biblioteca-global.js.map +1 -1
  53. package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts +1 -1
  54. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +236 -236
  55. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
  56. package/bibliotecas/dialetos/egua-classico/index.d.ts +2 -2
  57. package/bibliotecas/dialetos/egua-classico/index.js +32 -32
  58. package/bibliotecas/dialetos/egua-classico/index.js.map +1 -1
  59. package/bibliotecas/dialetos/egua-classico/matematica.d.ts +1 -1
  60. package/bibliotecas/dialetos/egua-classico/matematica.js +541 -541
  61. package/bibliotecas/dialetos/egua-classico/matematica.js.map +1 -1
  62. package/bibliotecas/dialetos/egua-classico/tempo.d.ts +1 -1
  63. package/bibliotecas/dialetos/egua-classico/tempo.js +39 -39
  64. package/bibliotecas/dialetos/egua-classico/tempo.js.map +1 -1
  65. package/bibliotecas/dialetos/egua-classico/textos.d.ts +8 -8
  66. package/bibliotecas/dialetos/egua-classico/textos.js +201 -201
  67. package/bibliotecas/dialetos/egua-classico/textos.js.map +1 -1
  68. package/bibliotecas/primitivas-dicionario.d.ts +6 -6
  69. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  70. package/bibliotecas/primitivas-dicionario.js +10 -10
  71. package/bibliotecas/primitivas-numero.d.ts +6 -6
  72. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  73. package/bibliotecas/primitivas-numero.js +10 -10
  74. package/bibliotecas/primitivas-texto.d.ts +17 -17
  75. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  76. package/bibliotecas/primitivas-texto.js +22 -22
  77. package/bibliotecas/primitivas-texto.js.map +1 -1
  78. package/bibliotecas/primitivas-vetor.d.ts +21 -21
  79. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  80. package/bibliotecas/primitivas-vetor.js +90 -90
  81. package/bibliotecas/primitivas-vetor.js.map +1 -1
  82. package/bin/package.json +5 -4
  83. package/construtos/acesso-elemento-matriz.d.ts +12 -12
  84. package/construtos/acesso-elemento-matriz.js +17 -17
  85. package/construtos/acesso-indice-variavel.d.ts +15 -15
  86. package/construtos/acesso-indice-variavel.js +20 -20
  87. package/construtos/acesso-metodo-ou-propriedade.d.ts +14 -14
  88. package/construtos/acesso-metodo-ou-propriedade.js +19 -19
  89. package/construtos/agrupamento.d.ts +14 -14
  90. package/construtos/agrupamento.js +19 -19
  91. package/construtos/atribuicao-por-indice.d.ts +11 -11
  92. package/construtos/atribuicao-por-indice.js +16 -16
  93. package/construtos/atribuicao-por-indices-matriz.d.ts +12 -12
  94. package/construtos/atribuicao-por-indices-matriz.js +17 -17
  95. package/construtos/atribuir.d.ts +15 -15
  96. package/construtos/atribuir.js +24 -24
  97. package/construtos/atribuir.js.map +1 -1
  98. package/construtos/binario.d.ts +33 -33
  99. package/construtos/binario.js +38 -38
  100. package/construtos/chamada.d.ts +15 -15
  101. package/construtos/chamada.js +21 -21
  102. package/construtos/comentario.d.ts +15 -15
  103. package/construtos/comentario.js +20 -20
  104. package/construtos/constante.d.ts +12 -12
  105. package/construtos/constante.js +17 -17
  106. package/construtos/construto.d.ts +7 -7
  107. package/construtos/construto.js +2 -2
  108. package/construtos/decorador.d.ts +14 -14
  109. package/construtos/decorador.js +19 -19
  110. package/construtos/definir-valor.d.ts +11 -11
  111. package/construtos/definir-valor.js +16 -16
  112. package/construtos/dicionario.d.ts +10 -10
  113. package/construtos/dicionario.js +15 -15
  114. package/construtos/expressao-regular.d.ts +10 -10
  115. package/construtos/expressao-regular.js +15 -15
  116. package/construtos/fim-para.d.ts +22 -22
  117. package/construtos/fim-para.js +25 -25
  118. package/construtos/formatacao-escrita.d.ts +16 -16
  119. package/construtos/formatacao-escrita.js +21 -21
  120. package/construtos/funcao.d.ts +12 -12
  121. package/construtos/funcao.js +16 -16
  122. package/construtos/index.d.ts +29 -29
  123. package/construtos/index.js +45 -45
  124. package/construtos/isto.d.ts +9 -9
  125. package/construtos/isto.js +14 -14
  126. package/construtos/literal.d.ts +10 -10
  127. package/construtos/literal.js +14 -14
  128. package/construtos/logico.d.ts +11 -11
  129. package/construtos/logico.js +16 -16
  130. package/construtos/qual-tipo.d.ts +11 -11
  131. package/construtos/qual-tipo.js +16 -16
  132. package/construtos/super.d.ts +10 -10
  133. package/construtos/super.js +15 -15
  134. package/construtos/tipo-de.d.ts +10 -10
  135. package/construtos/tipo-de.js +15 -15
  136. package/construtos/tuplas/deceto.d.ts +18 -18
  137. package/construtos/tuplas/deceto.js +32 -32
  138. package/construtos/tuplas/dupla.d.ts +6 -6
  139. package/construtos/tuplas/dupla.js +12 -12
  140. package/construtos/tuplas/index.d.ts +13 -13
  141. package/construtos/tuplas/index.js +67 -67
  142. package/construtos/tuplas/index.js.map +1 -1
  143. package/construtos/tuplas/noneto.d.ts +15 -15
  144. package/construtos/tuplas/noneto.js +25 -25
  145. package/construtos/tuplas/octeto.d.ts +14 -14
  146. package/construtos/tuplas/octeto.js +24 -24
  147. package/construtos/tuplas/quarteto.d.ts +8 -8
  148. package/construtos/tuplas/quarteto.js +14 -14
  149. package/construtos/tuplas/quinteto.d.ts +9 -9
  150. package/construtos/tuplas/quinteto.js +15 -15
  151. package/construtos/tuplas/septeto.d.ts +13 -13
  152. package/construtos/tuplas/septeto.js +23 -23
  153. package/construtos/tuplas/sexteto.d.ts +10 -10
  154. package/construtos/tuplas/sexteto.js +16 -16
  155. package/construtos/tuplas/trio.d.ts +7 -7
  156. package/construtos/tuplas/trio.js +13 -13
  157. package/construtos/tuplas/tupla.d.ts +8 -8
  158. package/construtos/tuplas/tupla.js +9 -9
  159. package/construtos/unario.d.ts +11 -11
  160. package/construtos/unario.js +16 -16
  161. package/construtos/variavel.d.ts +9 -9
  162. package/construtos/variavel.js +14 -14
  163. package/construtos/vetor.d.ts +11 -11
  164. package/construtos/vetor.js +21 -21
  165. package/construtos/vetor.js.map +1 -1
  166. package/declaracoes/aleatorio.d.ts +15 -15
  167. package/declaracoes/aleatorio.js +15 -15
  168. package/declaracoes/bloco.d.ts +7 -7
  169. package/declaracoes/bloco.js +14 -14
  170. package/declaracoes/cabecalho-programa.d.ts +7 -7
  171. package/declaracoes/cabecalho-programa.js +14 -14
  172. package/declaracoes/classe.d.ts +14 -14
  173. package/declaracoes/classe.js +18 -18
  174. package/declaracoes/const-multiplo.d.ts +14 -14
  175. package/declaracoes/const-multiplo.js +19 -19
  176. package/declaracoes/const.d.ts +14 -14
  177. package/declaracoes/const.js +19 -19
  178. package/declaracoes/continua.d.ts +6 -6
  179. package/declaracoes/continua.js +13 -13
  180. package/declaracoes/declaracao.d.ts +8 -8
  181. package/declaracoes/declaracao.js +17 -17
  182. package/declaracoes/enquanto.d.ts +10 -10
  183. package/declaracoes/enquanto.js +15 -15
  184. package/declaracoes/escolha.d.ts +14 -14
  185. package/declaracoes/escolha.js +19 -19
  186. package/declaracoes/escreva-mesma-linha.d.ts +8 -8
  187. package/declaracoes/escreva-mesma-linha.js +14 -14
  188. package/declaracoes/escreva.d.ts +8 -8
  189. package/declaracoes/escreva.js +14 -14
  190. package/declaracoes/expressao.d.ts +8 -8
  191. package/declaracoes/expressao.js +14 -14
  192. package/declaracoes/falhar.d.ts +8 -8
  193. package/declaracoes/falhar.js +15 -15
  194. package/declaracoes/fazer.d.ts +10 -10
  195. package/declaracoes/fazer.js +15 -15
  196. package/declaracoes/funcao.d.ts +11 -11
  197. package/declaracoes/funcao.js +17 -17
  198. package/declaracoes/importar.d.ts +9 -9
  199. package/declaracoes/importar.js +15 -15
  200. package/declaracoes/index.d.ts +31 -31
  201. package/declaracoes/index.js +47 -47
  202. package/declaracoes/inicio-algoritmo.d.ts +6 -6
  203. package/declaracoes/inicio-algoritmo.js +13 -13
  204. package/declaracoes/leia-multiplo.d.ts +14 -14
  205. package/declaracoes/leia-multiplo.js +21 -21
  206. package/declaracoes/leia.d.ts +17 -17
  207. package/declaracoes/leia.js +21 -21
  208. package/declaracoes/para-cada.d.ts +11 -11
  209. package/declaracoes/para-cada.js +17 -17
  210. package/declaracoes/para.d.ts +19 -19
  211. package/declaracoes/para.js +24 -24
  212. package/declaracoes/propriedade-classe.d.ts +10 -10
  213. package/declaracoes/propriedade-classe.js +16 -16
  214. package/declaracoes/retorna.d.ts +8 -8
  215. package/declaracoes/retorna.js +15 -15
  216. package/declaracoes/se.d.ts +11 -11
  217. package/declaracoes/se.js +17 -17
  218. package/declaracoes/sustar.d.ts +6 -6
  219. package/declaracoes/sustar.js +13 -13
  220. package/declaracoes/tendo-como.d.ts +16 -16
  221. package/declaracoes/tendo-como.js +21 -21
  222. package/declaracoes/tente.d.ts +14 -14
  223. package/declaracoes/tente.js +20 -20
  224. package/declaracoes/var-multiplo.d.ts +15 -15
  225. package/declaracoes/var-multiplo.js +20 -20
  226. package/declaracoes/var.d.ts +16 -16
  227. package/declaracoes/var.js +21 -21
  228. package/depuracao/cyrb53.d.ts +9 -9
  229. package/depuracao/cyrb53.js +22 -22
  230. package/depuracao/cyrb53.js.map +1 -1
  231. package/depuracao/index.d.ts +2 -2
  232. package/depuracao/index.js +23 -23
  233. package/depuracao/ponto-parada.d.ts +4 -4
  234. package/depuracao/ponto-parada.js +2 -2
  235. package/espaco-variaveis.d.ts +19 -19
  236. package/espaco-variaveis.js +19 -19
  237. package/estruturas/chamavel.d.ts +7 -7
  238. package/estruturas/chamavel.js +12 -12
  239. package/estruturas/classe-padrao.d.ts +31 -31
  240. package/estruturas/classe-padrao.js +39 -39
  241. package/estruturas/delegua-funcao.d.ts +29 -29
  242. package/estruturas/delegua-funcao.js +141 -141
  243. package/estruturas/delegua-funcao.js.map +1 -1
  244. package/estruturas/descritor-tipo-classe.d.ts +37 -37
  245. package/estruturas/descritor-tipo-classe.js +79 -79
  246. package/estruturas/descritor-tipo-classe.js.map +1 -1
  247. package/estruturas/funcao-padrao.d.ts +23 -23
  248. package/estruturas/funcao-padrao.js +34 -34
  249. package/estruturas/index.d.ts +9 -9
  250. package/estruturas/index.js +25 -25
  251. package/estruturas/metodo-primitiva.d.ts +28 -28
  252. package/estruturas/metodo-primitiva.js +40 -40
  253. package/estruturas/modulo.d.ts +18 -18
  254. package/estruturas/modulo.js +24 -24
  255. package/estruturas/objeto-delegua-classe.d.ts +26 -26
  256. package/estruturas/objeto-delegua-classe.js +53 -53
  257. package/estruturas/objeto-delegua-classe.js.map +1 -1
  258. package/estruturas/objeto-padrao.d.ts +18 -18
  259. package/estruturas/objeto-padrao.js +32 -32
  260. package/estruturas/objeto-padrao.js.map +1 -1
  261. package/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
  262. package/excecoes/erro-em-tempo-de-execucao.js +13 -13
  263. package/excecoes/index.d.ts +1 -1
  264. package/excecoes/index.js +17 -17
  265. package/formatadores/formatador-delegua.d.ts +79 -79
  266. package/formatadores/formatador-delegua.js +676 -676
  267. package/formatadores/formatador-delegua.js.map +1 -1
  268. package/formatadores/index.d.ts +1 -1
  269. package/formatadores/index.js +17 -17
  270. package/geracao-identificadores/index.d.ts +1 -1
  271. package/geracao-identificadores/index.js +22 -23
  272. package/geracao-identificadores/index.js.map +1 -1
  273. package/index.d.ts +9 -9
  274. package/index.js +27 -27
  275. package/interfaces/analisador-semantico-interface.d.ts +6 -6
  276. package/interfaces/analisador-semantico-interface.js +2 -2
  277. package/interfaces/avaliador-sintatico-interface.d.ts +55 -55
  278. package/interfaces/avaliador-sintatico-interface.js +2 -2
  279. package/interfaces/construtos/index.d.ts +4 -4
  280. package/interfaces/construtos/index.js +2 -2
  281. package/interfaces/erros/diagnostico-analisador-semantico.d.ts +14 -14
  282. package/interfaces/erros/diagnostico-analisador-semantico.js +10 -10
  283. package/interfaces/erros/diagnostico-analisador-semantico.js.map +1 -1
  284. package/interfaces/erros/erro-interpretador.d.ts +8 -8
  285. package/interfaces/erros/erro-interpretador.js +2 -2
  286. package/interfaces/erros/index.d.ts +1 -1
  287. package/interfaces/erros/index.js +17 -17
  288. package/interfaces/escopo-execucao.d.ts +12 -12
  289. package/interfaces/escopo-execucao.js +2 -2
  290. package/interfaces/formatador-comum-interface.d.ts +11 -11
  291. package/interfaces/formatador-comum-interface.js +2 -2
  292. package/interfaces/funcao-hipotetica-interface.d.ts +3 -3
  293. package/interfaces/funcao-hipotetica-interface.js +2 -2
  294. package/interfaces/index.d.ts +16 -16
  295. package/interfaces/index.js +32 -32
  296. package/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
  297. package/interfaces/interpretador-com-depuracao-interface.js +2 -2
  298. package/interfaces/interpretador-interface-potigol.d.ts +5 -5
  299. package/interfaces/interpretador-interface-potigol.js +2 -2
  300. package/interfaces/interpretador-interface.d.ts +20 -20
  301. package/interfaces/interpretador-interface.js +2 -2
  302. package/interfaces/lexador-interface.d.ts +23 -23
  303. package/interfaces/lexador-interface.js +2 -2
  304. package/interfaces/parametro-interface.d.ts +15 -15
  305. package/interfaces/parametro-interface.js +2 -2
  306. package/interfaces/pilha-escopos-execucao-interface.d.ts +26 -26
  307. package/interfaces/pilha-escopos-execucao-interface.js +2 -2
  308. package/interfaces/pilha-interface.d.ts +7 -7
  309. package/interfaces/pilha-interface.js +2 -2
  310. package/interfaces/resolvedor-interface.d.ts +41 -41
  311. package/interfaces/resolvedor-interface.js +2 -2
  312. package/interfaces/retornos/index.d.ts +4 -4
  313. package/interfaces/retornos/index.js +20 -20
  314. package/interfaces/retornos/retorno-analisador-semantico.d.ts +4 -4
  315. package/interfaces/retornos/retorno-analisador-semantico.js +2 -2
  316. package/interfaces/retornos/retorno-avaliador-sintatico.d.ts +5 -5
  317. package/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
  318. package/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
  319. package/interfaces/retornos/retorno-execucao-interface.js +2 -2
  320. package/interfaces/retornos/retorno-interpretador.d.ts +5 -5
  321. package/interfaces/retornos/retorno-interpretador.js +2 -2
  322. package/interfaces/retornos/retorno-lexador.d.ts +9 -9
  323. package/interfaces/retornos/retorno-lexador.js +2 -2
  324. package/interfaces/simbolo-interface.d.ts +7 -7
  325. package/interfaces/simbolo-interface.js +2 -2
  326. package/interfaces/tradutor-interface.d.ts +3 -3
  327. package/interfaces/tradutor-interface.js +2 -2
  328. package/interfaces/variavel-hipotetica-interface.d.ts +8 -8
  329. package/interfaces/variavel-hipotetica-interface.js +2 -2
  330. package/interfaces/variavel-interface.d.ts +8 -8
  331. package/interfaces/variavel-interface.js +2 -2
  332. package/interfaces/visitante-comum-interface.d.ts +58 -58
  333. package/interfaces/visitante-comum-interface.js +2 -2
  334. package/interpretador/argumento-interface.d.ts +4 -4
  335. package/interpretador/argumento-interface.js +2 -2
  336. package/interpretador/comum.d.ts +2 -2
  337. package/interpretador/comum.js +51 -52
  338. package/interpretador/comum.js.map +1 -1
  339. package/interpretador/dialetos/egua-classico/index.d.ts +1 -1
  340. package/interpretador/dialetos/egua-classico/index.js +17 -17
  341. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +119 -119
  342. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +815 -815
  343. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  344. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
  345. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
  346. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
  347. package/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
  348. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
  349. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
  350. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +106 -106
  351. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +441 -441
  352. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  353. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
  354. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
  355. package/interpretador/dialetos/index.d.ts +2 -2
  356. package/interpretador/dialetos/index.js +18 -18
  357. package/interpretador/dialetos/portugol-ipt/index.d.ts +1 -1
  358. package/interpretador/dialetos/portugol-ipt/index.js +17 -17
  359. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +133 -133
  360. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +501 -501
  361. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  362. package/interpretador/index.d.ts +3 -3
  363. package/interpretador/index.js +19 -19
  364. package/interpretador/inferenciador.d.ts +15 -15
  365. package/interpretador/inferenciador.d.ts.map +1 -1
  366. package/interpretador/inferenciador.js +80 -80
  367. package/interpretador/inferenciador.js.map +1 -1
  368. package/interpretador/interpretador-base.d.ts +268 -268
  369. package/interpretador/interpretador-base.js +1399 -1399
  370. package/interpretador/interpretador-base.js.map +1 -1
  371. package/interpretador/interpretador-com-depuracao.d.ts +190 -190
  372. package/interpretador/interpretador-com-depuracao.js +568 -568
  373. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  374. package/interpretador/pilha-escopos-execucao.d.ts +39 -39
  375. package/interpretador/pilha-escopos-execucao.js +243 -243
  376. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  377. package/lexador/dialetos/index.d.ts +4 -4
  378. package/lexador/dialetos/index.js +20 -20
  379. package/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
  380. package/lexador/dialetos/lexador-egua-classico.js +286 -286
  381. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  382. package/lexador/dialetos/lexador-guarani.d.ts +10 -10
  383. package/lexador/dialetos/lexador-guarani.js +113 -113
  384. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  385. package/lexador/dialetos/lexador-pitugues.d.ts +51 -51
  386. package/lexador/dialetos/lexador-pitugues.js +398 -398
  387. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  388. package/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
  389. package/lexador/dialetos/lexador-portugol-ipt.js +237 -237
  390. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  391. package/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +32 -32
  392. package/lexador/dialetos/palavras-reservadas/egua-classico.js +39 -39
  393. package/lexador/dialetos/palavras-reservadas/guarani.d.ts +3 -3
  394. package/lexador/dialetos/palavras-reservadas/guarani.js +10 -10
  395. package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +13 -13
  396. package/lexador/dialetos/palavras-reservadas/portugol-ipt.js +20 -20
  397. package/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +1 -1
  398. package/lexador/dialetos/palavras-reservadas/rantiaquin.js +4 -4
  399. package/lexador/dialetos/pragma.d.ts +8 -8
  400. package/lexador/dialetos/pragma.js +2 -2
  401. package/lexador/erro-lexador.d.ts +5 -5
  402. package/lexador/erro-lexador.js +2 -2
  403. package/lexador/index.d.ts +4 -4
  404. package/lexador/index.js +20 -20
  405. package/lexador/lexador-base-linha-unica.d.ts +28 -28
  406. package/lexador/lexador-base-linha-unica.js +82 -82
  407. package/lexador/lexador-base-linha-unica.js.map +1 -1
  408. package/lexador/lexador-base.d.ts +41 -41
  409. package/lexador/lexador-base.js +112 -112
  410. package/lexador/lexador-base.js.map +1 -1
  411. package/lexador/lexador.d.ts +43 -43
  412. package/lexador/lexador.js +440 -440
  413. package/lexador/lexador.js.map +1 -1
  414. package/lexador/micro-lexador.d.ts +29 -29
  415. package/lexador/micro-lexador.js +207 -207
  416. package/lexador/micro-lexador.js.map +1 -1
  417. package/lexador/palavras-reservadas.d.ts +54 -54
  418. package/lexador/palavras-reservadas.js +61 -61
  419. package/lexador/simbolo.d.ts +10 -10
  420. package/lexador/simbolo.js +16 -16
  421. package/lexador/traducao/lexador-javascript.d.ts +28 -28
  422. package/lexador/traducao/lexador-javascript.js +58 -58
  423. package/package.json +5 -4
  424. package/quebras/index.d.ts +10 -10
  425. package/quebras/index.js +19 -19
  426. package/tipo-dados-elementar.d.ts +1 -1
  427. package/tipo-dados-elementar.js +2 -2
  428. package/tipos-de-dados/delegua.d.ts +18 -18
  429. package/tipos-de-dados/delegua.js +19 -19
  430. package/tipos-de-dados/listas-delegua.d.ts +6 -6
  431. package/tipos-de-dados/listas-delegua.js +7 -7
  432. package/tipos-de-dados/listas-primitivos.d.ts +5 -5
  433. package/tipos-de-dados/listas-primitivos.js +6 -6
  434. package/tipos-de-dados/primitivos.d.ts +16 -16
  435. package/tipos-de-dados/primitivos.js +17 -17
  436. package/tipos-de-simbolos/comum.d.ts +23 -23
  437. package/tipos-de-simbolos/comum.js +24 -24
  438. package/tipos-de-simbolos/delegua.d.ts +91 -91
  439. package/tipos-de-simbolos/delegua.js +92 -92
  440. package/tipos-de-simbolos/egua-classico.d.ts +75 -75
  441. package/tipos-de-simbolos/egua-classico.js +76 -76
  442. package/tipos-de-simbolos/guarani.d.ts +14 -14
  443. package/tipos-de-simbolos/guarani.js +15 -15
  444. package/tipos-de-simbolos/guarani.js.map +1 -1
  445. package/tipos-de-simbolos/microgramaticas/delegua.d.ts +46 -46
  446. package/tipos-de-simbolos/microgramaticas/delegua.js +47 -47
  447. package/tipos-de-simbolos/pitugues.d.ts +75 -75
  448. package/tipos-de-simbolos/pitugues.js +76 -76
  449. package/tipos-de-simbolos/portugol-ipt.d.ts +36 -36
  450. package/tipos-de-simbolos/portugol-ipt.js +37 -37
  451. package/tipos-de-simbolos/rantiaquin.d.ts +2 -2
  452. package/tipos-de-simbolos/rantiaquin.js +3 -3
  453. package/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
  454. package/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
  455. package/tradutores/dicionarios/index.d.ts +1 -1
  456. package/tradutores/dicionarios/index.js +17 -17
  457. package/tradutores/index.d.ts +6 -6
  458. package/tradutores/index.js +22 -22
  459. package/tradutores/python/python3-lexer.d.ts +152 -152
  460. package/tradutores/python/python3-lexer.js +1227 -1227
  461. package/tradutores/python/python3-lexer.js.map +1 -1
  462. package/tradutores/python/python3-listener.d.ts +964 -964
  463. package/tradutores/python/python3-listener.js +3 -3
  464. package/tradutores/python/python3-parser.d.ts +1342 -1342
  465. package/tradutores/python/python3-parser.js +11226 -11226
  466. package/tradutores/python/python3-parser.js.map +1 -1
  467. package/tradutores/python/python3-visitor.d.ts +619 -619
  468. package/tradutores/python/python3-visitor.js +3 -3
  469. package/tradutores/tradutor-assembly-x64.d.ts +19 -19
  470. package/tradutores/tradutor-assembly-x64.js +128 -128
  471. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  472. package/tradutores/tradutor-assemblyscript.d.ts +91 -91
  473. package/tradutores/tradutor-assemblyscript.js +590 -590
  474. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  475. package/tradutores/tradutor-javascript.d.ts +95 -95
  476. package/tradutores/tradutor-javascript.js +577 -577
  477. package/tradutores/tradutor-javascript.js.map +1 -1
  478. package/tradutores/tradutor-portugol-ipt.d.ts +21 -21
  479. package/tradutores/tradutor-portugol-ipt.js +60 -60
  480. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  481. package/tradutores/tradutor-python.d.ts +65 -65
  482. package/tradutores/tradutor-python.js +461 -461
  483. package/tradutores/tradutor-python.js.map +1 -1
  484. package/tradutores/tradutor-reverso-javascript.d.ts +50 -50
  485. package/tradutores/tradutor-reverso-javascript.js +392 -392
  486. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  487. package/tradutores/tradutor-reverso-python.d.ts +32 -32
  488. package/tradutores/tradutor-reverso-python.js +71 -71
  489. package/tradutores/tradutor-reverso-python.js.map +1 -1
  490. package/umd/delegua.js +26337 -26340
@@ -1,443 +1,443 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AnalisadorSemantico = void 0;
4
- const construtos_1 = require("../construtos");
5
- const declaracoes_1 = require("../declaracoes");
6
- const erros_1 = require("../interfaces/erros");
7
- const analisador_semantico_base_1 = require("./analisador-semantico-base");
8
- const pilha_variaveis_1 = require("./pilha-variaveis");
9
- class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemanticoBase {
10
- constructor() {
11
- super();
12
- this.pilhaVariaveis = new pilha_variaveis_1.PilhaVariaveis();
13
- this.variaveis = {};
14
- this.funcoes = {};
15
- this.atual = 0;
16
- this.diagnosticos = [];
17
- }
18
- erro(simbolo, mensagem) {
19
- this.diagnosticos.push({
20
- simbolo: simbolo,
21
- mensagem: mensagem,
22
- hashArquivo: simbolo.hashArquivo,
23
- linha: simbolo.linha,
24
- severidade: erros_1.DiagnosticoSeveridade.ERRO,
25
- });
26
- }
27
- aviso(simbolo, mensagem) {
28
- this.diagnosticos.push({
29
- simbolo: simbolo,
30
- mensagem: mensagem,
31
- hashArquivo: simbolo.hashArquivo,
32
- linha: simbolo.linha,
33
- severidade: erros_1.DiagnosticoSeveridade.AVISO,
34
- });
35
- }
36
- verificarTipoAtribuido(declaracao) {
37
- if (declaracao.tipo) {
38
- if (['vetor', 'qualquer[]', 'inteiro[]', 'texto[]'].includes(declaracao.tipo)) {
39
- if (declaracao.inicializador instanceof construtos_1.Vetor) {
40
- const vetor = declaracao.inicializador;
41
- if (declaracao.tipo === 'inteiro[]') {
42
- const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
43
- if (v) {
44
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'inteiros' ou 'real'.`);
45
- }
46
- }
47
- if (declaracao.tipo === 'texto[]') {
48
- const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
49
- if (v) {
50
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'texto'.`);
51
- }
52
- }
53
- }
54
- else {
55
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de elementos.`);
56
- }
57
- }
58
- if (declaracao.inicializador instanceof construtos_1.Literal) {
59
- const literal = declaracao.inicializador;
60
- if (declaracao.tipo === 'texto') {
61
- if (typeof literal.valor !== 'string') {
62
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um 'texto'.`);
63
- }
64
- }
65
- if (['inteiro', 'real'].includes(declaracao.tipo)) {
66
- if (typeof literal.valor !== 'number') {
67
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um 'número'.`);
68
- }
69
- }
70
- }
71
- if (declaracao.inicializador instanceof declaracoes_1.Leia) {
72
- if (declaracao.tipo !== 'texto') {
73
- this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', Leia só pode receber tipo 'texto'.`);
74
- }
75
- }
76
- }
77
- }
78
- visitarExpressaoTipoDe(expressao) {
79
- return this.verificarTipoDe(expressao.valor);
80
- }
81
- verificarTipoDe(valor) {
82
- if (valor instanceof construtos_1.Binario) {
83
- this.verificarTipoDe(valor.direita);
84
- this.verificarTipoDe(valor.esquerda);
85
- }
86
- if (valor instanceof construtos_1.Agrupamento) {
87
- return this.verificarTipoDe(valor.expressao);
88
- }
89
- if (valor instanceof construtos_1.Variavel) {
90
- return this.verificarVariavel(valor);
91
- }
92
- return Promise.resolve();
93
- }
94
- visitarExpressaoFalhar(expressao) {
95
- return this.verificarFalhar(expressao.explicacao);
96
- }
97
- verificarFalhar(valor) {
98
- if (valor instanceof construtos_1.Binario) {
99
- this.verificarFalhar(valor.direita);
100
- this.verificarFalhar(valor.esquerda);
101
- }
102
- if (valor instanceof construtos_1.Agrupamento) {
103
- return this.verificarFalhar(valor.expressao);
104
- }
105
- if (valor instanceof construtos_1.Variavel) {
106
- return this.verificarVariavel(valor);
107
- }
108
- return Promise.resolve();
109
- }
110
- visitarExpressaoDeChamada(expressao) {
111
- var _a, _b;
112
- if (expressao.entidadeChamada instanceof construtos_1.Variavel) {
113
- const variavel = expressao.entidadeChamada;
114
- const funcaoChamada = this.variaveis[variavel.simbolo.lexema] || this.funcoes[variavel.simbolo.lexema];
115
- if (!funcaoChamada) {
116
- this.erro(expressao.entidadeChamada.simbolo, `Chamada da função '${expressao.entidadeChamada.simbolo.lexema}' não existe.`);
117
- return Promise.resolve();
118
- }
119
- const funcao = funcaoChamada.valor;
120
- if (funcao.parametros.length !== expressao.argumentos.length) {
121
- this.erro(expressao.entidadeChamada.simbolo, `Função '${expressao.entidadeChamada.simbolo.lexema}' espera ${funcao.parametros.length} parametros.`);
122
- }
123
- for (let [indice, arg0] of funcao.parametros.entries()) {
124
- const arg1 = expressao.argumentos[indice];
125
- if (arg1) {
126
- if (((_a = arg0.tipoDado) === null || _a === void 0 ? void 0 : _a.tipo) === 'texto' && typeof arg1.valor !== 'string') {
127
- this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
128
- }
129
- else if (['inteiro', 'real'].includes((_b = arg0.tipoDado) === null || _b === void 0 ? void 0 : _b.tipo) && typeof arg1.valor !== 'number') {
130
- this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
131
- }
132
- }
133
- }
134
- }
135
- return Promise.resolve();
136
- }
137
- visitarExpressaoDeAtribuicao(expressao) {
138
- let valor = this.variaveis[expressao.simbolo.lexema];
139
- if (!valor) {
140
- this.erro(expressao.simbolo, `Variável ${expressao.simbolo.lexema} ainda não foi declarada até este ponto.`);
141
- return Promise.resolve();
142
- }
143
- if (valor.tipo) {
144
- if (expressao.valor instanceof construtos_1.Literal && valor.tipo.includes('[]')) {
145
- this.erro(expressao.simbolo, `Atribuição inválida, esperado tipo '${valor.tipo}' na atribuição.`);
146
- return Promise.resolve();
147
- }
148
- if (expressao.valor instanceof construtos_1.Vetor && !valor.tipo.includes('[]')) {
149
- this.erro(expressao.simbolo, `Atribuição inválida, esperado tipo '${valor.tipo}' na atribuição.`);
150
- return Promise.resolve();
151
- }
152
- if (expressao.valor instanceof construtos_1.Literal) {
153
- let valorLiteral = typeof expressao.valor.valor;
154
- if (!['qualquer'].includes(valor.tipo)) {
155
- if (valorLiteral === 'string') {
156
- if (valor.tipo != 'texto') {
157
- this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
158
- return Promise.resolve();
159
- }
160
- }
161
- if (valorLiteral === 'number') {
162
- if (!['inteiro', 'real'].includes(valor.tipo)) {
163
- this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
164
- return Promise.resolve();
165
- }
166
- }
167
- }
168
- }
169
- if (expressao.valor instanceof construtos_1.Vetor) {
170
- let valores = expressao.valor.valores;
171
- if (!['qualquer[]'].includes(valor.tipo)) {
172
- if (valor.tipo === 'texto[]') {
173
- if (!valores.every((v) => typeof v.valor === 'string')) {
174
- this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
175
- return Promise.resolve();
176
- }
177
- }
178
- if (['inteiro[]', 'numero[]'].includes(valor.tipo)) {
179
- if (!valores.every((v) => typeof v.valor === 'number')) {
180
- this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
181
- return Promise.resolve();
182
- }
183
- }
184
- }
185
- }
186
- }
187
- if (valor.imutavel) {
188
- this.erro(expressao.simbolo, `Constante ${expressao.simbolo.lexema} não pode ser modificada.`);
189
- return Promise.resolve();
190
- }
191
- else {
192
- if (this.variaveis[expressao.simbolo.lexema]) {
193
- this.variaveis[expressao.simbolo.lexema].valor = expressao.valor;
194
- }
195
- }
196
- }
197
- async visitarDeclaracaoDeExpressao(declaracao) {
198
- return await declaracao.expressao.aceitar(this);
199
- }
200
- visitarDeclaracaoEscolha(declaracao) {
201
- var _a, _b;
202
- const identificadorOuLiteral = declaracao.identificadorOuLiteral;
203
- const valor = (_b = this.variaveis[(_a = identificadorOuLiteral.simbolo) === null || _a === void 0 ? void 0 : _a.lexema]) === null || _b === void 0 ? void 0 : _b.valor;
204
- const tipo = typeof valor;
205
- for (let caminho of declaracao.caminhos) {
206
- for (let condicao of caminho.condicoes) {
207
- if (valor instanceof declaracoes_1.Leia && typeof (condicao === null || condicao === void 0 ? void 0 : condicao.valor) !== 'string') {
208
- this.erro(condicao, `'caso ${condicao.valor}:' não é do mesmo tipo esperado em 'escolha'`);
209
- continue;
210
- }
211
- if (!(valor instanceof declaracoes_1.Leia) && typeof (condicao === null || condicao === void 0 ? void 0 : condicao.valor) !== tipo) {
212
- this.erro(condicao, `'caso ${condicao.valor}:' não é do mesmo tipo esperado em 'escolha'`);
213
- }
214
- }
215
- }
216
- return Promise.resolve();
217
- }
218
- visitarDeclaracaoEnquanto(declaracao) {
219
- return this.verificarCondicao(declaracao.condicao);
220
- }
221
- verificarCondicao(condicao) {
222
- if (condicao instanceof construtos_1.Agrupamento) {
223
- return this.verificarCondicao(condicao.expressao);
224
- }
225
- if (condicao instanceof construtos_1.Variavel) {
226
- return this.verificarVariavelBinaria(condicao);
227
- }
228
- if (condicao instanceof construtos_1.Binario) {
229
- return this.verificarBinario(condicao);
230
- }
231
- if (condicao instanceof construtos_1.Logico) {
232
- return this.verificarLogico(condicao);
233
- }
234
- if (condicao instanceof construtos_1.Chamada) {
235
- return this.verificarChamada(condicao);
236
- }
237
- return Promise.resolve();
238
- }
239
- verificarVariavelBinaria(variavel) {
240
- this.verificarVariavel(variavel);
241
- const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
242
- if (variavelHipotetica &&
243
- !(variavelHipotetica.valor instanceof construtos_1.Binario) &&
244
- typeof variavelHipotetica.valor !== 'boolean') {
245
- this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
246
- }
247
- return Promise.resolve();
248
- }
249
- verificarVariavel(variavel) {
250
- const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
251
- if (!variavelHipotetica) {
252
- this.erro(variavel.simbolo, `Variável ${variavel.simbolo.lexema} ainda não foi declarada até este ponto.`);
253
- }
254
- return Promise.resolve();
255
- }
256
- verificarBinario(binario) {
257
- this.verificarLadoBinario(binario.direita);
258
- this.verificarLadoBinario(binario.esquerda);
259
- this.verificarOperadorBinario(binario);
260
- return Promise.resolve();
261
- }
262
- verificarOperadorBinario(binario) {
263
- var _a, _b, _c;
264
- const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
265
- if (operadoresMatematicos.includes(binario.operador.tipo)) {
266
- if (binario.direita instanceof construtos_1.Variavel && binario.esquerda instanceof construtos_1.Variavel) {
267
- const tipoDireita = typeof ((_a = this.variaveis[binario.direita.simbolo.lexema]) === null || _a === void 0 ? void 0 : _a.valor);
268
- const tipoEsquerda = typeof ((_b = this.variaveis[binario.esquerda.simbolo.lexema]) === null || _b === void 0 ? void 0 : _b.valor);
269
- if (tipoDireita !== tipoEsquerda) {
270
- this.erro(binario.operador, `Operação inválida, tipos diferentes.`);
271
- }
272
- }
273
- }
274
- if (binario.operador.tipo === 'DIVISAO') {
275
- switch (binario.direita.constructor.name) {
276
- case 'Variavel':
277
- const operadorDireitoLiteral = binario.direita;
278
- if (((_c = this.variaveis[operadorDireitoLiteral.simbolo.lexema]) === null || _c === void 0 ? void 0 : _c.valor) === 0) {
279
- this.erro(binario.operador, `Divisão por zero.`);
280
- }
281
- break;
282
- }
283
- }
284
- }
285
- verificarLadoBinario(lado) {
286
- if (lado instanceof construtos_1.Variavel && !this.variaveis[lado.simbolo.lexema]) {
287
- this.erro(lado.simbolo, `Variável ${lado.simbolo.lexema} ainda não foi declarada até este ponto.`);
288
- return;
289
- }
290
- if (lado instanceof construtos_1.Binario) {
291
- this.verificarBinario(lado);
292
- return;
293
- }
294
- }
295
- verificarLogico(logio) {
296
- this.verificarLadoLogico(logio.direita);
297
- this.verificarLadoLogico(logio.esquerda);
298
- return Promise.resolve();
299
- }
300
- verificarChamada(chamada) {
301
- let funcaoChamada = chamada.entidadeChamada;
302
- if (!this.funcoes[funcaoChamada.simbolo.lexema]) {
303
- this.erro(funcaoChamada.simbolo, `Chamada da função '${funcaoChamada.simbolo.lexema}' não existe.`);
304
- }
305
- return Promise.resolve();
306
- }
307
- verificarLadoLogico(lado) {
308
- if (lado instanceof construtos_1.Variavel) {
309
- let variavel = lado;
310
- this.verificarVariavelBinaria(variavel);
311
- }
312
- }
313
- visitarDeclaracaoEscreva(declaracao) {
314
- var _a;
315
- if (declaracao.argumentos.length === 0) {
316
- const { linha, hashArquivo } = declaracao;
317
- const simbolo = { literal: '', tipo: '', lexema: 'escreva', linha, hashArquivo };
318
- this.erro(simbolo, `É preciso ter um ou mais parametros para 'escreva(...)'`);
319
- return Promise.resolve();
320
- }
321
- const variaveis = declaracao.argumentos.filter((arg) => arg instanceof construtos_1.Variavel);
322
- for (let variavel of variaveis) {
323
- if (!this.variaveis[variavel.simbolo.lexema]) {
324
- this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não existe.`);
325
- }
326
- if (((_a = this.variaveis[variavel.simbolo.lexema]) === null || _a === void 0 ? void 0 : _a.valor) === undefined) {
327
- this.aviso(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não foi inicializada.`);
328
- }
329
- }
330
- return Promise.resolve();
331
- }
332
- visitarDeclaracaoConst(declaracao) {
333
- this.verificarTipoAtribuido(declaracao);
334
- if (this.variaveis.hasOwnProperty(declaracao.simbolo.lexema)) {
335
- this.erro(declaracao.simbolo, 'Declaração de constante já feita.');
336
- }
337
- else {
338
- this.variaveis[declaracao.simbolo.lexema] = {
339
- imutavel: true,
340
- tipo: declaracao.tipo,
341
- valor: declaracao.inicializador.valor,
342
- };
343
- }
344
- this.virificarTipoDeclaracaoConst(declaracao);
345
- return Promise.resolve();
346
- }
347
- virificarTipoDeclaracaoConst(declaracao) {
348
- if (declaracao.inicializador instanceof construtos_1.Binario) {
349
- // verificar tipos iguais no lado esquerdo e direito
350
- const binario = declaracao.inicializador;
351
- this.verificarLadoBinario(binario.direita);
352
- this.verificarLadoBinario(binario.esquerda);
353
- const tipoDireita = typeof binario.direita.valor;
354
- const tipoEsquerda = typeof binario.esquerda.valor;
355
- if (tipoDireita !== tipoEsquerda) {
356
- this.aviso(declaracao.simbolo, 'Declaração de constante com tipos diferentes.');
357
- }
358
- }
359
- return Promise.resolve();
360
- }
361
- visitarDeclaracaoVar(declaracao) {
362
- this.verificarTipoAtribuido(declaracao);
363
- if (declaracao.inicializador instanceof construtos_1.FuncaoConstruto) {
364
- const funcao = declaracao.inicializador;
365
- if (funcao.parametros.length >= 255) {
366
- this.erro(declaracao.simbolo, 'Não pode haver mais de 255 parâmetros');
367
- }
368
- }
369
- this.variaveis[declaracao.simbolo.lexema] = {
370
- imutavel: false,
371
- tipo: declaracao.tipo,
372
- valor: declaracao.inicializador !== null
373
- ? declaracao.inicializador.valor !== undefined
374
- ? declaracao.inicializador.valor
375
- : declaracao.inicializador
376
- : undefined,
377
- };
378
- return Promise.resolve();
379
- }
380
- visitarExpressaoRetornar(declaracao) {
381
- return Promise.resolve(null);
382
- }
383
- visitarDeclaracaoDefinicaoFuncao(declaracao) {
384
- for (let parametro of declaracao.funcao.parametros) {
385
- if (parametro.hasOwnProperty('tipoDado') && !parametro.tipoDado.tipo) {
386
- this.erro(declaracao.simbolo, `O tipo '${parametro.tipoDado.tipoInvalido}' não é válido.`);
387
- }
388
- }
389
- if (declaracao.funcao.tipoRetorno === undefined) {
390
- this.erro(declaracao.simbolo, `Declaração de retorno da função é inválido.`);
391
- }
392
- if (declaracao.funcao.parametros.length >= 255) {
393
- this.erro(declaracao.simbolo, 'Não pode haver mais de 255 parâmetros');
394
- }
395
- let tipoRetornoFuncao = declaracao.funcao.tipoRetorno;
396
- if (tipoRetornoFuncao) {
397
- let funcaoContemRetorno = declaracao.funcao.corpo.find((c) => c instanceof declaracoes_1.Retorna);
398
- if (funcaoContemRetorno) {
399
- if (tipoRetornoFuncao === 'vazio') {
400
- this.erro(declaracao.simbolo, `A função não pode ter nenhum tipo de retorno.`);
401
- }
402
- const tipoValor = typeof funcaoContemRetorno.valor.valor;
403
- if (!['qualquer'].includes(tipoRetornoFuncao)) {
404
- if (tipoValor === 'string') {
405
- if (tipoRetornoFuncao != 'texto') {
406
- this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
407
- }
408
- }
409
- if (tipoValor === 'number') {
410
- if (!['inteiro', 'real'].includes(tipoRetornoFuncao)) {
411
- this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
412
- }
413
- }
414
- }
415
- }
416
- else {
417
- if (tipoRetornoFuncao !== 'vazio') {
418
- this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
419
- }
420
- }
421
- }
422
- this.funcoes[declaracao.simbolo.lexema] = {
423
- valor: declaracao.funcao,
424
- };
425
- return Promise.resolve();
426
- }
427
- analisar(declaracoes) {
428
- // this.pilhaVariaveis = new PilhaVariaveis();
429
- // this.pilhaVariaveis.empilhar()
430
- this.variaveis = {};
431
- this.atual = 0;
432
- this.diagnosticos = [];
433
- while (this.atual < declaracoes.length) {
434
- declaracoes[this.atual].aceitar(this);
435
- this.atual++;
436
- }
437
- return {
438
- diagnosticos: this.diagnosticos,
439
- };
440
- }
441
- }
442
- exports.AnalisadorSemantico = AnalisadorSemantico;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AnalisadorSemantico = void 0;
4
+ const construtos_1 = require("../construtos");
5
+ const declaracoes_1 = require("../declaracoes");
6
+ const erros_1 = require("../interfaces/erros");
7
+ const analisador_semantico_base_1 = require("./analisador-semantico-base");
8
+ const pilha_variaveis_1 = require("./pilha-variaveis");
9
+ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemanticoBase {
10
+ constructor() {
11
+ super();
12
+ this.pilhaVariaveis = new pilha_variaveis_1.PilhaVariaveis();
13
+ this.variaveis = {};
14
+ this.funcoes = {};
15
+ this.atual = 0;
16
+ this.diagnosticos = [];
17
+ }
18
+ erro(simbolo, mensagem) {
19
+ this.diagnosticos.push({
20
+ simbolo: simbolo,
21
+ mensagem: mensagem,
22
+ hashArquivo: simbolo.hashArquivo,
23
+ linha: simbolo.linha,
24
+ severidade: erros_1.DiagnosticoSeveridade.ERRO,
25
+ });
26
+ }
27
+ aviso(simbolo, mensagem) {
28
+ this.diagnosticos.push({
29
+ simbolo: simbolo,
30
+ mensagem: mensagem,
31
+ hashArquivo: simbolo.hashArquivo,
32
+ linha: simbolo.linha,
33
+ severidade: erros_1.DiagnosticoSeveridade.AVISO,
34
+ });
35
+ }
36
+ verificarTipoAtribuido(declaracao) {
37
+ if (declaracao.tipo) {
38
+ if (['vetor', 'qualquer[]', 'inteiro[]', 'texto[]'].includes(declaracao.tipo)) {
39
+ if (declaracao.inicializador instanceof construtos_1.Vetor) {
40
+ const vetor = declaracao.inicializador;
41
+ if (declaracao.tipo === 'inteiro[]') {
42
+ const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
43
+ if (v) {
44
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'inteiros' ou 'real'.`);
45
+ }
46
+ }
47
+ if (declaracao.tipo === 'texto[]') {
48
+ const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
49
+ if (v) {
50
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'texto'.`);
51
+ }
52
+ }
53
+ }
54
+ else {
55
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de elementos.`);
56
+ }
57
+ }
58
+ if (declaracao.inicializador instanceof construtos_1.Literal) {
59
+ const literal = declaracao.inicializador;
60
+ if (declaracao.tipo === 'texto') {
61
+ if (typeof literal.valor !== 'string') {
62
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um 'texto'.`);
63
+ }
64
+ }
65
+ if (['inteiro', 'real'].includes(declaracao.tipo)) {
66
+ if (typeof literal.valor !== 'number') {
67
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um 'número'.`);
68
+ }
69
+ }
70
+ }
71
+ if (declaracao.inicializador instanceof declaracoes_1.Leia) {
72
+ if (declaracao.tipo !== 'texto') {
73
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', Leia só pode receber tipo 'texto'.`);
74
+ }
75
+ }
76
+ }
77
+ }
78
+ visitarExpressaoTipoDe(expressao) {
79
+ return this.verificarTipoDe(expressao.valor);
80
+ }
81
+ verificarTipoDe(valor) {
82
+ if (valor instanceof construtos_1.Binario) {
83
+ this.verificarTipoDe(valor.direita);
84
+ this.verificarTipoDe(valor.esquerda);
85
+ }
86
+ if (valor instanceof construtos_1.Agrupamento) {
87
+ return this.verificarTipoDe(valor.expressao);
88
+ }
89
+ if (valor instanceof construtos_1.Variavel) {
90
+ return this.verificarVariavel(valor);
91
+ }
92
+ return Promise.resolve();
93
+ }
94
+ visitarExpressaoFalhar(expressao) {
95
+ return this.verificarFalhar(expressao.explicacao);
96
+ }
97
+ verificarFalhar(valor) {
98
+ if (valor instanceof construtos_1.Binario) {
99
+ this.verificarFalhar(valor.direita);
100
+ this.verificarFalhar(valor.esquerda);
101
+ }
102
+ if (valor instanceof construtos_1.Agrupamento) {
103
+ return this.verificarFalhar(valor.expressao);
104
+ }
105
+ if (valor instanceof construtos_1.Variavel) {
106
+ return this.verificarVariavel(valor);
107
+ }
108
+ return Promise.resolve();
109
+ }
110
+ visitarExpressaoDeChamada(expressao) {
111
+ var _a, _b;
112
+ if (expressao.entidadeChamada instanceof construtos_1.Variavel) {
113
+ const variavel = expressao.entidadeChamada;
114
+ const funcaoChamada = this.variaveis[variavel.simbolo.lexema] || this.funcoes[variavel.simbolo.lexema];
115
+ if (!funcaoChamada) {
116
+ this.erro(expressao.entidadeChamada.simbolo, `Chamada da função '${expressao.entidadeChamada.simbolo.lexema}' não existe.`);
117
+ return Promise.resolve();
118
+ }
119
+ const funcao = funcaoChamada.valor;
120
+ if (funcao.parametros.length !== expressao.argumentos.length) {
121
+ this.erro(expressao.entidadeChamada.simbolo, `Função '${expressao.entidadeChamada.simbolo.lexema}' espera ${funcao.parametros.length} parametros.`);
122
+ }
123
+ for (let [indice, arg0] of funcao.parametros.entries()) {
124
+ const arg1 = expressao.argumentos[indice];
125
+ if (arg1) {
126
+ if (((_a = arg0.tipoDado) === null || _a === void 0 ? void 0 : _a.tipo) === 'texto' && typeof arg1.valor !== 'string') {
127
+ this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
128
+ }
129
+ else if (['inteiro', 'real'].includes((_b = arg0.tipoDado) === null || _b === void 0 ? void 0 : _b.tipo) && typeof arg1.valor !== 'number') {
130
+ this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
131
+ }
132
+ }
133
+ }
134
+ }
135
+ return Promise.resolve();
136
+ }
137
+ visitarExpressaoDeAtribuicao(expressao) {
138
+ let valor = this.variaveis[expressao.simbolo.lexema];
139
+ if (!valor) {
140
+ this.erro(expressao.simbolo, `Variável ${expressao.simbolo.lexema} ainda não foi declarada até este ponto.`);
141
+ return Promise.resolve();
142
+ }
143
+ if (valor.tipo) {
144
+ if (expressao.valor instanceof construtos_1.Literal && valor.tipo.includes('[]')) {
145
+ this.erro(expressao.simbolo, `Atribuição inválida, esperado tipo '${valor.tipo}' na atribuição.`);
146
+ return Promise.resolve();
147
+ }
148
+ if (expressao.valor instanceof construtos_1.Vetor && !valor.tipo.includes('[]')) {
149
+ this.erro(expressao.simbolo, `Atribuição inválida, esperado tipo '${valor.tipo}' na atribuição.`);
150
+ return Promise.resolve();
151
+ }
152
+ if (expressao.valor instanceof construtos_1.Literal) {
153
+ let valorLiteral = typeof expressao.valor.valor;
154
+ if (!['qualquer'].includes(valor.tipo)) {
155
+ if (valorLiteral === 'string') {
156
+ if (valor.tipo != 'texto') {
157
+ this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
158
+ return Promise.resolve();
159
+ }
160
+ }
161
+ if (valorLiteral === 'number') {
162
+ if (!['inteiro', 'real'].includes(valor.tipo)) {
163
+ this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
164
+ return Promise.resolve();
165
+ }
166
+ }
167
+ }
168
+ }
169
+ if (expressao.valor instanceof construtos_1.Vetor) {
170
+ let valores = expressao.valor.valores;
171
+ if (!['qualquer[]'].includes(valor.tipo)) {
172
+ if (valor.tipo === 'texto[]') {
173
+ if (!valores.every((v) => typeof v.valor === 'string')) {
174
+ this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
175
+ return Promise.resolve();
176
+ }
177
+ }
178
+ if (['inteiro[]', 'numero[]'].includes(valor.tipo)) {
179
+ if (!valores.every((v) => typeof v.valor === 'number')) {
180
+ this.erro(expressao.simbolo, `Esperado tipo '${valor.tipo}' na atribuição.`);
181
+ return Promise.resolve();
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ if (valor.imutavel) {
188
+ this.erro(expressao.simbolo, `Constante ${expressao.simbolo.lexema} não pode ser modificada.`);
189
+ return Promise.resolve();
190
+ }
191
+ else {
192
+ if (this.variaveis[expressao.simbolo.lexema]) {
193
+ this.variaveis[expressao.simbolo.lexema].valor = expressao.valor;
194
+ }
195
+ }
196
+ }
197
+ async visitarDeclaracaoDeExpressao(declaracao) {
198
+ return await declaracao.expressao.aceitar(this);
199
+ }
200
+ visitarDeclaracaoEscolha(declaracao) {
201
+ var _a, _b;
202
+ const identificadorOuLiteral = declaracao.identificadorOuLiteral;
203
+ const valor = (_b = this.variaveis[(_a = identificadorOuLiteral.simbolo) === null || _a === void 0 ? void 0 : _a.lexema]) === null || _b === void 0 ? void 0 : _b.valor;
204
+ const tipo = typeof valor;
205
+ for (let caminho of declaracao.caminhos) {
206
+ for (let condicao of caminho.condicoes) {
207
+ if (valor instanceof declaracoes_1.Leia && typeof (condicao === null || condicao === void 0 ? void 0 : condicao.valor) !== 'string') {
208
+ this.erro(condicao, `'caso ${condicao.valor}:' não é do mesmo tipo esperado em 'escolha'`);
209
+ continue;
210
+ }
211
+ if (!(valor instanceof declaracoes_1.Leia) && typeof (condicao === null || condicao === void 0 ? void 0 : condicao.valor) !== tipo) {
212
+ this.erro(condicao, `'caso ${condicao.valor}:' não é do mesmo tipo esperado em 'escolha'`);
213
+ }
214
+ }
215
+ }
216
+ return Promise.resolve();
217
+ }
218
+ visitarDeclaracaoEnquanto(declaracao) {
219
+ return this.verificarCondicao(declaracao.condicao);
220
+ }
221
+ verificarCondicao(condicao) {
222
+ if (condicao instanceof construtos_1.Agrupamento) {
223
+ return this.verificarCondicao(condicao.expressao);
224
+ }
225
+ if (condicao instanceof construtos_1.Variavel) {
226
+ return this.verificarVariavelBinaria(condicao);
227
+ }
228
+ if (condicao instanceof construtos_1.Binario) {
229
+ return this.verificarBinario(condicao);
230
+ }
231
+ if (condicao instanceof construtos_1.Logico) {
232
+ return this.verificarLogico(condicao);
233
+ }
234
+ if (condicao instanceof construtos_1.Chamada) {
235
+ return this.verificarChamada(condicao);
236
+ }
237
+ return Promise.resolve();
238
+ }
239
+ verificarVariavelBinaria(variavel) {
240
+ this.verificarVariavel(variavel);
241
+ const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
242
+ if (variavelHipotetica &&
243
+ !(variavelHipotetica.valor instanceof construtos_1.Binario) &&
244
+ typeof variavelHipotetica.valor !== 'boolean') {
245
+ this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
246
+ }
247
+ return Promise.resolve();
248
+ }
249
+ verificarVariavel(variavel) {
250
+ const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
251
+ if (!variavelHipotetica) {
252
+ this.erro(variavel.simbolo, `Variável ${variavel.simbolo.lexema} ainda não foi declarada até este ponto.`);
253
+ }
254
+ return Promise.resolve();
255
+ }
256
+ verificarBinario(binario) {
257
+ this.verificarLadoBinario(binario.direita);
258
+ this.verificarLadoBinario(binario.esquerda);
259
+ this.verificarOperadorBinario(binario);
260
+ return Promise.resolve();
261
+ }
262
+ verificarOperadorBinario(binario) {
263
+ var _a, _b, _c;
264
+ const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
265
+ if (operadoresMatematicos.includes(binario.operador.tipo)) {
266
+ if (binario.direita instanceof construtos_1.Variavel && binario.esquerda instanceof construtos_1.Variavel) {
267
+ const tipoDireita = typeof ((_a = this.variaveis[binario.direita.simbolo.lexema]) === null || _a === void 0 ? void 0 : _a.valor);
268
+ const tipoEsquerda = typeof ((_b = this.variaveis[binario.esquerda.simbolo.lexema]) === null || _b === void 0 ? void 0 : _b.valor);
269
+ if (tipoDireita !== tipoEsquerda) {
270
+ this.erro(binario.operador, `Operação inválida, tipos diferentes.`);
271
+ }
272
+ }
273
+ }
274
+ if (binario.operador.tipo === 'DIVISAO') {
275
+ switch (binario.direita.constructor.name) {
276
+ case 'Variavel':
277
+ const operadorDireitoLiteral = binario.direita;
278
+ if (((_c = this.variaveis[operadorDireitoLiteral.simbolo.lexema]) === null || _c === void 0 ? void 0 : _c.valor) === 0) {
279
+ this.erro(binario.operador, `Divisão por zero.`);
280
+ }
281
+ break;
282
+ }
283
+ }
284
+ }
285
+ verificarLadoBinario(lado) {
286
+ if (lado instanceof construtos_1.Variavel && !this.variaveis[lado.simbolo.lexema]) {
287
+ this.erro(lado.simbolo, `Variável ${lado.simbolo.lexema} ainda não foi declarada até este ponto.`);
288
+ return;
289
+ }
290
+ if (lado instanceof construtos_1.Binario) {
291
+ this.verificarBinario(lado);
292
+ return;
293
+ }
294
+ }
295
+ verificarLogico(logio) {
296
+ this.verificarLadoLogico(logio.direita);
297
+ this.verificarLadoLogico(logio.esquerda);
298
+ return Promise.resolve();
299
+ }
300
+ verificarChamada(chamada) {
301
+ let funcaoChamada = chamada.entidadeChamada;
302
+ if (!this.funcoes[funcaoChamada.simbolo.lexema]) {
303
+ this.erro(funcaoChamada.simbolo, `Chamada da função '${funcaoChamada.simbolo.lexema}' não existe.`);
304
+ }
305
+ return Promise.resolve();
306
+ }
307
+ verificarLadoLogico(lado) {
308
+ if (lado instanceof construtos_1.Variavel) {
309
+ let variavel = lado;
310
+ this.verificarVariavelBinaria(variavel);
311
+ }
312
+ }
313
+ visitarDeclaracaoEscreva(declaracao) {
314
+ var _a;
315
+ if (declaracao.argumentos.length === 0) {
316
+ const { linha, hashArquivo } = declaracao;
317
+ const simbolo = { literal: '', tipo: '', lexema: 'escreva', linha, hashArquivo };
318
+ this.erro(simbolo, `É preciso ter um ou mais parametros para 'escreva(...)'`);
319
+ return Promise.resolve();
320
+ }
321
+ const variaveis = declaracao.argumentos.filter((arg) => arg instanceof construtos_1.Variavel);
322
+ for (let variavel of variaveis) {
323
+ if (!this.variaveis[variavel.simbolo.lexema]) {
324
+ this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não existe.`);
325
+ }
326
+ if (((_a = this.variaveis[variavel.simbolo.lexema]) === null || _a === void 0 ? void 0 : _a.valor) === undefined) {
327
+ this.aviso(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não foi inicializada.`);
328
+ }
329
+ }
330
+ return Promise.resolve();
331
+ }
332
+ visitarDeclaracaoConst(declaracao) {
333
+ this.verificarTipoAtribuido(declaracao);
334
+ if (this.variaveis.hasOwnProperty(declaracao.simbolo.lexema)) {
335
+ this.erro(declaracao.simbolo, 'Declaração de constante já feita.');
336
+ }
337
+ else {
338
+ this.variaveis[declaracao.simbolo.lexema] = {
339
+ imutavel: true,
340
+ tipo: declaracao.tipo,
341
+ valor: declaracao.inicializador.valor,
342
+ };
343
+ }
344
+ this.virificarTipoDeclaracaoConst(declaracao);
345
+ return Promise.resolve();
346
+ }
347
+ virificarTipoDeclaracaoConst(declaracao) {
348
+ if (declaracao.inicializador instanceof construtos_1.Binario) {
349
+ // verificar tipos iguais no lado esquerdo e direito
350
+ const binario = declaracao.inicializador;
351
+ this.verificarLadoBinario(binario.direita);
352
+ this.verificarLadoBinario(binario.esquerda);
353
+ const tipoDireita = typeof binario.direita.valor;
354
+ const tipoEsquerda = typeof binario.esquerda.valor;
355
+ if (tipoDireita !== tipoEsquerda) {
356
+ this.aviso(declaracao.simbolo, 'Declaração de constante com tipos diferentes.');
357
+ }
358
+ }
359
+ return Promise.resolve();
360
+ }
361
+ visitarDeclaracaoVar(declaracao) {
362
+ this.verificarTipoAtribuido(declaracao);
363
+ if (declaracao.inicializador instanceof construtos_1.FuncaoConstruto) {
364
+ const funcao = declaracao.inicializador;
365
+ if (funcao.parametros.length >= 255) {
366
+ this.erro(declaracao.simbolo, 'Não pode haver mais de 255 parâmetros');
367
+ }
368
+ }
369
+ this.variaveis[declaracao.simbolo.lexema] = {
370
+ imutavel: false,
371
+ tipo: declaracao.tipo,
372
+ valor: declaracao.inicializador !== null
373
+ ? declaracao.inicializador.valor !== undefined
374
+ ? declaracao.inicializador.valor
375
+ : declaracao.inicializador
376
+ : undefined,
377
+ };
378
+ return Promise.resolve();
379
+ }
380
+ visitarExpressaoRetornar(declaracao) {
381
+ return Promise.resolve(null);
382
+ }
383
+ visitarDeclaracaoDefinicaoFuncao(declaracao) {
384
+ for (let parametro of declaracao.funcao.parametros) {
385
+ if (parametro.hasOwnProperty('tipoDado') && !parametro.tipoDado.tipo) {
386
+ this.erro(declaracao.simbolo, `O tipo '${parametro.tipoDado.tipoInvalido}' não é válido.`);
387
+ }
388
+ }
389
+ if (declaracao.funcao.tipoRetorno === undefined) {
390
+ this.erro(declaracao.simbolo, `Declaração de retorno da função é inválido.`);
391
+ }
392
+ if (declaracao.funcao.parametros.length >= 255) {
393
+ this.erro(declaracao.simbolo, 'Não pode haver mais de 255 parâmetros');
394
+ }
395
+ let tipoRetornoFuncao = declaracao.funcao.tipoRetorno;
396
+ if (tipoRetornoFuncao) {
397
+ let funcaoContemRetorno = declaracao.funcao.corpo.find((c) => c instanceof declaracoes_1.Retorna);
398
+ if (funcaoContemRetorno) {
399
+ if (tipoRetornoFuncao === 'vazio') {
400
+ this.erro(declaracao.simbolo, `A função não pode ter nenhum tipo de retorno.`);
401
+ }
402
+ const tipoValor = typeof funcaoContemRetorno.valor.valor;
403
+ if (!['qualquer'].includes(tipoRetornoFuncao)) {
404
+ if (tipoValor === 'string') {
405
+ if (tipoRetornoFuncao != 'texto') {
406
+ this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
407
+ }
408
+ }
409
+ if (tipoValor === 'number') {
410
+ if (!['inteiro', 'real'].includes(tipoRetornoFuncao)) {
411
+ this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
412
+ }
413
+ }
414
+ }
415
+ }
416
+ else {
417
+ if (tipoRetornoFuncao !== 'vazio') {
418
+ this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
419
+ }
420
+ }
421
+ }
422
+ this.funcoes[declaracao.simbolo.lexema] = {
423
+ valor: declaracao.funcao,
424
+ };
425
+ return Promise.resolve();
426
+ }
427
+ analisar(declaracoes) {
428
+ // this.pilhaVariaveis = new PilhaVariaveis();
429
+ // this.pilhaVariaveis.empilhar()
430
+ this.variaveis = {};
431
+ this.atual = 0;
432
+ this.diagnosticos = [];
433
+ while (this.atual < declaracoes.length) {
434
+ declaracoes[this.atual].aceitar(this);
435
+ this.atual++;
436
+ }
437
+ return {
438
+ diagnosticos: this.diagnosticos,
439
+ };
440
+ }
441
+ }
442
+ exports.AnalisadorSemantico = AnalisadorSemantico;
443
443
  //# sourceMappingURL=analisador-semantico.js.map