@designliquido/delegua 0.36.1 → 0.36.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts +69 -69
  2. package/analisador-semantico/analisador-semantico-base.js +180 -180
  3. package/analisador-semantico/analisador-semantico.d.ts +59 -59
  4. package/analisador-semantico/analisador-semantico.js +442 -442
  5. package/analisador-semantico/analisador-semantico.js.map +1 -1
  6. package/analisador-semantico/index.d.ts +3 -3
  7. package/analisador-semantico/index.js +19 -19
  8. package/analisador-semantico/pilha-variaveis.d.ts +20 -20
  9. package/analisador-semantico/pilha-variaveis.js +25 -25
  10. package/avaliador-sintatico/avaliador-sintatico-base.d.ts +69 -69
  11. package/avaliador-sintatico/avaliador-sintatico-base.js +223 -223
  12. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  13. package/avaliador-sintatico/avaliador-sintatico.d.ts +126 -126
  14. package/avaliador-sintatico/avaliador-sintatico.js +1093 -1093
  15. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  16. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +73 -73
  17. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +648 -648
  18. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  19. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +21 -21
  20. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +149 -149
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +87 -87
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +770 -770
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +34 -34
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +168 -168
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/index.d.ts +3 -3
  29. package/avaliador-sintatico/dialetos/index.js +19 -19
  30. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
  31. package/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
  32. package/avaliador-sintatico/index.d.ts +6 -6
  33. package/avaliador-sintatico/index.js +22 -22
  34. package/avaliador-sintatico/micro-avaliador-sintatico-base.d.ts +27 -27
  35. package/avaliador-sintatico/micro-avaliador-sintatico-base.js +116 -116
  36. package/avaliador-sintatico/micro-avaliador-sintatico-base.js.map +1 -1
  37. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts +33 -33
  38. package/avaliador-sintatico/micro-avaliador-sintatico.js +287 -287
  39. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  40. package/avaliador-sintatico/retornos/index.d.ts +3 -3
  41. package/avaliador-sintatico/retornos/index.js +19 -19
  42. package/avaliador-sintatico/retornos/retorno-declaracao.d.ts +3 -3
  43. package/avaliador-sintatico/retornos/retorno-declaracao.js +2 -2
  44. package/avaliador-sintatico/retornos/retorno-primario.d.ts +3 -3
  45. package/avaliador-sintatico/retornos/retorno-primario.js +2 -2
  46. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.d.ts +2 -2
  47. package/avaliador-sintatico/retornos/retorno-resolver-declaracao.js +2 -2
  48. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +59 -59
  49. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +150 -150
  50. package/bibliotecas/biblioteca-global.d.ts +157 -157
  51. package/bibliotecas/biblioteca-global.js +497 -498
  52. package/bibliotecas/biblioteca-global.js.map +1 -1
  53. package/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts +1 -1
  54. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js +236 -236
  55. package/bibliotecas/dialetos/egua-classico/biblioteca-global.js.map +1 -1
  56. package/bibliotecas/dialetos/egua-classico/index.d.ts +2 -2
  57. package/bibliotecas/dialetos/egua-classico/index.js +32 -32
  58. package/bibliotecas/dialetos/egua-classico/index.js.map +1 -1
  59. package/bibliotecas/dialetos/egua-classico/matematica.d.ts +1 -1
  60. package/bibliotecas/dialetos/egua-classico/matematica.js +541 -541
  61. package/bibliotecas/dialetos/egua-classico/matematica.js.map +1 -1
  62. package/bibliotecas/dialetos/egua-classico/tempo.d.ts +1 -1
  63. package/bibliotecas/dialetos/egua-classico/tempo.js +39 -39
  64. package/bibliotecas/dialetos/egua-classico/tempo.js.map +1 -1
  65. package/bibliotecas/dialetos/egua-classico/textos.d.ts +8 -8
  66. package/bibliotecas/dialetos/egua-classico/textos.js +201 -201
  67. package/bibliotecas/dialetos/egua-classico/textos.js.map +1 -1
  68. package/bibliotecas/primitivas-dicionario.d.ts +6 -6
  69. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  70. package/bibliotecas/primitivas-dicionario.js +10 -10
  71. package/bibliotecas/primitivas-numero.d.ts +6 -6
  72. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  73. package/bibliotecas/primitivas-numero.js +10 -10
  74. package/bibliotecas/primitivas-texto.d.ts +17 -17
  75. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  76. package/bibliotecas/primitivas-texto.js +22 -22
  77. package/bibliotecas/primitivas-texto.js.map +1 -1
  78. package/bibliotecas/primitivas-vetor.d.ts +21 -21
  79. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  80. package/bibliotecas/primitivas-vetor.js +90 -90
  81. package/bibliotecas/primitivas-vetor.js.map +1 -1
  82. package/bin/package.json +5 -4
  83. package/construtos/acesso-elemento-matriz.d.ts +12 -12
  84. package/construtos/acesso-elemento-matriz.js +17 -17
  85. package/construtos/acesso-indice-variavel.d.ts +15 -15
  86. package/construtos/acesso-indice-variavel.js +20 -20
  87. package/construtos/acesso-metodo-ou-propriedade.d.ts +14 -14
  88. package/construtos/acesso-metodo-ou-propriedade.js +19 -19
  89. package/construtos/agrupamento.d.ts +14 -14
  90. package/construtos/agrupamento.js +19 -19
  91. package/construtos/atribuicao-por-indice.d.ts +11 -11
  92. package/construtos/atribuicao-por-indice.js +16 -16
  93. package/construtos/atribuicao-por-indices-matriz.d.ts +12 -12
  94. package/construtos/atribuicao-por-indices-matriz.js +17 -17
  95. package/construtos/atribuir.d.ts +15 -15
  96. package/construtos/atribuir.js +24 -24
  97. package/construtos/atribuir.js.map +1 -1
  98. package/construtos/binario.d.ts +33 -33
  99. package/construtos/binario.js +38 -38
  100. package/construtos/chamada.d.ts +15 -15
  101. package/construtos/chamada.js +21 -21
  102. package/construtos/comentario.d.ts +15 -15
  103. package/construtos/comentario.js +20 -20
  104. package/construtos/constante.d.ts +12 -12
  105. package/construtos/constante.js +17 -17
  106. package/construtos/construto.d.ts +7 -7
  107. package/construtos/construto.js +2 -2
  108. package/construtos/decorador.d.ts +14 -14
  109. package/construtos/decorador.js +19 -19
  110. package/construtos/definir-valor.d.ts +11 -11
  111. package/construtos/definir-valor.js +16 -16
  112. package/construtos/dicionario.d.ts +10 -10
  113. package/construtos/dicionario.js +15 -15
  114. package/construtos/expressao-regular.d.ts +10 -10
  115. package/construtos/expressao-regular.js +15 -15
  116. package/construtos/fim-para.d.ts +22 -22
  117. package/construtos/fim-para.js +25 -25
  118. package/construtos/formatacao-escrita.d.ts +16 -16
  119. package/construtos/formatacao-escrita.js +21 -21
  120. package/construtos/funcao.d.ts +12 -12
  121. package/construtos/funcao.js +16 -16
  122. package/construtos/index.d.ts +29 -29
  123. package/construtos/index.js +45 -45
  124. package/construtos/isto.d.ts +9 -9
  125. package/construtos/isto.js +14 -14
  126. package/construtos/literal.d.ts +10 -10
  127. package/construtos/literal.js +14 -14
  128. package/construtos/logico.d.ts +11 -11
  129. package/construtos/logico.js +16 -16
  130. package/construtos/qual-tipo.d.ts +11 -11
  131. package/construtos/qual-tipo.js +16 -16
  132. package/construtos/super.d.ts +10 -10
  133. package/construtos/super.js +15 -15
  134. package/construtos/tipo-de.d.ts +10 -10
  135. package/construtos/tipo-de.js +15 -15
  136. package/construtos/tuplas/deceto.d.ts +18 -18
  137. package/construtos/tuplas/deceto.js +32 -32
  138. package/construtos/tuplas/dupla.d.ts +6 -6
  139. package/construtos/tuplas/dupla.js +12 -12
  140. package/construtos/tuplas/index.d.ts +13 -13
  141. package/construtos/tuplas/index.js +67 -67
  142. package/construtos/tuplas/index.js.map +1 -1
  143. package/construtos/tuplas/noneto.d.ts +15 -15
  144. package/construtos/tuplas/noneto.js +25 -25
  145. package/construtos/tuplas/octeto.d.ts +14 -14
  146. package/construtos/tuplas/octeto.js +24 -24
  147. package/construtos/tuplas/quarteto.d.ts +8 -8
  148. package/construtos/tuplas/quarteto.js +14 -14
  149. package/construtos/tuplas/quinteto.d.ts +9 -9
  150. package/construtos/tuplas/quinteto.js +15 -15
  151. package/construtos/tuplas/septeto.d.ts +13 -13
  152. package/construtos/tuplas/septeto.js +23 -23
  153. package/construtos/tuplas/sexteto.d.ts +10 -10
  154. package/construtos/tuplas/sexteto.js +16 -16
  155. package/construtos/tuplas/trio.d.ts +7 -7
  156. package/construtos/tuplas/trio.js +13 -13
  157. package/construtos/tuplas/tupla.d.ts +8 -8
  158. package/construtos/tuplas/tupla.js +9 -9
  159. package/construtos/unario.d.ts +11 -11
  160. package/construtos/unario.js +16 -16
  161. package/construtos/variavel.d.ts +9 -9
  162. package/construtos/variavel.js +14 -14
  163. package/construtos/vetor.d.ts +11 -11
  164. package/construtos/vetor.js +21 -21
  165. package/construtos/vetor.js.map +1 -1
  166. package/declaracoes/aleatorio.d.ts +15 -15
  167. package/declaracoes/aleatorio.js +15 -15
  168. package/declaracoes/bloco.d.ts +7 -7
  169. package/declaracoes/bloco.js +14 -14
  170. package/declaracoes/cabecalho-programa.d.ts +7 -7
  171. package/declaracoes/cabecalho-programa.js +14 -14
  172. package/declaracoes/classe.d.ts +14 -14
  173. package/declaracoes/classe.js +18 -18
  174. package/declaracoes/const-multiplo.d.ts +14 -14
  175. package/declaracoes/const-multiplo.js +19 -19
  176. package/declaracoes/const.d.ts +14 -14
  177. package/declaracoes/const.js +19 -19
  178. package/declaracoes/continua.d.ts +6 -6
  179. package/declaracoes/continua.js +13 -13
  180. package/declaracoes/declaracao.d.ts +8 -8
  181. package/declaracoes/declaracao.js +17 -17
  182. package/declaracoes/enquanto.d.ts +10 -10
  183. package/declaracoes/enquanto.js +15 -15
  184. package/declaracoes/escolha.d.ts +14 -14
  185. package/declaracoes/escolha.js +19 -19
  186. package/declaracoes/escreva-mesma-linha.d.ts +8 -8
  187. package/declaracoes/escreva-mesma-linha.js +14 -14
  188. package/declaracoes/escreva.d.ts +8 -8
  189. package/declaracoes/escreva.js +14 -14
  190. package/declaracoes/expressao.d.ts +8 -8
  191. package/declaracoes/expressao.js +14 -14
  192. package/declaracoes/falhar.d.ts +8 -8
  193. package/declaracoes/falhar.js +15 -15
  194. package/declaracoes/fazer.d.ts +10 -10
  195. package/declaracoes/fazer.js +15 -15
  196. package/declaracoes/funcao.d.ts +11 -11
  197. package/declaracoes/funcao.js +17 -17
  198. package/declaracoes/importar.d.ts +9 -9
  199. package/declaracoes/importar.js +15 -15
  200. package/declaracoes/index.d.ts +31 -31
  201. package/declaracoes/index.js +47 -47
  202. package/declaracoes/inicio-algoritmo.d.ts +6 -6
  203. package/declaracoes/inicio-algoritmo.js +13 -13
  204. package/declaracoes/leia-multiplo.d.ts +14 -14
  205. package/declaracoes/leia-multiplo.js +21 -21
  206. package/declaracoes/leia.d.ts +17 -17
  207. package/declaracoes/leia.js +21 -21
  208. package/declaracoes/para-cada.d.ts +11 -11
  209. package/declaracoes/para-cada.js +17 -17
  210. package/declaracoes/para.d.ts +19 -19
  211. package/declaracoes/para.js +24 -24
  212. package/declaracoes/propriedade-classe.d.ts +10 -10
  213. package/declaracoes/propriedade-classe.js +16 -16
  214. package/declaracoes/retorna.d.ts +8 -8
  215. package/declaracoes/retorna.js +15 -15
  216. package/declaracoes/se.d.ts +11 -11
  217. package/declaracoes/se.js +17 -17
  218. package/declaracoes/sustar.d.ts +6 -6
  219. package/declaracoes/sustar.js +13 -13
  220. package/declaracoes/tendo-como.d.ts +16 -16
  221. package/declaracoes/tendo-como.js +21 -21
  222. package/declaracoes/tente.d.ts +14 -14
  223. package/declaracoes/tente.js +20 -20
  224. package/declaracoes/var-multiplo.d.ts +15 -15
  225. package/declaracoes/var-multiplo.js +20 -20
  226. package/declaracoes/var.d.ts +16 -16
  227. package/declaracoes/var.js +21 -21
  228. package/depuracao/cyrb53.d.ts +9 -9
  229. package/depuracao/cyrb53.js +22 -22
  230. package/depuracao/cyrb53.js.map +1 -1
  231. package/depuracao/index.d.ts +2 -2
  232. package/depuracao/index.js +23 -23
  233. package/depuracao/ponto-parada.d.ts +4 -4
  234. package/depuracao/ponto-parada.js +2 -2
  235. package/espaco-variaveis.d.ts +19 -19
  236. package/espaco-variaveis.js +19 -19
  237. package/estruturas/chamavel.d.ts +7 -7
  238. package/estruturas/chamavel.js +12 -12
  239. package/estruturas/classe-padrao.d.ts +31 -31
  240. package/estruturas/classe-padrao.js +39 -39
  241. package/estruturas/delegua-funcao.d.ts +29 -29
  242. package/estruturas/delegua-funcao.js +141 -141
  243. package/estruturas/delegua-funcao.js.map +1 -1
  244. package/estruturas/descritor-tipo-classe.d.ts +37 -37
  245. package/estruturas/descritor-tipo-classe.js +79 -79
  246. package/estruturas/descritor-tipo-classe.js.map +1 -1
  247. package/estruturas/funcao-padrao.d.ts +23 -23
  248. package/estruturas/funcao-padrao.js +34 -34
  249. package/estruturas/index.d.ts +9 -9
  250. package/estruturas/index.js +25 -25
  251. package/estruturas/metodo-primitiva.d.ts +28 -28
  252. package/estruturas/metodo-primitiva.js +40 -40
  253. package/estruturas/modulo.d.ts +18 -18
  254. package/estruturas/modulo.js +24 -24
  255. package/estruturas/objeto-delegua-classe.d.ts +26 -26
  256. package/estruturas/objeto-delegua-classe.js +53 -53
  257. package/estruturas/objeto-delegua-classe.js.map +1 -1
  258. package/estruturas/objeto-padrao.d.ts +18 -18
  259. package/estruturas/objeto-padrao.js +32 -32
  260. package/estruturas/objeto-padrao.js.map +1 -1
  261. package/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
  262. package/excecoes/erro-em-tempo-de-execucao.js +13 -13
  263. package/excecoes/index.d.ts +1 -1
  264. package/excecoes/index.js +17 -17
  265. package/formatadores/formatador-delegua.d.ts +79 -79
  266. package/formatadores/formatador-delegua.js +676 -676
  267. package/formatadores/formatador-delegua.js.map +1 -1
  268. package/formatadores/index.d.ts +1 -1
  269. package/formatadores/index.js +17 -17
  270. package/geracao-identificadores/index.d.ts +1 -1
  271. package/geracao-identificadores/index.js +22 -23
  272. package/geracao-identificadores/index.js.map +1 -1
  273. package/index.d.ts +9 -9
  274. package/index.js +27 -27
  275. package/interfaces/analisador-semantico-interface.d.ts +6 -6
  276. package/interfaces/analisador-semantico-interface.js +2 -2
  277. package/interfaces/avaliador-sintatico-interface.d.ts +55 -55
  278. package/interfaces/avaliador-sintatico-interface.js +2 -2
  279. package/interfaces/construtos/index.d.ts +4 -4
  280. package/interfaces/construtos/index.js +2 -2
  281. package/interfaces/erros/diagnostico-analisador-semantico.d.ts +14 -14
  282. package/interfaces/erros/diagnostico-analisador-semantico.js +10 -10
  283. package/interfaces/erros/diagnostico-analisador-semantico.js.map +1 -1
  284. package/interfaces/erros/erro-interpretador.d.ts +8 -8
  285. package/interfaces/erros/erro-interpretador.js +2 -2
  286. package/interfaces/erros/index.d.ts +1 -1
  287. package/interfaces/erros/index.js +17 -17
  288. package/interfaces/escopo-execucao.d.ts +12 -12
  289. package/interfaces/escopo-execucao.js +2 -2
  290. package/interfaces/formatador-comum-interface.d.ts +11 -11
  291. package/interfaces/formatador-comum-interface.js +2 -2
  292. package/interfaces/funcao-hipotetica-interface.d.ts +3 -3
  293. package/interfaces/funcao-hipotetica-interface.js +2 -2
  294. package/interfaces/index.d.ts +16 -16
  295. package/interfaces/index.js +32 -32
  296. package/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
  297. package/interfaces/interpretador-com-depuracao-interface.js +2 -2
  298. package/interfaces/interpretador-interface-potigol.d.ts +5 -5
  299. package/interfaces/interpretador-interface-potigol.js +2 -2
  300. package/interfaces/interpretador-interface.d.ts +20 -20
  301. package/interfaces/interpretador-interface.js +2 -2
  302. package/interfaces/lexador-interface.d.ts +23 -23
  303. package/interfaces/lexador-interface.js +2 -2
  304. package/interfaces/parametro-interface.d.ts +15 -15
  305. package/interfaces/parametro-interface.js +2 -2
  306. package/interfaces/pilha-escopos-execucao-interface.d.ts +26 -26
  307. package/interfaces/pilha-escopos-execucao-interface.js +2 -2
  308. package/interfaces/pilha-interface.d.ts +7 -7
  309. package/interfaces/pilha-interface.js +2 -2
  310. package/interfaces/resolvedor-interface.d.ts +41 -41
  311. package/interfaces/resolvedor-interface.js +2 -2
  312. package/interfaces/retornos/index.d.ts +4 -4
  313. package/interfaces/retornos/index.js +20 -20
  314. package/interfaces/retornos/retorno-analisador-semantico.d.ts +4 -4
  315. package/interfaces/retornos/retorno-analisador-semantico.js +2 -2
  316. package/interfaces/retornos/retorno-avaliador-sintatico.d.ts +5 -5
  317. package/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
  318. package/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
  319. package/interfaces/retornos/retorno-execucao-interface.js +2 -2
  320. package/interfaces/retornos/retorno-interpretador.d.ts +5 -5
  321. package/interfaces/retornos/retorno-interpretador.js +2 -2
  322. package/interfaces/retornos/retorno-lexador.d.ts +9 -9
  323. package/interfaces/retornos/retorno-lexador.js +2 -2
  324. package/interfaces/simbolo-interface.d.ts +7 -7
  325. package/interfaces/simbolo-interface.js +2 -2
  326. package/interfaces/tradutor-interface.d.ts +3 -3
  327. package/interfaces/tradutor-interface.js +2 -2
  328. package/interfaces/variavel-hipotetica-interface.d.ts +8 -8
  329. package/interfaces/variavel-hipotetica-interface.js +2 -2
  330. package/interfaces/variavel-interface.d.ts +8 -8
  331. package/interfaces/variavel-interface.js +2 -2
  332. package/interfaces/visitante-comum-interface.d.ts +58 -58
  333. package/interfaces/visitante-comum-interface.js +2 -2
  334. package/interpretador/argumento-interface.d.ts +4 -4
  335. package/interpretador/argumento-interface.js +2 -2
  336. package/interpretador/comum.d.ts +2 -2
  337. package/interpretador/comum.js +51 -52
  338. package/interpretador/comum.js.map +1 -1
  339. package/interpretador/dialetos/egua-classico/index.d.ts +1 -1
  340. package/interpretador/dialetos/egua-classico/index.js +17 -17
  341. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +119 -119
  342. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +815 -815
  343. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  344. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
  345. package/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
  346. package/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
  347. package/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
  348. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
  349. package/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
  350. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +106 -106
  351. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +441 -441
  352. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  353. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
  354. package/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
  355. package/interpretador/dialetos/index.d.ts +2 -2
  356. package/interpretador/dialetos/index.js +18 -18
  357. package/interpretador/dialetos/portugol-ipt/index.d.ts +1 -1
  358. package/interpretador/dialetos/portugol-ipt/index.js +17 -17
  359. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +133 -133
  360. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +501 -501
  361. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  362. package/interpretador/index.d.ts +3 -3
  363. package/interpretador/index.js +19 -19
  364. package/interpretador/inferenciador.d.ts +15 -15
  365. package/interpretador/inferenciador.d.ts.map +1 -1
  366. package/interpretador/inferenciador.js +80 -80
  367. package/interpretador/inferenciador.js.map +1 -1
  368. package/interpretador/interpretador-base.d.ts +268 -268
  369. package/interpretador/interpretador-base.js +1399 -1399
  370. package/interpretador/interpretador-base.js.map +1 -1
  371. package/interpretador/interpretador-com-depuracao.d.ts +190 -190
  372. package/interpretador/interpretador-com-depuracao.js +568 -568
  373. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  374. package/interpretador/pilha-escopos-execucao.d.ts +39 -39
  375. package/interpretador/pilha-escopos-execucao.js +243 -243
  376. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  377. package/lexador/dialetos/index.d.ts +4 -4
  378. package/lexador/dialetos/index.js +20 -20
  379. package/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
  380. package/lexador/dialetos/lexador-egua-classico.js +286 -286
  381. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  382. package/lexador/dialetos/lexador-guarani.d.ts +10 -10
  383. package/lexador/dialetos/lexador-guarani.js +113 -113
  384. package/lexador/dialetos/lexador-guarani.js.map +1 -1
  385. package/lexador/dialetos/lexador-pitugues.d.ts +51 -51
  386. package/lexador/dialetos/lexador-pitugues.js +398 -398
  387. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  388. package/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
  389. package/lexador/dialetos/lexador-portugol-ipt.js +237 -237
  390. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  391. package/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +32 -32
  392. package/lexador/dialetos/palavras-reservadas/egua-classico.js +39 -39
  393. package/lexador/dialetos/palavras-reservadas/guarani.d.ts +3 -3
  394. package/lexador/dialetos/palavras-reservadas/guarani.js +10 -10
  395. package/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +13 -13
  396. package/lexador/dialetos/palavras-reservadas/portugol-ipt.js +20 -20
  397. package/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +1 -1
  398. package/lexador/dialetos/palavras-reservadas/rantiaquin.js +4 -4
  399. package/lexador/dialetos/pragma.d.ts +8 -8
  400. package/lexador/dialetos/pragma.js +2 -2
  401. package/lexador/erro-lexador.d.ts +5 -5
  402. package/lexador/erro-lexador.js +2 -2
  403. package/lexador/index.d.ts +4 -4
  404. package/lexador/index.js +20 -20
  405. package/lexador/lexador-base-linha-unica.d.ts +28 -28
  406. package/lexador/lexador-base-linha-unica.js +82 -82
  407. package/lexador/lexador-base-linha-unica.js.map +1 -1
  408. package/lexador/lexador-base.d.ts +41 -41
  409. package/lexador/lexador-base.js +112 -112
  410. package/lexador/lexador-base.js.map +1 -1
  411. package/lexador/lexador.d.ts +43 -43
  412. package/lexador/lexador.js +440 -440
  413. package/lexador/lexador.js.map +1 -1
  414. package/lexador/micro-lexador.d.ts +29 -29
  415. package/lexador/micro-lexador.js +207 -207
  416. package/lexador/micro-lexador.js.map +1 -1
  417. package/lexador/palavras-reservadas.d.ts +54 -54
  418. package/lexador/palavras-reservadas.js +61 -61
  419. package/lexador/simbolo.d.ts +10 -10
  420. package/lexador/simbolo.js +16 -16
  421. package/lexador/traducao/lexador-javascript.d.ts +28 -28
  422. package/lexador/traducao/lexador-javascript.js +58 -58
  423. package/package.json +5 -4
  424. package/quebras/index.d.ts +10 -10
  425. package/quebras/index.js +19 -19
  426. package/tipo-dados-elementar.d.ts +1 -1
  427. package/tipo-dados-elementar.js +2 -2
  428. package/tipos-de-dados/delegua.d.ts +18 -18
  429. package/tipos-de-dados/delegua.js +19 -19
  430. package/tipos-de-dados/listas-delegua.d.ts +6 -6
  431. package/tipos-de-dados/listas-delegua.js +7 -7
  432. package/tipos-de-dados/listas-primitivos.d.ts +5 -5
  433. package/tipos-de-dados/listas-primitivos.js +6 -6
  434. package/tipos-de-dados/primitivos.d.ts +16 -16
  435. package/tipos-de-dados/primitivos.js +17 -17
  436. package/tipos-de-simbolos/comum.d.ts +23 -23
  437. package/tipos-de-simbolos/comum.js +24 -24
  438. package/tipos-de-simbolos/delegua.d.ts +91 -91
  439. package/tipos-de-simbolos/delegua.js +92 -92
  440. package/tipos-de-simbolos/egua-classico.d.ts +75 -75
  441. package/tipos-de-simbolos/egua-classico.js +76 -76
  442. package/tipos-de-simbolos/guarani.d.ts +14 -14
  443. package/tipos-de-simbolos/guarani.js +15 -15
  444. package/tipos-de-simbolos/guarani.js.map +1 -1
  445. package/tipos-de-simbolos/microgramaticas/delegua.d.ts +46 -46
  446. package/tipos-de-simbolos/microgramaticas/delegua.js +47 -47
  447. package/tipos-de-simbolos/pitugues.d.ts +75 -75
  448. package/tipos-de-simbolos/pitugues.js +76 -76
  449. package/tipos-de-simbolos/portugol-ipt.d.ts +36 -36
  450. package/tipos-de-simbolos/portugol-ipt.js +37 -37
  451. package/tipos-de-simbolos/rantiaquin.d.ts +2 -2
  452. package/tipos-de-simbolos/rantiaquin.js +3 -3
  453. package/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
  454. package/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
  455. package/tradutores/dicionarios/index.d.ts +1 -1
  456. package/tradutores/dicionarios/index.js +17 -17
  457. package/tradutores/index.d.ts +6 -6
  458. package/tradutores/index.js +22 -22
  459. package/tradutores/python/python3-lexer.d.ts +152 -152
  460. package/tradutores/python/python3-lexer.js +1227 -1227
  461. package/tradutores/python/python3-lexer.js.map +1 -1
  462. package/tradutores/python/python3-listener.d.ts +964 -964
  463. package/tradutores/python/python3-listener.js +3 -3
  464. package/tradutores/python/python3-parser.d.ts +1342 -1342
  465. package/tradutores/python/python3-parser.js +11226 -11226
  466. package/tradutores/python/python3-parser.js.map +1 -1
  467. package/tradutores/python/python3-visitor.d.ts +619 -619
  468. package/tradutores/python/python3-visitor.js +3 -3
  469. package/tradutores/tradutor-assembly-x64.d.ts +19 -19
  470. package/tradutores/tradutor-assembly-x64.js +128 -128
  471. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  472. package/tradutores/tradutor-assemblyscript.d.ts +91 -91
  473. package/tradutores/tradutor-assemblyscript.js +590 -590
  474. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  475. package/tradutores/tradutor-javascript.d.ts +95 -95
  476. package/tradutores/tradutor-javascript.js +577 -577
  477. package/tradutores/tradutor-javascript.js.map +1 -1
  478. package/tradutores/tradutor-portugol-ipt.d.ts +21 -21
  479. package/tradutores/tradutor-portugol-ipt.js +60 -60
  480. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  481. package/tradutores/tradutor-python.d.ts +65 -65
  482. package/tradutores/tradutor-python.js +461 -461
  483. package/tradutores/tradutor-python.js.map +1 -1
  484. package/tradutores/tradutor-reverso-javascript.d.ts +50 -50
  485. package/tradutores/tradutor-reverso-javascript.js +392 -392
  486. package/tradutores/tradutor-reverso-javascript.js.map +1 -1
  487. package/tradutores/tradutor-reverso-python.d.ts +32 -32
  488. package/tradutores/tradutor-reverso-python.js +71 -71
  489. package/tradutores/tradutor-reverso-python.js.map +1 -1
  490. package/umd/delegua.js +26337 -26340
