@designliquido/delegua 0.36.0 → 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 (491) 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 -10
  164. package/construtos/vetor.d.ts.map +1 -1
  165. package/construtos/vetor.js +21 -20
  166. package/construtos/vetor.js.map +1 -1
  167. package/declaracoes/aleatorio.d.ts +15 -15
  168. package/declaracoes/aleatorio.js +15 -15
  169. package/declaracoes/bloco.d.ts +7 -7
  170. package/declaracoes/bloco.js +14 -14
  171. package/declaracoes/cabecalho-programa.d.ts +7 -7
  172. package/declaracoes/cabecalho-programa.js +14 -14
  173. package/declaracoes/classe.d.ts +14 -14
  174. package/declaracoes/classe.js +18 -18
  175. package/declaracoes/const-multiplo.d.ts +14 -14
  176. package/declaracoes/const-multiplo.js +19 -19
  177. package/declaracoes/const.d.ts +14 -14
  178. package/declaracoes/const.js +19 -19
  179. package/declaracoes/continua.d.ts +6 -6
  180. package/declaracoes/continua.js +13 -13
  181. package/declaracoes/declaracao.d.ts +8 -8
  182. package/declaracoes/declaracao.js +17 -17
  183. package/declaracoes/enquanto.d.ts +10 -10
  184. package/declaracoes/enquanto.js +15 -15
  185. package/declaracoes/escolha.d.ts +14 -14
  186. package/declaracoes/escolha.js +19 -19
  187. package/declaracoes/escreva-mesma-linha.d.ts +8 -8
  188. package/declaracoes/escreva-mesma-linha.js +14 -14
  189. package/declaracoes/escreva.d.ts +8 -8
  190. package/declaracoes/escreva.js +14 -14
  191. package/declaracoes/expressao.d.ts +8 -8
  192. package/declaracoes/expressao.js +14 -14
  193. package/declaracoes/falhar.d.ts +8 -8
  194. package/declaracoes/falhar.js +15 -15
  195. package/declaracoes/fazer.d.ts +10 -10
  196. package/declaracoes/fazer.js +15 -15
  197. package/declaracoes/funcao.d.ts +11 -11
  198. package/declaracoes/funcao.js +17 -17
  199. package/declaracoes/importar.d.ts +9 -9
  200. package/declaracoes/importar.js +15 -15
  201. package/declaracoes/index.d.ts +31 -31
  202. package/declaracoes/index.js +47 -47
  203. package/declaracoes/inicio-algoritmo.d.ts +6 -6
  204. package/declaracoes/inicio-algoritmo.js +13 -13
  205. package/declaracoes/leia-multiplo.d.ts +14 -14
  206. package/declaracoes/leia-multiplo.js +21 -21
  207. package/declaracoes/leia.d.ts +17 -17
  208. package/declaracoes/leia.js +21 -21
  209. package/declaracoes/para-cada.d.ts +11 -11
  210. package/declaracoes/para-cada.js +17 -17
  211. package/declaracoes/para.d.ts +19 -19
  212. package/declaracoes/para.js +24 -24
  213. package/declaracoes/propriedade-classe.d.ts +10 -10
  214. package/declaracoes/propriedade-classe.js +16 -16
  215. package/declaracoes/retorna.d.ts +8 -8
  216. package/declaracoes/retorna.js +15 -15
  217. package/declaracoes/se.d.ts +11 -11
  218. package/declaracoes/se.js +17 -17
  219. package/declaracoes/sustar.d.ts +6 -6
  220. package/declaracoes/sustar.js +13 -13
  221. package/declaracoes/tendo-como.d.ts +16 -16
  222. package/declaracoes/tendo-como.js +21 -21
  223. package/declaracoes/tente.d.ts +14 -14
  224. package/declaracoes/tente.js +20 -20
  225. package/declaracoes/var-multiplo.d.ts +15 -15
  226. package/declaracoes/var-multiplo.js +20 -20
  227. package/declaracoes/var.d.ts +16 -16
  228. package/declaracoes/var.js +21 -21
  229. package/depuracao/cyrb53.d.ts +9 -9
  230. package/depuracao/cyrb53.js +22 -22
  231. package/depuracao/cyrb53.js.map +1 -1
  232. package/depuracao/index.d.ts +2 -2
  233. package/depuracao/index.js +23 -23
  234. package/depuracao/ponto-parada.d.ts +4 -4
  235. package/depuracao/ponto-parada.js +2 -2
  236. package/espaco-variaveis.d.ts +19 -19
  237. package/espaco-variaveis.js +19 -19
  238. package/estruturas/chamavel.d.ts +7 -7
  239. package/estruturas/chamavel.js +12 -12
  240. package/estruturas/classe-padrao.d.ts +31 -31
  241. package/estruturas/classe-padrao.js +39 -39
  242. package/estruturas/delegua-funcao.d.ts +29 -29
  243. package/estruturas/delegua-funcao.js +141 -141
  244. package/estruturas/delegua-funcao.js.map +1 -1
  245. package/estruturas/descritor-tipo-classe.d.ts +37 -37
  246. package/estruturas/descritor-tipo-classe.js +79 -79
  247. package/estruturas/descritor-tipo-classe.js.map +1 -1
  248. package/estruturas/funcao-padrao.d.ts +23 -23
  249. package/estruturas/funcao-padrao.js +34 -34
  250. package/estruturas/index.d.ts +9 -9
  251. package/estruturas/index.js +25 -25
  252. package/estruturas/metodo-primitiva.d.ts +28 -28
  253. package/estruturas/metodo-primitiva.js +40 -40
  254. package/estruturas/modulo.d.ts +18 -18
  255. package/estruturas/modulo.js +24 -24
  256. package/estruturas/objeto-delegua-classe.d.ts +26 -26
  257. package/estruturas/objeto-delegua-classe.js +53 -53
  258. package/estruturas/objeto-delegua-classe.js.map +1 -1
  259. package/estruturas/objeto-padrao.d.ts +18 -18
  260. package/estruturas/objeto-padrao.js +32 -32
  261. package/estruturas/objeto-padrao.js.map +1 -1
  262. package/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
  263. package/excecoes/erro-em-tempo-de-execucao.js +13 -13
  264. package/excecoes/index.d.ts +1 -1
  265. package/excecoes/index.js +17 -17
  266. package/formatadores/formatador-delegua.d.ts +79 -79
  267. package/formatadores/formatador-delegua.js +676 -676
  268. package/formatadores/formatador-delegua.js.map +1 -1
  269. package/formatadores/index.d.ts +1 -1
  270. package/formatadores/index.js +17 -17
  271. package/geracao-identificadores/index.d.ts +1 -1
  272. package/geracao-identificadores/index.js +22 -23
  273. package/geracao-identificadores/index.js.map +1 -1
  274. package/index.d.ts +9 -9
  275. package/index.js +27 -27
  276. package/interfaces/analisador-semantico-interface.d.ts +6 -6
  277. package/interfaces/analisador-semantico-interface.js +2 -2
  278. package/interfaces/avaliador-sintatico-interface.d.ts +55 -55
  279. package/interfaces/avaliador-sintatico-interface.js +2 -2
  280. package/interfaces/construtos/index.d.ts +4 -4
  281. package/interfaces/construtos/index.js +2 -2
  282. package/interfaces/erros/diagnostico-analisador-semantico.d.ts +14 -14
  283. package/interfaces/erros/diagnostico-analisador-semantico.js +10 -10
  284. package/interfaces/erros/diagnostico-analisador-semantico.js.map +1 -1
  285. package/interfaces/erros/erro-interpretador.d.ts +8 -8
  286. package/interfaces/erros/erro-interpretador.js +2 -2
  287. package/interfaces/erros/index.d.ts +1 -1
  288. package/interfaces/erros/index.js +17 -17
  289. package/interfaces/escopo-execucao.d.ts +12 -12
  290. package/interfaces/escopo-execucao.js +2 -2
  291. package/interfaces/formatador-comum-interface.d.ts +11 -11
  292. package/interfaces/formatador-comum-interface.js +2 -2
  293. package/interfaces/funcao-hipotetica-interface.d.ts +3 -3
  294. package/interfaces/funcao-hipotetica-interface.js +2 -2
  295. package/interfaces/index.d.ts +16 -16
  296. package/interfaces/index.js +32 -32
  297. package/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
  298. package/interfaces/interpretador-com-depuracao-interface.js +2 -2
  299. package/interfaces/interpretador-interface-potigol.d.ts +5 -5
  300. package/interfaces/interpretador-interface-potigol.js +2 -2
  301. package/interfaces/interpretador-interface.d.ts +20 -20
  302. package/interfaces/interpretador-interface.js +2 -2
  303. package/interfaces/lexador-interface.d.ts +23 -23
  304. package/interfaces/lexador-interface.js +2 -2
  305. package/interfaces/parametro-interface.d.ts +15 -15
  306. package/interfaces/parametro-interface.js +2 -2
  307. package/interfaces/pilha-escopos-execucao-interface.d.ts +26 -26
  308. package/interfaces/pilha-escopos-execucao-interface.js +2 -2
  309. package/interfaces/pilha-interface.d.ts +7 -7
  310. package/interfaces/pilha-interface.js +2 -2
  311. package/interfaces/resolvedor-interface.d.ts +41 -41
  312. package/interfaces/resolvedor-interface.js +2 -2
  313. package/interfaces/retornos/index.d.ts +4 -4
  314. package/interfaces/retornos/index.js +20 -20
  315. package/interfaces/retornos/retorno-analisador-semantico.d.ts +4 -4
  316. package/interfaces/retornos/retorno-analisador-semantico.js +2 -2
  317. package/interfaces/retornos/retorno-avaliador-sintatico.d.ts +5 -5
  318. package/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
  319. package/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
  320. package/interfaces/retornos/retorno-execucao-interface.js +2 -2
  321. package/interfaces/retornos/retorno-interpretador.d.ts +5 -5
  322. package/interfaces/retornos/retorno-interpretador.js +2 -2
  323. package/interfaces/retornos/retorno-lexador.d.ts +9 -9
  324. package/interfaces/retornos/retorno-lexador.js +2 -2
  325. package/interfaces/simbolo-interface.d.ts +7 -7
  326. package/interfaces/simbolo-interface.js +2 -2
  327. package/interfaces/tradutor-interface.d.ts +3 -3
  328. package/interfaces/tradutor-interface.js +2 -2
  329. package/interfaces/variavel-hipotetica-interface.d.ts +8 -8
  330. package/interfaces/variavel-hipotetica-interface.js +2 -2
  331. package/interfaces/variavel-interface.d.ts +8 -8
  332. package/interfaces/variavel-interface.js +2 -2
  333. package/interfaces/visitante-comum-interface.d.ts +58 -58
  334. package/interfaces/visitante-comum-interface.js +2 -2
  335. package/interpretador/argumento-interface.d.ts +4 -4
  336. package/interpretador/argumento-interface.js +2 -2
  337. package/interpretador/comum.d.ts +2 -2
  338. package/interpretador/comum.js +51 -52
  339. package/interpretador/comum.js.map +1 -1
  340. package/interpretador/dialetos/egua-classico/index.d.ts +1 -1
  341. package/interpretador/dialetos/egua-classico/index.js +17 -17
  342. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +119 -119
  343. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +815 -815
  344. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  345. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
  346. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
  347. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
  348. package/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
  349. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
  350. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
  351. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +106 -106
  352. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +441 -441
  353. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  354. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
  355. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
  356. package/interpretador/dialetos/index.d.ts +2 -2
  357. package/interpretador/dialetos/index.js +18 -18
  358. package/interpretador/dialetos/portugol-ipt/index.d.ts +1 -1
  359. package/interpretador/dialetos/portugol-ipt/index.js +17 -17
  360. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +133 -133
  361. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +501 -501
  362. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  363. package/interpretador/index.d.ts +3 -3
  364. package/interpretador/index.js +19 -19
  365. package/interpretador/inferenciador.d.ts +15 -15
  366. package/interpretador/inferenciador.d.ts.map +1 -1
  367. package/interpretador/inferenciador.js +80 -80
  368. package/interpretador/inferenciador.js.map +1 -1
  369. package/interpretador/interpretador-base.d.ts +268 -268
  370. package/interpretador/interpretador-base.js +1399 -1399
  371. package/interpretador/interpretador-base.js.map +1 -1
  372. package/interpretador/interpretador-com-depuracao.d.ts +190 -190
  373. package/interpretador/interpretador-com-depuracao.js +568 -568
  374. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  375. package/interpretador/pilha-escopos-execucao.d.ts +39 -39
  376. package/interpretador/pilha-escopos-execucao.js +243 -243
  377. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  378. package/lexador/dialetos/index.d.ts +4 -4
  379. package/lexador/dialetos/index.js +20 -20
  380. package/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
  381. package/lexador/dialetos/lexador-egua-classico.js +286 -286
  382. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  383. package/lexador/dialetos/lexador-guarani.d.ts +10 -10
  384. package/lexador/dialetos/lexador-guarani.js +113 -113
  385. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  386. package/lexador/dialetos/lexador-pitugues.d.ts +51 -51
  387. package/lexador/dialetos/lexador-pitugues.js +398 -398
  388. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  389. package/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
  390. package/lexador/dialetos/lexador-portugol-ipt.js +237 -237
  391. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  392. package/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +32 -32
  393. package/lexador/dialetos/palavras-reservadas/egua-classico.js +39 -39
  394. package/lexador/dialetos/palavras-reservadas/guarani.d.ts +3 -3
  395. package/lexador/dialetos/palavras-reservadas/guarani.js +10 -10
  396. package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +13 -13
  397. package/lexador/dialetos/palavras-reservadas/portugol-ipt.js +20 -20
  398. package/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +1 -1
  399. package/lexador/dialetos/palavras-reservadas/rantiaquin.js +4 -4
  400. package/lexador/dialetos/pragma.d.ts +8 -8
  401. package/lexador/dialetos/pragma.js +2 -2
  402. package/lexador/erro-lexador.d.ts +5 -5
  403. package/lexador/erro-lexador.js +2 -2
  404. package/lexador/index.d.ts +4 -4
  405. package/lexador/index.js +20 -20
  406. package/lexador/lexador-base-linha-unica.d.ts +28 -28
  407. package/lexador/lexador-base-linha-unica.js +82 -82
  408. package/lexador/lexador-base-linha-unica.js.map +1 -1
  409. package/lexador/lexador-base.d.ts +41 -41
  410. package/lexador/lexador-base.js +112 -112
  411. package/lexador/lexador-base.js.map +1 -1
  412. package/lexador/lexador.d.ts +43 -43
  413. package/lexador/lexador.js +440 -440
  414. package/lexador/lexador.js.map +1 -1
  415. package/lexador/micro-lexador.d.ts +29 -29
  416. package/lexador/micro-lexador.js +207 -207
  417. package/lexador/micro-lexador.js.map +1 -1
  418. package/lexador/palavras-reservadas.d.ts +54 -54
  419. package/lexador/palavras-reservadas.js +61 -61
  420. package/lexador/simbolo.d.ts +10 -10
  421. package/lexador/simbolo.js +16 -16
  422. package/lexador/traducao/lexador-javascript.d.ts +28 -28
  423. package/lexador/traducao/lexador-javascript.js +58 -58
  424. package/package.json +5 -4
  425. package/quebras/index.d.ts +10 -10
  426. package/quebras/index.js +19 -19
  427. package/tipo-dados-elementar.d.ts +1 -1
  428. package/tipo-dados-elementar.js +2 -2
  429. package/tipos-de-dados/delegua.d.ts +18 -18
  430. package/tipos-de-dados/delegua.js +19 -19
  431. package/tipos-de-dados/listas-delegua.d.ts +6 -6
  432. package/tipos-de-dados/listas-delegua.js +7 -7
  433. package/tipos-de-dados/listas-primitivos.d.ts +5 -5
  434. package/tipos-de-dados/listas-primitivos.js +6 -6
  435. package/tipos-de-dados/primitivos.d.ts +16 -16
  436. package/tipos-de-dados/primitivos.js +17 -17
  437. package/tipos-de-simbolos/comum.d.ts +23 -23
  438. package/tipos-de-simbolos/comum.js +24 -24
  439. package/tipos-de-simbolos/delegua.d.ts +91 -91
  440. package/tipos-de-simbolos/delegua.js +92 -92
  441. package/tipos-de-simbolos/egua-classico.d.ts +75 -75
  442. package/tipos-de-simbolos/egua-classico.js +76 -76
  443. package/tipos-de-simbolos/guarani.d.ts +14 -14
  444. package/tipos-de-simbolos/guarani.js +15 -15
  445. package/tipos-de-simbolos/guarani.js.map +1 -1
  446. package/tipos-de-simbolos/microgramaticas/delegua.d.ts +46 -46
  447. package/tipos-de-simbolos/microgramaticas/delegua.js +47 -47
  448. package/tipos-de-simbolos/pitugues.d.ts +75 -75
  449. package/tipos-de-simbolos/pitugues.js +76 -76
  450. package/tipos-de-simbolos/portugol-ipt.d.ts +36 -36
  451. package/tipos-de-simbolos/portugol-ipt.js +37 -37
  452. package/tipos-de-simbolos/rantiaquin.d.ts +2 -2
  453. package/tipos-de-simbolos/rantiaquin.js +3 -3
  454. package/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
  455. package/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
  456. package/tradutores/dicionarios/index.d.ts +1 -1
  457. package/tradutores/dicionarios/index.js +17 -17
  458. package/tradutores/index.d.ts +6 -6
  459. package/tradutores/index.js +22 -22
  460. package/tradutores/python/python3-lexer.d.ts +152 -152
  461. package/tradutores/python/python3-lexer.js +1227 -1227
  462. package/tradutores/python/python3-lexer.js.map +1 -1
  463. package/tradutores/python/python3-listener.d.ts +964 -964
  464. package/tradutores/python/python3-listener.js +3 -3
  465. package/tradutores/python/python3-parser.d.ts +1342 -1342
  466. package/tradutores/python/python3-parser.js +11226 -11226
  467. package/tradutores/python/python3-parser.js.map +1 -1
  468. package/tradutores/python/python3-visitor.d.ts +619 -619
  469. package/tradutores/python/python3-visitor.js +3 -3
  470. package/tradutores/tradutor-assembly-x64.d.ts +19 -19
  471. package/tradutores/tradutor-assembly-x64.js +128 -128
  472. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  473. package/tradutores/tradutor-assemblyscript.d.ts +91 -91
  474. package/tradutores/tradutor-assemblyscript.js +590 -590
  475. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  476. package/tradutores/tradutor-javascript.d.ts +95 -95
  477. package/tradutores/tradutor-javascript.js +577 -577
  478. package/tradutores/tradutor-javascript.js.map +1 -1
  479. package/tradutores/tradutor-portugol-ipt.d.ts +21 -21
  480. package/tradutores/tradutor-portugol-ipt.js +60 -60
  481. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  482. package/tradutores/tradutor-python.d.ts +65 -65
  483. package/tradutores/tradutor-python.js +461 -461
  484. package/tradutores/tradutor-python.js.map +1 -1
  485. package/tradutores/tradutor-reverso-javascript.d.ts +50 -50
  486. package/tradutores/tradutor-reverso-javascript.js +392 -392
  487. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  488. package/tradutores/tradutor-reverso-python.d.ts +32 -32
  489. package/tradutores/tradutor-reverso-python.js +71 -71
  490. package/tradutores/tradutor-reverso-python.js.map +1 -1
  491. package/umd/delegua.js +26337 -26339
@@ -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