@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,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