@@ -1,502 +1,502 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.InterpretadorPortugolIpt = void 0;
7
- const espaco_variaveis_1 = require("../../../espaco-variaveis");
8
- const estruturas_1 = require("../../../estruturas");
9
- const excecoes_1 = require("../../../excecoes");
10
- const quebras_1 = require("../../../quebras");
11
- const pilha_escopos_execucao_1 = require("../../pilha-escopos-execucao");
12
- const portugol_ipt_1 = __importDefault(require("../../../tipos-de-simbolos/portugol-ipt"));
13
- const inferenciador_1 = require("../../inferenciador");
14
- class InterpretadorPortugolIpt {
15
- constructor(diretorioBase, funcaoDeRetorno = null, funcaoDeRetornoMesmaLinha = null) {
16
- this.funcaoDeRetorno = null;
17
- this.funcaoDeRetornoMesmaLinha = null;
18
- this.resultadoInterpretador = [];
19
- this.diretorioBase = diretorioBase;
20
- this.funcaoDeRetorno = funcaoDeRetorno || console.log;
21
- this.funcaoDeRetornoMesmaLinha = funcaoDeRetornoMesmaLinha || process.stdout.write.bind(process.stdout);
22
- this.erros = [];
23
- this.declaracoes = [];
24
- this.pilhaEscoposExecucao = new pilha_escopos_execucao_1.PilhaEscoposExecucao();
25
- const escopoExecucao = {
26
- declaracoes: [],
27
- declaracaoAtual: 0,
28
- ambiente: new espaco_variaveis_1.EspacoVariaveis(),
29
- finalizado: false,
30
- tipo: 'outro',
31
- emLacoRepeticao: false,
32
- };
33
- this.pilhaEscoposExecucao.empilhar(escopoExecucao);
34
- }
35
- visitarDeclaracaoComentario(declaracao) {
36
- return Promise.resolve();
37
- }
38
- visitarDeclaracaoTendoComo(declaracao) {
39
- throw new Error('Método não implementado.');
40
- }
41
- visitarDeclaracaoInicioAlgoritmo(declaracao) {
42
- throw new Error('Método não implementado.');
43
- }
44
- visitarDeclaracaoCabecalhoPrograma(declaracao) {
45
- throw new Error('Método não implementado.');
46
- }
47
- visitarExpressaoTupla(expressao) {
48
- throw new Error('Método não implementado.');
49
- }
50
- visitarExpressaoAcessoElementoMatriz(expressao) {
51
- throw new Error('Método não implementado.');
52
- }
53
- visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
54
- throw new Error('Método não implementado.');
55
- }
56
- visitarExpressaoExpressaoRegular(expressao) {
57
- throw new Error('Método não implementado.');
58
- }
59
- visitarExpressaoTipoDe(expressao) {
60
- throw new Error('Método não implementado.');
61
- }
62
- visitarExpressaoQualTipo(expressao) {
63
- throw new Error('Método não implementado.');
64
- }
65
- visitarExpressaoFalhar(expressao) {
66
- throw new Error('Método não implementado.');
67
- }
68
- visitarDeclaracaoParaCada(declaracao) {
69
- throw new Error('Método não implementado.');
70
- }
71
- visitarExpressaoLiteral(expressao) {
72
- return expressao.valor;
73
- }
74
- async avaliar(expressao) {
75
- // Descomente o código abaixo quando precisar detectar expressões undefined ou nulas.
76
- // Por algum motivo o depurador do VSCode não funciona direito aqui
77
- // com breakpoint condicional.
78
- if (expressao === null || expressao === undefined) {
79
- console.log('Aqui');
80
- }
81
- return await expressao.aceitar(this);
82
- }
83
- visitarExpressaoAgrupamento(expressao) {
84
- throw new Error('Método não implementado');
85
- }
86
- visitarExpressaoUnaria(expressao) {
87
- throw new Error('Método não implementado');
88
- }
89
- /**
90
- * Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
91
- * (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
92
- * @param operador O símbolo do operador.
93
- * @param direita O operando direito.
94
- * @param esquerda O operando esquerdo.
95
- * @returns Se ambos os operandos são números ou não.
96
- */
97
- verificarOperandosNumeros(operador, direita, esquerda) {
98
- const tipoDireita = direita.tipo ? direita.tipo : typeof direita === 'number' ? 'número' : String(NaN);
99
- const tipoEsquerda = esquerda.tipo
100
- ? esquerda.tipo
101
- : typeof esquerda === 'number'
102
- ? 'número'
103
- : String(NaN);
104
- const tiposNumericos = ['inteiro', 'numero', 'número', 'real'];
105
- if (tiposNumericos.includes(tipoDireita.toLowerCase()) && tiposNumericos.includes(tipoEsquerda.toLowerCase()))
106
- return;
107
- throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operadores precisam ser números.', operador.linha);
108
- }
109
- eIgual(esquerda, direita) {
110
- if (esquerda === null && direita === null)
111
- return true;
112
- if (esquerda === null)
113
- return false;
114
- return esquerda === direita;
115
- }
116
- async visitarExpressaoBinaria(expressao) {
117
- try {
118
- const esquerda = await this.avaliar(expressao.esquerda);
119
- const direita = await this.avaliar(expressao.direita);
120
- const valorEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('valor')) ? esquerda.valor : esquerda;
121
- const valorDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('valor')) ? direita.valor : direita;
122
- const tipoEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('tipo'))
123
- ? esquerda.tipo
124
- : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
125
- const tipoDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('tipo')) ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
126
- switch (expressao.operador.tipo) {
127
- case portugol_ipt_1.default.EXPONENCIACAO:
128
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
129
- return Math.pow(valorEsquerdo, valorDireito);
130
- case portugol_ipt_1.default.MAIOR:
131
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
132
- return Number(valorEsquerdo) > Number(valorDireito);
133
- case portugol_ipt_1.default.MAIOR_IGUAL:
134
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
135
- return Number(valorEsquerdo) >= Number(valorDireito);
136
- case portugol_ipt_1.default.MENOR:
137
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
138
- return Number(valorEsquerdo) < Number(valorDireito);
139
- case portugol_ipt_1.default.MENOR_IGUAL:
140
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
141
- return Number(valorEsquerdo) <= Number(valorDireito);
142
- case portugol_ipt_1.default.SUBTRACAO:
143
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
144
- return Number(valorEsquerdo) - Number(valorDireito);
145
- case portugol_ipt_1.default.ADICAO:
146
- if (tipoEsquerdo === 'número' && tipoDireito === 'número') {
147
- return Number(valorEsquerdo) + Number(valorDireito);
148
- }
149
- else {
150
- return String(valorEsquerdo) + String(valorDireito);
151
- }
152
- case portugol_ipt_1.default.DIVISAO:
153
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
154
- return Number(valorEsquerdo) / Number(valorDireito);
155
- case portugol_ipt_1.default.DIVISAO_INTEIRA:
156
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
157
- return Math.floor(Number(valorEsquerdo) / Number(valorDireito));
158
- case portugol_ipt_1.default.MULTIPLICACAO:
159
- if (tipoEsquerdo === 'texto' || tipoDireito === 'texto') {
160
- // Sem ambos os valores resolvem como texto, multiplica normal.
161
- // Se apenas um resolve como texto, o outro repete o
162
- // texto n vezes, sendo n o valor do outro.
163
- if (tipoEsquerdo === 'texto' && tipoDireito === 'texto') {
164
- return Number(valorEsquerdo) * Number(valorDireito);
165
- }
166
- if (tipoEsquerdo === 'texto') {
167
- return valorEsquerdo.repeat(Number(valorDireito));
168
- }
169
- return valorDireito.repeat(Number(valorEsquerdo));
170
- }
171
- return Number(valorEsquerdo) * Number(valorDireito);
172
- case portugol_ipt_1.default.MODULO:
173
- this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
174
- return Number(valorEsquerdo) % Number(valorDireito);
175
- case portugol_ipt_1.default.DIFERENTE:
176
- return !this.eIgual(valorEsquerdo, valorDireito);
177
- case portugol_ipt_1.default.IGUAL:
178
- return this.eIgual(valorEsquerdo, valorDireito);
179
- }
180
- }
181
- catch (erro) {
182
- return Promise.reject(erro);
183
- }
184
- }
185
- visitarExpressaoDeChamada(expressao) {
186
- throw new Error('Método não implementado');
187
- }
188
- visitarExpressaoDeAtribuicao(expressao) {
189
- throw new Error('Método não implementado');
190
- }
191
- procurarVariavel(simbolo) {
192
- return this.pilhaEscoposExecucao.obterValorVariavel(simbolo);
193
- }
194
- visitarExpressaoDeVariavel(expressao) {
195
- return this.procurarVariavel(expressao.simbolo);
196
- }
197
- visitarDeclaracaoDeExpressao(declaracao) {
198
- throw new Error('Método não implementado');
199
- }
200
- /**
201
- * Execução da leitura de valores da entrada configurada no
202
- * início da aplicação.
203
- * @param expressao Expressão do tipo Leia
204
- * @returns Promise com o resultado da leitura.
205
- */
206
- async visitarExpressaoLeia(expressao) {
207
- const mensagem = expressao.argumentos && expressao.argumentos[0] ? expressao.argumentos[0].valor : '> ';
208
- return new Promise((resolucao) => this.interfaceEntradaSaida.question(mensagem, (resposta) => {
209
- resolucao(resposta);
210
- }));
211
- }
212
- visitarExpressaoLeiaMultiplo(expressao) {
213
- throw new Error('Método não implementado');
214
- }
215
- visitarExpressaoLogica(expressao) {
216
- throw new Error('Método não implementado');
217
- }
218
- eVerdadeiro(objeto) {
219
- if (objeto === null)
220
- return false;
221
- if (typeof objeto === 'boolean')
222
- return Boolean(objeto);
223
- if (objeto.hasOwnProperty('valor')) {
224
- return Boolean(objeto.valor);
225
- }
226
- return true;
227
- }
228
- /**
229
- * Executa uma expressão Se, que tem uma condição, pode ter um bloco
230
- * Senão, e múltiplos blocos Senão-se.
231
- * @param declaracao A declaração Se.
232
- * @returns O resultado da avaliação do bloco cuja condição é verdadeira.
233
- */
234
- async visitarDeclaracaoSe(declaracao) {
235
- if (this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
236
- return await this.executar(declaracao.caminhoEntao);
237
- }
238
- if (declaracao.caminhoSenao !== null) {
239
- return await this.executar(declaracao.caminhoSenao);
240
- }
241
- return null;
242
- }
243
- visitarDeclaracaoPara(declaracao) {
244
- return Promise.reject('Método não implementado');
245
- }
246
- visitarExpressaoFimPara(declaracao) {
247
- throw new Error('Método não implementado');
248
- }
249
- visitarDeclaracaoFazer(declaracao) {
250
- throw new Error('Método não implementado');
251
- }
252
- async visitarExpressaoFormatacaoEscrita(declaracao) {
253
- let resultado = '';
254
- const conteudo = await this.avaliar(declaracao.expressao);
255
- const valorConteudo = (conteudo === null || conteudo === void 0 ? void 0 : conteudo.hasOwnProperty('valor')) ? conteudo.valor : conteudo;
256
- const tipoConteudo = conteudo.hasOwnProperty('tipo') ? conteudo.tipo : typeof conteudo;
257
- resultado = valorConteudo;
258
- if (['número', 'number'].includes(tipoConteudo) && declaracao.casasDecimais > 0) {
259
- resultado = valorConteudo.toLocaleString('pt', { maximumFractionDigits: declaracao.casasDecimais });
260
- }
261
- if (declaracao.espacos > 0) {
262
- resultado += ' '.repeat(declaracao.espacos);
263
- }
264
- return resultado;
265
- }
266
- visitarDeclaracaoEscolha(declaracao) {
267
- throw new Error('Método não implementado');
268
- }
269
- visitarDeclaracaoTente(declaracao) {
270
- throw new Error('Método não implementado');
271
- }
272
- visitarDeclaracaoEnquanto(declaracao) {
273
- throw new Error('Método não implementado');
274
- }
275
- visitarDeclaracaoImportar(declaracao) {
276
- throw new Error('Método não implementado');
277
- }
278
- async avaliarArgumentosEscreva(argumentos) {
279
- let formatoTexto = '';
280
- for (const argumento of argumentos) {
281
- const resultadoAvaliacao = await this.avaliar(argumento);
282
- let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor')) ? resultadoAvaliacao.valor : resultadoAvaliacao;
283
- formatoTexto += `${this.paraTexto(valor)} `;
284
- }
285
- return formatoTexto.trimEnd();
286
- }
287
- /**
288
- * Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
289
- * alguma função para escrever numa página Web.
290
- * @param declaracao A declaração.
291
- * @returns Sempre nulo, por convenção de visita.
292
- */
293
- async visitarDeclaracaoEscreva(declaracao) {
294
- try {
295
- const formatoTexto = await this.avaliarArgumentosEscreva(declaracao.argumentos);
296
- this.funcaoDeRetorno(formatoTexto);
297
- return null;
298
- }
299
- catch (erro) {
300
- this.erros.push({
301
- erroInterno: erro,
302
- linha: declaracao.linha,
303
- hashArquivo: declaracao.hashArquivo,
304
- });
305
- }
306
- }
307
- async visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
308
- try {
309
- const formatoTexto = await this.avaliarArgumentosEscreva(declaracao.argumentos);
310
- this.funcaoDeRetornoMesmaLinha(formatoTexto);
311
- return null;
312
- }
313
- catch (erro) {
314
- this.erros.push({
315
- erroInterno: erro,
316
- linha: declaracao.linha,
317
- hashArquivo: declaracao.hashArquivo,
318
- });
319
- }
320
- }
321
- executarBloco(declaracoes, ambiente) {
322
- throw new Error('Método não implementado');
323
- }
324
- visitarExpressaoBloco(declaracao) {
325
- throw new Error('Método não implementado');
326
- }
327
- async avaliacaoDeclaracaoVar(declaracao) {
328
- let valorOuOutraVariavel = null;
329
- if (declaracao.inicializador !== null) {
330
- valorOuOutraVariavel = await this.avaliar(declaracao.inicializador);
331
- }
332
- let valorFinal = null;
333
- if (valorOuOutraVariavel !== null && valorOuOutraVariavel !== undefined) {
334
- valorFinal = valorOuOutraVariavel.hasOwnProperty('valor')
335
- ? valorOuOutraVariavel.valor
336
- : valorOuOutraVariavel;
337
- }
338
- return valorFinal;
339
- }
340
- /**
341
- * Executa expressão de definição de variável.
342
- * @param declaracao A declaração Var
343
- * @returns Sempre retorna nulo.
344
- */
345
- async visitarDeclaracaoVar(declaracao) {
346
- const valorFinal = await this.avaliacaoDeclaracaoVar(declaracao);
347
- this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, valorFinal, declaracao.tipo);
348
- return null;
349
- }
350
- visitarDeclaracaoVarMultiplo(declaracao) {
351
- throw new Error('Método não implementado');
352
- }
353
- visitarDeclaracaoConst(declaracao) {
354
- throw new Error('Método não implementado');
355
- }
356
- visitarDeclaracaoConstMultiplo(declaracao) {
357
- throw new Error('Método não implementado');
358
- }
359
- visitarExpressaoContinua(declaracao) {
360
- throw new Error('Método não implementado');
361
- }
362
- visitarExpressaoSustar(declaracao) {
363
- throw new Error('Método não implementado');
364
- }
365
- visitarExpressaoRetornar(declaracao) {
366
- throw new Error('Método não implementado');
367
- }
368
- visitarExpressaoDeleguaFuncao(expressao) {
369
- throw new Error('Método não implementado');
370
- }
371
- visitarExpressaoAtribuicaoPorIndice(expressao) {
372
- throw new Error('Método não implementado');
373
- }
374
- visitarExpressaoAcessoIndiceVariavel(expressao) {
375
- throw new Error('Método não implementado');
376
- }
377
- visitarExpressaoDefinirValor(expressao) {
378
- throw new Error('Método não implementado');
379
- }
380
- visitarDeclaracaoDefinicaoFuncao(declaracao) {
381
- throw new Error('Método não implementado');
382
- }
383
- visitarDeclaracaoClasse(declaracao) {
384
- throw new Error('Método não implementado');
385
- }
386
- visitarExpressaoAcessoMetodo(expressao) {
387
- throw new Error('Método não implementado');
388
- }
389
- visitarExpressaoIsto(expressao) {
390
- throw new Error('Método não implementado');
391
- }
392
- visitarExpressaoDicionario(expressao) {
393
- throw new Error('Método não implementado');
394
- }
395
- visitarExpressaoVetor(expressao) {
396
- throw new Error('Método não implementado');
397
- }
398
- visitarExpressaoSuper(expressao) {
399
- throw new Error('Método não implementado');
400
- }
401
- paraTexto(objeto) {
402
- if (objeto === null || objeto === undefined)
403
- return 'nulo';
404
- if (typeof objeto === 'boolean') {
405
- return objeto ? 'verdadeiro' : 'falso';
406
- }
407
- if (objeto instanceof Date) {
408
- const formato = Intl.DateTimeFormat('pt', {
409
- dateStyle: 'full',
410
- timeStyle: 'full',
411
- });
412
- return formato.format(objeto);
413
- }
414
- if (Array.isArray(objeto))
415
- return objeto;
416
- if (objeto.valor instanceof estruturas_1.ObjetoPadrao)
417
- return objeto.valor.paraTexto();
418
- if (typeof objeto === 'object')
419
- return JSON.stringify(objeto);
420
- return objeto.toString();
421
- }
422
- /**
423
- * Efetivamente executa uma declaração.
424
- * @param declaracao A declaração a ser executada.
425
- * @param mostrarResultado Se resultado deve ser mostrado ou não. Normalmente usado
426
- * pelo modo LAIR.
427
- */
428
- async executar(declaracao, mostrarResultado = false) {
429
- const resultado = await declaracao.aceitar(this);
430
- if (mostrarResultado) {
431
- this.funcaoDeRetorno(this.paraTexto(resultado));
432
- }
433
- if (resultado || typeof resultado === 'boolean') {
434
- this.resultadoInterpretador.push(this.paraTexto(resultado));
435
- }
436
- return resultado;
437
- }
438
- visitarDeclaracaoAleatorio(declaracao) {
439
- throw new Error('Método não implementado.');
440
- }
441
- /**
442
- * Executa o último escopo empilhado no topo na pilha de escopos do interpretador.
443
- * Esse método pega exceções, mas apenas as devolve.
444
- *
445
- * O tratamento das exceções é feito de acordo com o bloco chamador.
446
- * Por exemplo, em `tente ... pegue ... finalmente`, a exceção é capturada e tratada.
447
- * Em outros blocos, pode ser desejável ter o erro em tela.
448
- * @param manterAmbiente Se verdadeiro, ambiente do topo da pilha de escopo é copiado para o ambiente imediatamente abaixo.
449
- * @returns O resultado da execução do escopo, se houver.
450
- */
451
- async executarUltimoEscopo(manterAmbiente = false) {
452
- const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
453
- try {
454
- let retornoExecucao;
455
- for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
456
- retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
457
- }
458
- return retornoExecucao;
459
- }
460
- catch (erro) {
461
- return Promise.reject(erro);
462
- }
463
- finally {
464
- this.pilhaEscoposExecucao.removerUltimo();
465
- if (manterAmbiente) {
466
- const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
467
- escopoAnterior.ambiente.valores = Object.assign(escopoAnterior.ambiente.valores, ultimoEscopo.ambiente.valores);
468
- }
469
- }
470
- }
471
- async interpretar(declaracoes, manterAmbiente) {
472
- this.erros = [];
473
- const escopoExecucao = {
474
- declaracoes: declaracoes,
475
- declaracaoAtual: 0,
476
- ambiente: new espaco_variaveis_1.EspacoVariaveis(),
477
- finalizado: false,
478
- tipo: 'outro',
479
- emLacoRepeticao: false,
480
- };
481
- this.pilhaEscoposExecucao.empilhar(escopoExecucao);
482
- try {
483
- const retornoOuErro = await this.executarUltimoEscopo(manterAmbiente);
484
- if (retornoOuErro instanceof excecoes_1.ErroEmTempoDeExecucao) {
485
- this.erros.push(retornoOuErro);
486
- }
487
- }
488
- catch (erro) {
489
- this.erros.push(erro);
490
- }
491
- finally {
492
- const retorno = {
493
- erros: this.erros,
494
- resultado: this.resultadoInterpretador,
495
- };
496
- this.resultadoInterpretador = [];
497
- return retorno;
498
- }
499
- }
500
- }
501
- exports.InterpretadorPortugolIpt = InterpretadorPortugolIpt;
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.InterpretadorPortugolIpt = void 0;
7
+ const espaco_variaveis_1 = require("../../../espaco-variaveis");
8
+ const estruturas_1 = require("../../../estruturas");
9
+ const excecoes_1 = require("../../../excecoes");
10
+ const quebras_1 = require("../../../quebras");
11
+ const pilha_escopos_execucao_1 = require("../../pilha-escopos-execucao");
12
+ const portugol_ipt_1 = __importDefault(require("../../../tipos-de-simbolos/portugol-ipt"));
13
+ const inferenciador_1 = require("../../inferenciador");
14
+ class InterpretadorPortugolIpt {
15
+ constructor(diretorioBase, funcaoDeRetorno = null, funcaoDeRetornoMesmaLinha = null) {
16
+ this.funcaoDeRetorno = null;
17
+ this.funcaoDeRetornoMesmaLinha = null;
18
+ this.resultadoInterpretador = [];
19
+ this.diretorioBase = diretorioBase;
20
+ this.funcaoDeRetorno = funcaoDeRetorno || console.log;
21
+ this.funcaoDeRetornoMesmaLinha = funcaoDeRetornoMesmaLinha || process.stdout.write.bind(process.stdout);
22
+ this.erros = [];
23
+ this.declaracoes = [];
24
+ this.pilhaEscoposExecucao = new pilha_escopos_execucao_1.PilhaEscoposExecucao();
25
+ const escopoExecucao = {
26
+ declaracoes: [],
27
+ declaracaoAtual: 0,
28
+ ambiente: new espaco_variaveis_1.EspacoVariaveis(),
29
+ finalizado: false,
30
+ tipo: 'outro',
31
+ emLacoRepeticao: false,
32
+ };
33
+ this.pilhaEscoposExecucao.empilhar(escopoExecucao);
34
+ }
35
+ visitarDeclaracaoComentario(declaracao) {
36
+ return Promise.resolve();
37
+ }
38
+ visitarDeclaracaoTendoComo(declaracao) {
39
+ throw new Error('Método não implementado.');
40
+ }
41
+ visitarDeclaracaoInicioAlgoritmo(declaracao) {
42
+ throw new Error('Método não implementado.');
43
+ }
44
+ visitarDeclaracaoCabecalhoPrograma(declaracao) {
45
+ throw new Error('Método não implementado.');
46
+ }
47
+ visitarExpressaoTupla(expressao) {
48
+ throw new Error('Método não implementado.');
49
+ }
50
+ visitarExpressaoAcessoElementoMatriz(expressao) {
51
+ throw new Error('Método não implementado.');
52
+ }
53
+ visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
54
+ throw new Error('Método não implementado.');
55
+ }
56
+ visitarExpressaoExpressaoRegular(expressao) {
57
+ throw new Error('Método não implementado.');
58
+ }
59
+ visitarExpressaoTipoDe(expressao) {
60
+ throw new Error('Método não implementado.');
61
+ }
62
+ visitarExpressaoQualTipo(expressao) {
63
+ throw new Error('Método não implementado.');
64
+ }
65
+ visitarExpressaoFalhar(expressao) {
66
+ throw new Error('Método não implementado.');
67
+ }
68
+ visitarDeclaracaoParaCada(declaracao) {
69
+ throw new Error('Método não implementado.');
70
+ }
71
+ visitarExpressaoLiteral(expressao) {
72
+ return expressao.valor;
73
+ }
74
+ async avaliar(expressao) {
75
+ // Descomente o código abaixo quando precisar detectar expressões undefined ou nulas.
76
+ // Por algum motivo o depurador do VSCode não funciona direito aqui
77
+ // com breakpoint condicional.
78
+ if (expressao === null || expressao === undefined) {
79
+ console.log('Aqui');
80
+ }
81
+ return await expressao.aceitar(this);
82
+ }
83
+ visitarExpressaoAgrupamento(expressao) {
84
+ throw new Error('Método não implementado');
85
+ }
86
+ visitarExpressaoUnaria(expressao) {
87
+ throw new Error('Método não implementado');
88
+ }
89
+ /**
90
+ * Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
91
+ * (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
92
+ * @param operador O símbolo do operador.
93
+ * @param direita O operando direito.
94
+ * @param esquerda O operando esquerdo.
95
+ * @returns Se ambos os operandos são números ou não.
96
+ */
97
+ verificarOperandosNumeros(operador, direita, esquerda) {
98
+ const tipoDireita = direita.tipo ? direita.tipo : typeof direita === 'number' ? 'número' : String(NaN);
99
+ const tipoEsquerda = esquerda.tipo
100
+ ? esquerda.tipo
101
+ : typeof esquerda === 'number'
102
+ ? 'número'
103
+ : String(NaN);
104
+ const tiposNumericos = ['inteiro', 'numero', 'número', 'real'];
105
+ if (tiposNumericos.includes(tipoDireita.toLowerCase()) && tiposNumericos.includes(tipoEsquerda.toLowerCase()))
106
+ return;
107
+ throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operadores precisam ser números.', operador.linha);
108
+ }
109
+ eIgual(esquerda, direita) {
110
+ if (esquerda === null && direita === null)
111
+ return true;
112
+ if (esquerda === null)
113
+ return false;
114
+ return esquerda === direita;
115
+ }
116
+ async visitarExpressaoBinaria(expressao) {
117
+ try {
118
+ const esquerda = await this.avaliar(expressao.esquerda);
119
+ const direita = await this.avaliar(expressao.direita);
120
+ const valorEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('valor')) ? esquerda.valor : esquerda;
121
+ const valorDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('valor')) ? direita.valor : direita;
122
+ const tipoEsquerdo = (esquerda === null || esquerda === void 0 ? void 0 : esquerda.hasOwnProperty('tipo'))
123
+ ? esquerda.tipo
124
+ : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
125
+ const tipoDireito = (direita === null || direita === void 0 ? void 0 : direita.hasOwnProperty('tipo')) ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
126
+ switch (expressao.operador.tipo) {
127
+ case portugol_ipt_1.default.EXPONENCIACAO:
128
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
129
+ return Math.pow(valorEsquerdo, valorDireito);
130
+ case portugol_ipt_1.default.MAIOR:
131
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
132
+ return Number(valorEsquerdo) > Number(valorDireito);
133
+ case portugol_ipt_1.default.MAIOR_IGUAL:
134
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
135
+ return Number(valorEsquerdo) >= Number(valorDireito);
136
+ case portugol_ipt_1.default.MENOR:
137
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
138
+ return Number(valorEsquerdo) < Number(valorDireito);
139
+ case portugol_ipt_1.default.MENOR_IGUAL:
140
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
141
+ return Number(valorEsquerdo) <= Number(valorDireito);
142
+ case portugol_ipt_1.default.SUBTRACAO:
143
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
144
+ return Number(valorEsquerdo) - Number(valorDireito);
145
+ case portugol_ipt_1.default.ADICAO:
146
+ if (tipoEsquerdo === 'número' && tipoDireito === 'número') {
147
+ return Number(valorEsquerdo) + Number(valorDireito);
148
+ }
149
+ else {
150
+ return String(valorEsquerdo) + String(valorDireito);
151
+ }
152
+ case portugol_ipt_1.default.DIVISAO:
153
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
154
+ return Number(valorEsquerdo) / Number(valorDireito);
155
+ case portugol_ipt_1.default.DIVISAO_INTEIRA:
156
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
157
+ return Math.floor(Number(valorEsquerdo) / Number(valorDireito));
158
+ case portugol_ipt_1.default.MULTIPLICACAO:
159
+ if (tipoEsquerdo === 'texto' || tipoDireito === 'texto') {
160
+ // Sem ambos os valores resolvem como texto, multiplica normal.
161
+ // Se apenas um resolve como texto, o outro repete o
162
+ // texto n vezes, sendo n o valor do outro.
163
+ if (tipoEsquerdo === 'texto' && tipoDireito === 'texto') {
164
+ return Number(valorEsquerdo) * Number(valorDireito);
165
+ }
166
+ if (tipoEsquerdo === 'texto') {
167
+ return valorEsquerdo.repeat(Number(valorDireito));
168
+ }
169
+ return valorDireito.repeat(Number(valorEsquerdo));
170
+ }
171
+ return Number(valorEsquerdo) * Number(valorDireito);
172
+ case portugol_ipt_1.default.MODULO:
173
+ this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
174
+ return Number(valorEsquerdo) % Number(valorDireito);
175
+ case portugol_ipt_1.default.DIFERENTE:
176
+ return !this.eIgual(valorEsquerdo, valorDireito);
177
+ case portugol_ipt_1.default.IGUAL:
178
+ return this.eIgual(valorEsquerdo, valorDireito);
179
+ }
180
+ }
181
+ catch (erro) {
182
+ return Promise.reject(erro);
183
+ }
184
+ }
185
+ visitarExpressaoDeChamada(expressao) {
186
+ throw new Error('Método não implementado');
187
+ }
188
+ visitarExpressaoDeAtribuicao(expressao) {
189
+ throw new Error('Método não implementado');
190
+ }
191
+ procurarVariavel(simbolo) {
192
+ return this.pilhaEscoposExecucao.obterValorVariavel(simbolo);
193
+ }
194
+ visitarExpressaoDeVariavel(expressao) {
195
+ return this.procurarVariavel(expressao.simbolo);
196
+ }
197
+ visitarDeclaracaoDeExpressao(declaracao) {
198
+ throw new Error('Método não implementado');
199
+ }
200
+ /**
201
+ * Execução da leitura de valores da entrada configurada no
202
+ * início da aplicação.
203
+ * @param expressao Expressão do tipo Leia
204
+ * @returns Promise com o resultado da leitura.
205
+ */
206
+ async visitarExpressaoLeia(expressao) {
207
+ const mensagem = expressao.argumentos && expressao.argumentos[0] ? expressao.argumentos[0].valor : '> ';
208
+ return new Promise((resolucao) => this.interfaceEntradaSaida.question(mensagem, (resposta) => {
209
+ resolucao(resposta);
210
+ }));
211
+ }
212
+ visitarExpressaoLeiaMultiplo(expressao) {
213
+ throw new Error('Método não implementado');
214
+ }
215
+ visitarExpressaoLogica(expressao) {
216
+ throw new Error('Método não implementado');
217
+ }
218
+ eVerdadeiro(objeto) {
219
+ if (objeto === null)
220
+ return false;
221
+ if (typeof objeto === 'boolean')
222
+ return Boolean(objeto);
223
+ if (objeto.hasOwnProperty('valor')) {
224
+ return Boolean(objeto.valor);
225
+ }
226
+ return true;
227
+ }
228
+ /**
229
+ * Executa uma expressão Se, que tem uma condição, pode ter um bloco
230
+ * Senão, e múltiplos blocos Senão-se.
231
+ * @param declaracao A declaração Se.
232
+ * @returns O resultado da avaliação do bloco cuja condição é verdadeira.
233
+ */
234
+ async visitarDeclaracaoSe(declaracao) {
235
+ if (this.eVerdadeiro(await this.avaliar(declaracao.condicao))) {
236
+ return await this.executar(declaracao.caminhoEntao);
237
+ }
238
+ if (declaracao.caminhoSenao !== null) {
239
+ return await this.executar(declaracao.caminhoSenao);
240
+ }
241
+ return null;
242
+ }
243
+ visitarDeclaracaoPara(declaracao) {
244
+ return Promise.reject('Método não implementado');
245
+ }
246
+ visitarExpressaoFimPara(declaracao) {
247
+ throw new Error('Método não implementado');
248
+ }
249
+ visitarDeclaracaoFazer(declaracao) {
250
+ throw new Error('Método não implementado');
251
+ }
252
+ async visitarExpressaoFormatacaoEscrita(declaracao) {
253
+ let resultado = '';
254
+ const conteudo = await this.avaliar(declaracao.expressao);
255
+ const valorConteudo = (conteudo === null || conteudo === void 0 ? void 0 : conteudo.hasOwnProperty('valor')) ? conteudo.valor : conteudo;
256
+ const tipoConteudo = conteudo.hasOwnProperty('tipo') ? conteudo.tipo : typeof conteudo;
257
+ resultado = valorConteudo;
258
+ if (['número', 'number'].includes(tipoConteudo) && declaracao.casasDecimais > 0) {
259
+ resultado = valorConteudo.toLocaleString('pt', { maximumFractionDigits: declaracao.casasDecimais });
260
+ }
261
+ if (declaracao.espacos > 0) {
262
+ resultado += ' '.repeat(declaracao.espacos);
263
+ }
264
+ return resultado;
265
+ }
266
+ visitarDeclaracaoEscolha(declaracao) {
267
+ throw new Error('Método não implementado');
268
+ }
269
+ visitarDeclaracaoTente(declaracao) {
270
+ throw new Error('Método não implementado');
271
+ }
272
+ visitarDeclaracaoEnquanto(declaracao) {
273
+ throw new Error('Método não implementado');
274
+ }
275
+ visitarDeclaracaoImportar(declaracao) {
276
+ throw new Error('Método não implementado');
277
+ }
278
+ async avaliarArgumentosEscreva(argumentos) {
279
+ let formatoTexto = '';
280
+ for (const argumento of argumentos) {
281
+ const resultadoAvaliacao = await this.avaliar(argumento);
282
+ let valor = (resultadoAvaliacao === null || resultadoAvaliacao === void 0 ? void 0 : resultadoAvaliacao.hasOwnProperty('valor')) ? resultadoAvaliacao.valor : resultadoAvaliacao;
283
+ formatoTexto += `${this.paraTexto(valor)} `;
284
+ }
285
+ return formatoTexto.trimEnd();
286
+ }
287
+ /**
288
+ * Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
289
+ * alguma função para escrever numa página Web.
290
+ * @param declaracao A declaração.
291
+ * @returns Sempre nulo, por convenção de visita.
292
+ */
293
+ async visitarDeclaracaoEscreva(declaracao) {
294
+ try {
295
+ const formatoTexto = await this.avaliarArgumentosEscreva(declaracao.argumentos);
296
+ this.funcaoDeRetorno(formatoTexto);
297
+ return null;
298
+ }
299
+ catch (erro) {
300
+ this.erros.push({
301
+ erroInterno: erro,
302
+ linha: declaracao.linha,
303
+ hashArquivo: declaracao.hashArquivo,
304
+ });
305
+ }
306
+ }
307
+ async visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
308
+ try {
309
+ const formatoTexto = await this.avaliarArgumentosEscreva(declaracao.argumentos);
310
+ this.funcaoDeRetornoMesmaLinha(formatoTexto);
311
+ return null;
312
+ }
313
+ catch (erro) {
314
+ this.erros.push({
315
+ erroInterno: erro,
316
+ linha: declaracao.linha,
317
+ hashArquivo: declaracao.hashArquivo,
318
+ });
319
+ }
320
+ }
321
+ executarBloco(declaracoes, ambiente) {
322
+ throw new Error('Método não implementado');
323
+ }
324
+ visitarExpressaoBloco(declaracao) {
325
+ throw new Error('Método não implementado');
326
+ }
327
+ async avaliacaoDeclaracaoVar(declaracao) {
328
+ let valorOuOutraVariavel = null;
329
+ if (declaracao.inicializador !== null) {
330
+ valorOuOutraVariavel = await this.avaliar(declaracao.inicializador);
331
+ }
332
+ let valorFinal = null;
333
+ if (valorOuOutraVariavel !== null && valorOuOutraVariavel !== undefined) {
334
+ valorFinal = valorOuOutraVariavel.hasOwnProperty('valor')
335
+ ? valorOuOutraVariavel.valor
336
+ : valorOuOutraVariavel;
337
+ }
338
+ return valorFinal;
339
+ }
340
+ /**
341
+ * Executa expressão de definição de variável.
342
+ * @param declaracao A declaração Var
343
+ * @returns Sempre retorna nulo.
344
+ */
345
+ async visitarDeclaracaoVar(declaracao) {
346
+ const valorFinal = await this.avaliacaoDeclaracaoVar(declaracao);
347
+ this.pilhaEscoposExecucao.definirVariavel(declaracao.simbolo.lexema, valorFinal, declaracao.tipo);
348
+ return null;
349
+ }
350
+ visitarDeclaracaoVarMultiplo(declaracao) {
351
+ throw new Error('Método não implementado');
352
+ }
353
+ visitarDeclaracaoConst(declaracao) {
354
+ throw new Error('Método não implementado');
355
+ }
356
+ visitarDeclaracaoConstMultiplo(declaracao) {
357
+ throw new Error('Método não implementado');
358
+ }
359
+ visitarExpressaoContinua(declaracao) {
360
+ throw new Error('Método não implementado');
361
+ }
362
+ visitarExpressaoSustar(declaracao) {
363
+ throw new Error('Método não implementado');
364
+ }
365
+ visitarExpressaoRetornar(declaracao) {
366
+ throw new Error('Método não implementado');
367
+ }
368
+ visitarExpressaoDeleguaFuncao(expressao) {
369
+ throw new Error('Método não implementado');
370
+ }
371
+ visitarExpressaoAtribuicaoPorIndice(expressao) {
372
+ throw new Error('Método não implementado');
373
+ }
374
+ visitarExpressaoAcessoIndiceVariavel(expressao) {
375
+ throw new Error('Método não implementado');
376
+ }
377
+ visitarExpressaoDefinirValor(expressao) {
378
+ throw new Error('Método não implementado');
379
+ }
380
+ visitarDeclaracaoDefinicaoFuncao(declaracao) {
381
+ throw new Error('Método não implementado');
382
+ }
383
+ visitarDeclaracaoClasse(declaracao) {
384
+ throw new Error('Método não implementado');
385
+ }
386
+ visitarExpressaoAcessoMetodo(expressao) {
387
+ throw new Error('Método não implementado');
388
+ }
389
+ visitarExpressaoIsto(expressao) {
390
+ throw new Error('Método não implementado');
391
+ }
392
+ visitarExpressaoDicionario(expressao) {
393
+ throw new Error('Método não implementado');
394
+ }
395
+ visitarExpressaoVetor(expressao) {
396
+ throw new Error('Método não implementado');
397
+ }
398
+ visitarExpressaoSuper(expressao) {
399
+ throw new Error('Método não implementado');
400
+ }
401
+ paraTexto(objeto) {
402
+ if (objeto === null || objeto === undefined)
403
+ return 'nulo';
404
+ if (typeof objeto === 'boolean') {
405
+ return objeto ? 'verdadeiro' : 'falso';
406
+ }
407
+ if (objeto instanceof Date) {
408
+ const formato = Intl.DateTimeFormat('pt', {
409
+ dateStyle: 'full',
410
+ timeStyle: 'full',
411
+ });
412
+ return formato.format(objeto);
413
+ }
414
+ if (Array.isArray(objeto))
415
+ return objeto;
416
+ if (objeto.valor instanceof estruturas_1.ObjetoPadrao)
417
+ return objeto.valor.paraTexto();
418
+ if (typeof objeto === 'object')
419
+ return JSON.stringify(objeto);
420
+ return objeto.toString();
421
+ }
422
+ /**
423
+ * Efetivamente executa uma declaração.
424
+ * @param declaracao A declaração a ser executada.
425
+ * @param mostrarResultado Se resultado deve ser mostrado ou não. Normalmente usado
426
+ * pelo modo LAIR.
427
+ */
428
+ async executar(declaracao, mostrarResultado = false) {
429
+ const resultado = await declaracao.aceitar(this);
430
+ if (mostrarResultado) {
431
+ this.funcaoDeRetorno(this.paraTexto(resultado));
432
+ }
433
+ if (resultado || typeof resultado === 'boolean') {
434
+ this.resultadoInterpretador.push(this.paraTexto(resultado));
435
+ }
436
+ return resultado;
437
+ }
438
+ visitarDeclaracaoAleatorio(declaracao) {
439
+ throw new Error('Método não implementado.');
440
+ }
441
+ /**
442
+ * Executa o último escopo empilhado no topo na pilha de escopos do interpretador.
443
+ * Esse método pega exceções, mas apenas as devolve.
444
+ *
445
+ * O tratamento das exceções é feito de acordo com o bloco chamador.
446
+ * Por exemplo, em `tente ... pegue ... finalmente`, a exceção é capturada e tratada.
447
+ * Em outros blocos, pode ser desejável ter o erro em tela.
448
+ * @param manterAmbiente Se verdadeiro, ambiente do topo da pilha de escopo é copiado para o ambiente imediatamente abaixo.
449
+ * @returns O resultado da execução do escopo, se houver.
450
+ */
451
+ async executarUltimoEscopo(manterAmbiente = false) {
452
+ const ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
453
+ try {
454
+ let retornoExecucao;
455
+ for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
456
+ retornoExecucao = await this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
457
+ }
458
+ return retornoExecucao;
459
+ }
460
+ catch (erro) {
461
+ return Promise.reject(erro);
462
+ }
463
+ finally {
464
+ this.pilhaEscoposExecucao.removerUltimo();
465
+ if (manterAmbiente) {
466
+ const escopoAnterior = this.pilhaEscoposExecucao.topoDaPilha();
467
+ escopoAnterior.ambiente.valores = Object.assign(escopoAnterior.ambiente.valores, ultimoEscopo.ambiente.valores);
468
+ }
469
+ }
470
+ }
471
+ async interpretar(declaracoes, manterAmbiente) {
472
+ this.erros = [];
473
+ const escopoExecucao = {
474
+ declaracoes: declaracoes,
475
+ declaracaoAtual: 0,
476
+ ambiente: new espaco_variaveis_1.EspacoVariaveis(),
477
+ finalizado: false,
478
+ tipo: 'outro',
479
+ emLacoRepeticao: false,
480
+ };
481
+ this.pilhaEscoposExecucao.empilhar(escopoExecucao);
482
+ try {
483
+ const retornoOuErro = await this.executarUltimoEscopo(manterAmbiente);
484
+ if (retornoOuErro instanceof excecoes_1.ErroEmTempoDeExecucao) {
485
+ this.erros.push(retornoOuErro);
486
+ }
487
+ }
488
+ catch (erro) {
489
+ this.erros.push(erro);
490
+ }
491
+ finally {
492
+ const retorno = {
493
+ erros: this.erros,
494
+ resultado: this.resultadoInterpretador,
495
+ };
496
+ this.resultadoInterpretador = [];
497
+ return retorno;
498
+ }
499
+ }
500
+ }
501
+ exports.InterpretadorPortugolIpt = InterpretadorPortugolIpt;
502
502
  //# sourceMappingURL=interpretador-portugol-ipt.js.map