@designliquido/delegua 0.36.1 → 0.37.0

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