@designliquido/delegua 0.36.1 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (534) 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 +90 -69
  11. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  12. package/avaliador-sintatico/avaliador-sintatico-base.js +232 -223
  13. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  14. package/avaliador-sintatico/avaliador-sintatico.d.ts +118 -126
  15. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  16. package/avaliador-sintatico/avaliador-sintatico.js +1041 -1093
  17. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +73 -73
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +648 -648
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +27 -21
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +156 -149
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +87 -87
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +770 -770
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +34 -34
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +168 -168
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  31. package/avaliador-sintatico/dialetos/index.d.ts +3 -3
  32. package/avaliador-sintatico/dialetos/index.js +19 -19
  33. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
  34. package/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
  35. package/avaliador-sintatico/index.d.ts +6 -6
  36. package/avaliador-sintatico/index.js +22 -22
  37. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts +27 -27
  38. package/avaliador-sintatico/micro-avaliador-sintatico-base.js +116 -116
  39. package/avaliador-sintatico/micro-avaliador-sintatico-base.js.map +1 -1
  40. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts +21 -33
  41. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  42. package/avaliador-sintatico/micro-avaliador-sintatico.js +204 -287
  43. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  44. package/avaliador-sintatico/retornos/index.d.ts +3 -3
  45. package/avaliador-sintatico/retornos/index.js +19 -19
  46. package/avaliador-sintatico/retornos/retorno-declaracao.d.ts +3 -3
  47. package/avaliador-sintatico/retornos/retorno-declaracao.js +2 -2
  48. package/avaliador-sintatico/retornos/retorno-primario.d.ts +3 -3
  49. package/avaliador-sintatico/retornos/retorno-primario.js +2 -2
  50. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.d.ts +2 -2
  51. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.js +2 -2
  52. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +59 -59
  53. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +150 -150
  54. package/bibliotecas/biblioteca-global.d.ts +157 -157
  55. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  56. package/bibliotecas/biblioteca-global.js +487 -498
  57. package/bibliotecas/biblioteca-global.js.map +1 -1
  58. package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts +1 -1
  59. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +236 -236
  60. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
  61. package/bibliotecas/dialetos/egua-classico/index.d.ts +2 -2
  62. package/bibliotecas/dialetos/egua-classico/index.js +32 -32
  63. package/bibliotecas/dialetos/egua-classico/index.js.map +1 -1
  64. package/bibliotecas/dialetos/egua-classico/matematica.d.ts +1 -1
  65. package/bibliotecas/dialetos/egua-classico/matematica.js +541 -541
  66. package/bibliotecas/dialetos/egua-classico/matematica.js.map +1 -1
  67. package/bibliotecas/dialetos/egua-classico/tempo.d.ts +1 -1
  68. package/bibliotecas/dialetos/egua-classico/tempo.js +39 -39
  69. package/bibliotecas/dialetos/egua-classico/tempo.js.map +1 -1
  70. package/bibliotecas/dialetos/egua-classico/textos.d.ts +8 -8
  71. package/bibliotecas/dialetos/egua-classico/textos.js +201 -201
  72. package/bibliotecas/dialetos/egua-classico/textos.js.map +1 -1
  73. package/bibliotecas/primitivas-dicionario.d.ts +6 -6
  74. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  75. package/bibliotecas/primitivas-dicionario.js +10 -10
  76. package/bibliotecas/primitivas-numero.d.ts +6 -6
  77. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  78. package/bibliotecas/primitivas-numero.js +10 -10
  79. package/bibliotecas/primitivas-texto.d.ts +17 -17
  80. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  81. package/bibliotecas/primitivas-texto.js +22 -22
  82. package/bibliotecas/primitivas-texto.js.map +1 -1
  83. package/bibliotecas/primitivas-vetor.d.ts +21 -21
  84. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  85. package/bibliotecas/primitivas-vetor.js +88 -90
  86. package/bibliotecas/primitivas-vetor.js.map +1 -1
  87. package/bin/package.json +13 -12
  88. package/construtos/acesso-elemento-matriz.d.ts +12 -12
  89. package/construtos/acesso-elemento-matriz.js +17 -17
  90. package/construtos/acesso-indice-variavel.d.ts +15 -15
  91. package/construtos/acesso-indice-variavel.js +20 -20
  92. package/construtos/acesso-metodo-ou-propriedade.d.ts +14 -14
  93. package/construtos/acesso-metodo-ou-propriedade.js +19 -19
  94. package/construtos/agrupamento.d.ts +14 -14
  95. package/construtos/agrupamento.js +19 -19
  96. package/construtos/atribuicao-por-indice.d.ts +11 -11
  97. package/construtos/atribuicao-por-indice.js +16 -16
  98. package/construtos/atribuicao-por-indices-matriz.d.ts +12 -12
  99. package/construtos/atribuicao-por-indices-matriz.js +17 -17
  100. package/construtos/atribuir.d.ts +15 -15
  101. package/construtos/atribuir.js +24 -24
  102. package/construtos/atribuir.js.map +1 -1
  103. package/construtos/binario.d.ts +33 -33
  104. package/construtos/binario.d.ts.map +1 -1
  105. package/construtos/binario.js +38 -38
  106. package/construtos/binario.js.map +1 -1
  107. package/construtos/chamada.d.ts +15 -15
  108. package/construtos/chamada.d.ts.map +1 -1
  109. package/construtos/chamada.js +21 -21
  110. package/construtos/chamada.js.map +1 -1
  111. package/construtos/comentario.d.ts +15 -15
  112. package/construtos/comentario.js +20 -20
  113. package/construtos/constante.d.ts +12 -12
  114. package/construtos/constante.d.ts.map +1 -1
  115. package/construtos/constante.js +17 -17
  116. package/construtos/constante.js.map +1 -1
  117. package/construtos/construto.d.ts +7 -7
  118. package/construtos/construto.js +2 -2
  119. package/construtos/decorador.d.ts +18 -14
  120. package/construtos/decorador.d.ts.map +1 -1
  121. package/construtos/decorador.js +19 -19
  122. package/construtos/decorador.js.map +1 -1
  123. package/construtos/definir-valor.d.ts +11 -11
  124. package/construtos/definir-valor.js +16 -16
  125. package/construtos/dicionario.d.ts +10 -10
  126. package/construtos/dicionario.js +15 -15
  127. package/construtos/expressao-regular.d.ts +10 -10
  128. package/construtos/expressao-regular.d.ts.map +1 -1
  129. package/construtos/expressao-regular.js +15 -15
  130. package/construtos/expressao-regular.js.map +1 -1
  131. package/construtos/fim-para.d.ts +22 -22
  132. package/construtos/fim-para.js +25 -25
  133. package/construtos/formatacao-escrita.d.ts +16 -16
  134. package/construtos/formatacao-escrita.js +21 -21
  135. package/construtos/funcao.d.ts +12 -12
  136. package/construtos/funcao.js +16 -16
  137. package/construtos/index.d.ts +29 -29
  138. package/construtos/index.js +45 -45
  139. package/construtos/isto.d.ts +9 -9
  140. package/construtos/isto.js +14 -14
  141. package/construtos/literal.d.ts +10 -10
  142. package/construtos/literal.js +14 -14
  143. package/construtos/logico.d.ts +11 -11
  144. package/construtos/logico.js +16 -16
  145. package/construtos/qual-tipo.d.ts +11 -11
  146. package/construtos/qual-tipo.d.ts.map +1 -1
  147. package/construtos/qual-tipo.js +16 -16
  148. package/construtos/qual-tipo.js.map +1 -1
  149. package/construtos/super.d.ts +10 -10
  150. package/construtos/super.js +15 -15
  151. package/construtos/tipo-de.d.ts +10 -10
  152. package/construtos/tipo-de.d.ts.map +1 -1
  153. package/construtos/tipo-de.js +15 -15
  154. package/construtos/tipo-de.js.map +1 -1
  155. package/construtos/tuplas/deceto.d.ts +18 -18
  156. package/construtos/tuplas/deceto.js +32 -32
  157. package/construtos/tuplas/dupla.d.ts +6 -6
  158. package/construtos/tuplas/dupla.js +12 -12
  159. package/construtos/tuplas/index.d.ts +13 -13
  160. package/construtos/tuplas/index.js +67 -67
  161. package/construtos/tuplas/index.js.map +1 -1
  162. package/construtos/tuplas/noneto.d.ts +15 -15
  163. package/construtos/tuplas/noneto.js +25 -25
  164. package/construtos/tuplas/octeto.d.ts +14 -14
  165. package/construtos/tuplas/octeto.js +24 -24
  166. package/construtos/tuplas/quarteto.d.ts +8 -8
  167. package/construtos/tuplas/quarteto.js +14 -14
  168. package/construtos/tuplas/quinteto.d.ts +9 -9
  169. package/construtos/tuplas/quinteto.js +15 -15
  170. package/construtos/tuplas/septeto.d.ts +13 -13
  171. package/construtos/tuplas/septeto.js +23 -23
  172. package/construtos/tuplas/sexteto.d.ts +10 -10
  173. package/construtos/tuplas/sexteto.js +16 -16
  174. package/construtos/tuplas/trio.d.ts +7 -7
  175. package/construtos/tuplas/trio.js +13 -13
  176. package/construtos/tuplas/tupla.d.ts +8 -8
  177. package/construtos/tuplas/tupla.js +9 -9
  178. package/construtos/unario.d.ts +11 -11
  179. package/construtos/unario.js +16 -16
  180. package/construtos/variavel.d.ts +9 -9
  181. package/construtos/variavel.d.ts.map +1 -1
  182. package/construtos/variavel.js +14 -14
  183. package/construtos/variavel.js.map +1 -1
  184. package/construtos/vetor.d.ts +11 -11
  185. package/construtos/vetor.js +21 -21
  186. package/construtos/vetor.js.map +1 -1
  187. package/declaracoes/aleatorio.d.ts +15 -15
  188. package/declaracoes/aleatorio.js +15 -15
  189. package/declaracoes/bloco.d.ts +7 -7
  190. package/declaracoes/bloco.js +14 -14
  191. package/declaracoes/cabecalho-programa.d.ts +7 -7
  192. package/declaracoes/cabecalho-programa.js +14 -14
  193. package/declaracoes/classe.d.ts +14 -14
  194. package/declaracoes/classe.js +18 -18
  195. package/declaracoes/const-multiplo.d.ts +14 -14
  196. package/declaracoes/const-multiplo.js +19 -19
  197. package/declaracoes/const.d.ts +14 -14
  198. package/declaracoes/const.d.ts.map +1 -1
  199. package/declaracoes/const.js +19 -19
  200. package/declaracoes/const.js.map +1 -1
  201. package/declaracoes/continua.d.ts +6 -6
  202. package/declaracoes/continua.js +13 -13
  203. package/declaracoes/declaracao.d.ts +10 -8
  204. package/declaracoes/declaracao.d.ts.map +1 -1
  205. package/declaracoes/declaracao.js +18 -17
  206. package/declaracoes/declaracao.js.map +1 -1
  207. package/declaracoes/enquanto.d.ts +10 -10
  208. package/declaracoes/enquanto.js +15 -15
  209. package/declaracoes/escolha.d.ts +14 -14
  210. package/declaracoes/escolha.js +19 -19
  211. package/declaracoes/escreva-mesma-linha.d.ts +8 -8
  212. package/declaracoes/escreva-mesma-linha.js +14 -14
  213. package/declaracoes/escreva.d.ts +8 -8
  214. package/declaracoes/escreva.js +14 -14
  215. package/declaracoes/expressao.d.ts +8 -8
  216. package/declaracoes/expressao.d.ts.map +1 -1
  217. package/declaracoes/expressao.js +14 -14
  218. package/declaracoes/expressao.js.map +1 -1
  219. package/declaracoes/falhar.d.ts +8 -8
  220. package/declaracoes/falhar.js +15 -15
  221. package/declaracoes/fazer.d.ts +10 -10
  222. package/declaracoes/fazer.js +15 -15
  223. package/declaracoes/funcao.d.ts +11 -11
  224. package/declaracoes/funcao.js +17 -17
  225. package/declaracoes/importar.d.ts +9 -9
  226. package/declaracoes/importar.js +15 -15
  227. package/declaracoes/index.d.ts +31 -31
  228. package/declaracoes/index.js +47 -47
  229. package/declaracoes/inicio-algoritmo.d.ts +6 -6
  230. package/declaracoes/inicio-algoritmo.js +13 -13
  231. package/declaracoes/leia-multiplo.d.ts +14 -14
  232. package/declaracoes/leia-multiplo.js +21 -21
  233. package/declaracoes/leia.d.ts +17 -17
  234. package/declaracoes/leia.js +21 -21
  235. package/declaracoes/para-cada.d.ts +11 -11
  236. package/declaracoes/para-cada.js +17 -17
  237. package/declaracoes/para.d.ts +19 -19
  238. package/declaracoes/para.js +24 -24
  239. package/declaracoes/propriedade-classe.d.ts +10 -10
  240. package/declaracoes/propriedade-classe.js +16 -16
  241. package/declaracoes/retorna.d.ts +8 -8
  242. package/declaracoes/retorna.js +15 -15
  243. package/declaracoes/se.d.ts +11 -11
  244. package/declaracoes/se.js +17 -17
  245. package/declaracoes/sustar.d.ts +6 -6
  246. package/declaracoes/sustar.js +13 -13
  247. package/declaracoes/tendo-como.d.ts +16 -16
  248. package/declaracoes/tendo-como.d.ts.map +1 -1
  249. package/declaracoes/tendo-como.js +21 -21
  250. package/declaracoes/tendo-como.js.map +1 -1
  251. package/declaracoes/tente.d.ts +14 -14
  252. package/declaracoes/tente.js +20 -20
  253. package/declaracoes/var-multiplo.d.ts +15 -15
  254. package/declaracoes/var-multiplo.js +20 -20
  255. package/declaracoes/var.d.ts +16 -16
  256. package/declaracoes/var.d.ts.map +1 -1
  257. package/declaracoes/var.js +21 -21
  258. package/declaracoes/var.js.map +1 -1
  259. package/depuracao/cyrb53.d.ts +9 -9
  260. package/depuracao/cyrb53.js +22 -22
  261. package/depuracao/cyrb53.js.map +1 -1
  262. package/depuracao/index.d.ts +2 -2
  263. package/depuracao/index.js +23 -23
  264. package/depuracao/ponto-parada.d.ts +4 -4
  265. package/depuracao/ponto-parada.js +2 -2
  266. package/espaco-variaveis.d.ts +19 -19
  267. package/espaco-variaveis.js +19 -19
  268. package/estruturas/chamavel.d.ts +7 -7
  269. package/estruturas/chamavel.d.ts.map +1 -1
  270. package/estruturas/chamavel.js +12 -12
  271. package/estruturas/chamavel.js.map +1 -1
  272. package/estruturas/classe-padrao.d.ts +31 -31
  273. package/estruturas/classe-padrao.d.ts.map +1 -1
  274. package/estruturas/classe-padrao.js +39 -39
  275. package/estruturas/delegua-funcao.d.ts +29 -29
  276. package/estruturas/delegua-funcao.d.ts.map +1 -1
  277. package/estruturas/delegua-funcao.js +140 -141
  278. package/estruturas/delegua-funcao.js.map +1 -1
  279. package/estruturas/descritor-tipo-classe.d.ts +37 -37
  280. package/estruturas/descritor-tipo-classe.js +79 -79
  281. package/estruturas/descritor-tipo-classe.js.map +1 -1
  282. package/estruturas/funcao-padrao.d.ts +23 -23
  283. package/estruturas/funcao-padrao.js +34 -34
  284. package/estruturas/index.d.ts +9 -9
  285. package/estruturas/index.js +25 -25
  286. package/estruturas/metodo-primitiva.d.ts +28 -28
  287. package/estruturas/metodo-primitiva.js +40 -40
  288. package/estruturas/modulo.d.ts +18 -18
  289. package/estruturas/modulo.js +24 -24
  290. package/estruturas/objeto-delegua-classe.d.ts +26 -26
  291. package/estruturas/objeto-delegua-classe.js +53 -53
  292. package/estruturas/objeto-delegua-classe.js.map +1 -1
  293. package/estruturas/objeto-padrao.d.ts +18 -18
  294. package/estruturas/objeto-padrao.js +32 -32
  295. package/estruturas/objeto-padrao.js.map +1 -1
  296. package/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
  297. package/excecoes/erro-em-tempo-de-execucao.js +13 -13
  298. package/excecoes/index.d.ts +1 -1
  299. package/excecoes/index.js +17 -17
  300. package/formatadores/formatador-delegua.d.ts +79 -79
  301. package/formatadores/formatador-delegua.d.ts.map +1 -1
  302. package/formatadores/formatador-delegua.js +676 -676
  303. package/formatadores/formatador-delegua.js.map +1 -1
  304. package/formatadores/index.d.ts +1 -1
  305. package/formatadores/index.js +17 -17
  306. package/geracao-identificadores/index.d.ts +1 -1
  307. package/geracao-identificadores/index.js +22 -23
  308. package/geracao-identificadores/index.js.map +1 -1
  309. package/index.d.ts +9 -9
  310. package/index.js +27 -27
  311. package/interfaces/analisador-semantico-interface.d.ts +6 -6
  312. package/interfaces/analisador-semantico-interface.js +2 -2
  313. package/interfaces/avaliador-sintatico-interface.d.ts +10 -55
  314. package/interfaces/avaliador-sintatico-interface.d.ts.map +1 -1
  315. package/interfaces/avaliador-sintatico-interface.js +2 -2
  316. package/interfaces/construtos/index.d.ts +4 -4
  317. package/interfaces/construtos/index.js +2 -2
  318. package/interfaces/erros/diagnostico-analisador-semantico.d.ts +14 -14
  319. package/interfaces/erros/diagnostico-analisador-semantico.js +10 -10
  320. package/interfaces/erros/diagnostico-analisador-semantico.js.map +1 -1
  321. package/interfaces/erros/erro-interpretador.d.ts +8 -8
  322. package/interfaces/erros/erro-interpretador.js +2 -2
  323. package/interfaces/erros/index.d.ts +1 -1
  324. package/interfaces/erros/index.js +17 -17
  325. package/interfaces/escopo-execucao.d.ts +12 -12
  326. package/interfaces/escopo-execucao.js +2 -2
  327. package/interfaces/formatador-comum-interface.d.ts +11 -11
  328. package/interfaces/formatador-comum-interface.js +2 -2
  329. package/interfaces/funcao-hipotetica-interface.d.ts +3 -3
  330. package/interfaces/funcao-hipotetica-interface.js +2 -2
  331. package/interfaces/index.d.ts +16 -16
  332. package/interfaces/index.js +32 -32
  333. package/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
  334. package/interfaces/interpretador-com-depuracao-interface.js +2 -2
  335. package/interfaces/interpretador-interface-potigol.d.ts +5 -5
  336. package/interfaces/interpretador-interface-potigol.js +2 -2
  337. package/interfaces/interpretador-interface.d.ts +20 -20
  338. package/interfaces/interpretador-interface.js +2 -2
  339. package/interfaces/lexador-interface.d.ts +23 -23
  340. package/interfaces/lexador-interface.js +2 -2
  341. package/interfaces/parametro-interface.d.ts +15 -15
  342. package/interfaces/parametro-interface.js +2 -2
  343. package/interfaces/pilha-escopos-execucao-interface.d.ts +26 -26
  344. package/interfaces/pilha-escopos-execucao-interface.js +2 -2
  345. package/interfaces/pilha-interface.d.ts +7 -7
  346. package/interfaces/pilha-interface.js +2 -2
  347. package/interfaces/resolvedor-interface.d.ts +41 -41
  348. package/interfaces/resolvedor-interface.js +2 -2
  349. package/interfaces/retornos/index.d.ts +4 -4
  350. package/interfaces/retornos/index.js +20 -20
  351. package/interfaces/retornos/retorno-analisador-semantico.d.ts +4 -4
  352. package/interfaces/retornos/retorno-analisador-semantico.js +2 -2
  353. package/interfaces/retornos/retorno-avaliador-sintatico.d.ts +5 -5
  354. package/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
  355. package/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
  356. package/interfaces/retornos/retorno-execucao-interface.js +2 -2
  357. package/interfaces/retornos/retorno-interpretador.d.ts +5 -5
  358. package/interfaces/retornos/retorno-interpretador.js +2 -2
  359. package/interfaces/retornos/retorno-lexador.d.ts +9 -9
  360. package/interfaces/retornos/retorno-lexador.js +2 -2
  361. package/interfaces/simbolo-interface.d.ts +7 -7
  362. package/interfaces/simbolo-interface.js +2 -2
  363. package/interfaces/tradutor-interface.d.ts +3 -3
  364. package/interfaces/tradutor-interface.js +2 -2
  365. package/interfaces/variavel-hipotetica-interface.d.ts +8 -8
  366. package/interfaces/variavel-hipotetica-interface.js +2 -2
  367. package/interfaces/variavel-interface.d.ts +8 -8
  368. package/interfaces/variavel-interface.d.ts.map +1 -1
  369. package/interfaces/variavel-interface.js +2 -2
  370. package/interfaces/visitante-comum-interface.d.ts +58 -58
  371. package/interfaces/visitante-comum-interface.js +2 -2
  372. package/interpretador/argumento-interface.d.ts +4 -4
  373. package/interpretador/argumento-interface.js +2 -2
  374. package/interpretador/comum.d.ts +2 -2
  375. package/interpretador/comum.d.ts.map +1 -1
  376. package/interpretador/comum.js +51 -52
  377. package/interpretador/comum.js.map +1 -1
  378. package/interpretador/dialetos/egua-classico/index.d.ts +1 -1
  379. package/interpretador/dialetos/egua-classico/index.js +17 -17
  380. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +119 -119
  381. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  382. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +815 -815
  383. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  384. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
  385. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
  386. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
  387. package/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
  388. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
  389. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
  390. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +106 -106
  391. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +441 -441
  392. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  393. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
  394. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
  395. package/interpretador/dialetos/index.d.ts +2 -2
  396. package/interpretador/dialetos/index.js +18 -18
  397. package/interpretador/dialetos/portugol-ipt/index.d.ts +1 -1
  398. package/interpretador/dialetos/portugol-ipt/index.js +17 -17
  399. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +133 -133
  400. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  401. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +501 -501
  402. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  403. package/interpretador/index.d.ts +3 -3
  404. package/interpretador/index.js +19 -19
  405. package/interpretador/inferenciador.d.ts +15 -15
  406. package/interpretador/inferenciador.d.ts.map +1 -1
  407. package/interpretador/inferenciador.js +80 -80
  408. package/interpretador/inferenciador.js.map +1 -1
  409. package/interpretador/interpretador-base.d.ts +268 -268
  410. package/interpretador/interpretador-base.d.ts.map +1 -1
  411. package/interpretador/interpretador-base.js +1396 -1399
  412. package/interpretador/interpretador-base.js.map +1 -1
  413. package/interpretador/interpretador-com-depuracao.d.ts +190 -190
  414. package/interpretador/interpretador-com-depuracao.d.ts.map +1 -1
  415. package/interpretador/interpretador-com-depuracao.js +570 -568
  416. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  417. package/interpretador/pilha-escopos-execucao.d.ts +39 -39
  418. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  419. package/interpretador/pilha-escopos-execucao.js +243 -243
  420. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  421. package/lexador/dialetos/index.d.ts +4 -4
  422. package/lexador/dialetos/index.js +20 -20
  423. package/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
  424. package/lexador/dialetos/lexador-egua-classico.js +286 -286
  425. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  426. package/lexador/dialetos/lexador-guarani.d.ts +10 -10
  427. package/lexador/dialetos/lexador-guarani.js +113 -113
  428. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  429. package/lexador/dialetos/lexador-pitugues.d.ts +51 -51
  430. package/lexador/dialetos/lexador-pitugues.js +398 -398
  431. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  432. package/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
  433. package/lexador/dialetos/lexador-portugol-ipt.js +237 -237
  434. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  435. package/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +32 -32
  436. package/lexador/dialetos/palavras-reservadas/egua-classico.js +39 -39
  437. package/lexador/dialetos/palavras-reservadas/guarani.d.ts +3 -3
  438. package/lexador/dialetos/palavras-reservadas/guarani.js +10 -10
  439. package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +13 -13
  440. package/lexador/dialetos/palavras-reservadas/portugol-ipt.js +20 -20
  441. package/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +1 -1
  442. package/lexador/dialetos/palavras-reservadas/rantiaquin.js +4 -4
  443. package/lexador/dialetos/pragma.d.ts +8 -8
  444. package/lexador/dialetos/pragma.js +2 -2
  445. package/lexador/erro-lexador.d.ts +5 -5
  446. package/lexador/erro-lexador.js +2 -2
  447. package/lexador/index.d.ts +4 -4
  448. package/lexador/index.js +20 -20
  449. package/lexador/lexador-base-linha-unica.d.ts +28 -28
  450. package/lexador/lexador-base-linha-unica.js +82 -82
  451. package/lexador/lexador-base-linha-unica.js.map +1 -1
  452. package/lexador/lexador-base.d.ts +41 -41
  453. package/lexador/lexador-base.js +112 -112
  454. package/lexador/lexador-base.js.map +1 -1
  455. package/lexador/lexador.d.ts +43 -43
  456. package/lexador/lexador.js +440 -440
  457. package/lexador/lexador.js.map +1 -1
  458. package/lexador/micro-lexador.d.ts +29 -29
  459. package/lexador/micro-lexador.js +207 -207
  460. package/lexador/micro-lexador.js.map +1 -1
  461. package/lexador/palavras-reservadas.d.ts +54 -54
  462. package/lexador/palavras-reservadas.js +61 -61
  463. package/lexador/simbolo.d.ts +10 -10
  464. package/lexador/simbolo.js +16 -16
  465. package/lexador/traducao/lexador-javascript.d.ts +28 -28
  466. package/lexador/traducao/lexador-javascript.js +58 -58
  467. package/package.json +13 -12
  468. package/quebras/index.d.ts +10 -10
  469. package/quebras/index.js +19 -19
  470. package/tipo-dados-elementar.d.ts +1 -1
  471. package/tipo-dados-elementar.js +2 -2
  472. package/tipos-de-dados/delegua.d.ts +18 -18
  473. package/tipos-de-dados/delegua.js +19 -19
  474. package/tipos-de-dados/listas-delegua.d.ts +6 -6
  475. package/tipos-de-dados/listas-delegua.js +7 -7
  476. package/tipos-de-dados/listas-primitivos.d.ts +5 -5
  477. package/tipos-de-dados/listas-primitivos.js +6 -6
  478. package/tipos-de-dados/primitivos.d.ts +16 -16
  479. package/tipos-de-dados/primitivos.js +17 -17
  480. package/tipos-de-simbolos/comum.d.ts +23 -23
  481. package/tipos-de-simbolos/comum.js +24 -24
  482. package/tipos-de-simbolos/delegua.d.ts +91 -91
  483. package/tipos-de-simbolos/delegua.js +92 -92
  484. package/tipos-de-simbolos/egua-classico.d.ts +75 -75
  485. package/tipos-de-simbolos/egua-classico.js +76 -76
  486. package/tipos-de-simbolos/guarani.d.ts +14 -14
  487. package/tipos-de-simbolos/guarani.js +15 -15
  488. package/tipos-de-simbolos/guarani.js.map +1 -1
  489. package/tipos-de-simbolos/microgramaticas/delegua.d.ts +46 -46
  490. package/tipos-de-simbolos/microgramaticas/delegua.js +47 -47
  491. package/tipos-de-simbolos/pitugues.d.ts +75 -75
  492. package/tipos-de-simbolos/pitugues.js +76 -76
  493. package/tipos-de-simbolos/portugol-ipt.d.ts +36 -36
  494. package/tipos-de-simbolos/portugol-ipt.js +37 -37
  495. package/tipos-de-simbolos/rantiaquin.d.ts +2 -2
  496. package/tipos-de-simbolos/rantiaquin.js +3 -3
  497. package/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
  498. package/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
  499. package/tradutores/dicionarios/index.d.ts +1 -1
  500. package/tradutores/dicionarios/index.js +17 -17
  501. package/tradutores/index.d.ts +6 -6
  502. package/tradutores/index.js +22 -22
  503. package/tradutores/python/python3-lexer.d.ts +152 -152
  504. package/tradutores/python/python3-lexer.js +1227 -1227
  505. package/tradutores/python/python3-lexer.js.map +1 -1
  506. package/tradutores/python/python3-listener.d.ts +964 -964
  507. package/tradutores/python/python3-listener.js +3 -3
  508. package/tradutores/python/python3-parser.d.ts +1342 -1342
  509. package/tradutores/python/python3-parser.js +11226 -11226
  510. package/tradutores/python/python3-parser.js.map +1 -1
  511. package/tradutores/python/python3-visitor.d.ts +619 -619
  512. package/tradutores/python/python3-visitor.js +3 -3
  513. package/tradutores/tradutor-assembly-x64.d.ts +19 -19
  514. package/tradutores/tradutor-assembly-x64.js +141 -141
  515. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  516. package/tradutores/tradutor-assemblyscript.d.ts +91 -91
  517. package/tradutores/tradutor-assemblyscript.js +590 -590
  518. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  519. package/tradutores/tradutor-javascript.d.ts +95 -95
  520. package/tradutores/tradutor-javascript.js +577 -577
  521. package/tradutores/tradutor-javascript.js.map +1 -1
  522. package/tradutores/tradutor-portugol-ipt.d.ts +21 -21
  523. package/tradutores/tradutor-portugol-ipt.js +60 -60
  524. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  525. package/tradutores/tradutor-python.d.ts +65 -65
  526. package/tradutores/tradutor-python.js +461 -461
  527. package/tradutores/tradutor-python.js.map +1 -1
  528. package/tradutores/tradutor-reverso-javascript.d.ts +50 -50
  529. package/tradutores/tradutor-reverso-javascript.js +392 -392
  530. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  531. package/tradutores/tradutor-reverso-python.d.ts +32 -32
  532. package/tradutores/tradutor-reverso-python.js +71 -71
  533. package/tradutores/tradutor-reverso-python.js.map +1 -1
  534. package/umd/delegua.js +26204 -26346
@@ -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