@designliquido/delegua 0.14.6 → 0.15.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 (346) hide show
  1. package/README.md +85 -85
  2. package/bin/delegua +2 -2
  3. package/bin/package.json +88 -88
  4. package/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +67 -67
  5. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +215 -215
  6. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  7. package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +92 -92
  8. package/fontes/avaliador-sintatico/avaliador-sintatico.js +857 -727
  9. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  10. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.d.ts +22 -22
  11. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +145 -145
  12. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +69 -69
  13. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +640 -640
  14. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  15. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.d.ts +84 -84
  16. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js +714 -714
  17. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +1 -1
  18. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +20 -20
  19. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +149 -149
  20. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.d.ts +49 -32
  21. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js +419 -192
  22. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js.map +1 -1
  23. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +73 -73
  24. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +534 -534
  25. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
  26. package/fontes/avaliador-sintatico/dialetos/index.d.ts +5 -5
  27. package/fontes/avaliador-sintatico/dialetos/index.js +21 -21
  28. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
  29. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
  30. package/fontes/avaliador-sintatico/index.d.ts +2 -2
  31. package/fontes/avaliador-sintatico/index.js +18 -18
  32. package/fontes/avaliador-sintatico/retornos/index.d.ts +3 -3
  33. package/fontes/avaliador-sintatico/retornos/index.js +19 -19
  34. package/fontes/avaliador-sintatico/retornos/retorno-declaracao.d.ts +3 -3
  35. package/fontes/avaliador-sintatico/retornos/retorno-declaracao.js +2 -2
  36. package/fontes/avaliador-sintatico/retornos/retorno-primario.d.ts +3 -3
  37. package/fontes/avaliador-sintatico/retornos/retorno-primario.js +2 -2
  38. package/fontes/avaliador-sintatico/retornos/retorno-resolver-declaracao.d.ts +2 -2
  39. package/fontes/avaliador-sintatico/retornos/retorno-resolver-declaracao.js +2 -2
  40. package/fontes/bibliotecas/biblioteca-global.d.ts +3 -3
  41. package/fontes/bibliotecas/biblioteca-global.js +315 -315
  42. package/fontes/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts +1 -1
  43. package/fontes/bibliotecas/dialetos/egua-classico/biblioteca-global.js +230 -230
  44. package/fontes/bibliotecas/dialetos/egua-classico/index.d.ts +2 -2
  45. package/fontes/bibliotecas/dialetos/egua-classico/index.js +32 -32
  46. package/fontes/bibliotecas/dialetos/egua-classico/matematica.d.ts +1 -1
  47. package/fontes/bibliotecas/dialetos/egua-classico/matematica.js +478 -478
  48. package/fontes/bibliotecas/dialetos/egua-classico/tempo.d.ts +1 -1
  49. package/fontes/bibliotecas/dialetos/egua-classico/tempo.js +39 -39
  50. package/fontes/bibliotecas/dialetos/egua-classico/textos.d.ts +8 -8
  51. package/fontes/bibliotecas/dialetos/egua-classico/textos.js +201 -201
  52. package/fontes/bibliotecas/primitivas-texto.d.ts +11 -11
  53. package/fontes/bibliotecas/primitivas-texto.js +12 -12
  54. package/fontes/bibliotecas/primitivas-vetor.d.ts +15 -15
  55. package/fontes/bibliotecas/primitivas-vetor.js +33 -33
  56. package/fontes/construtos/acesso-indice-variavel.d.ts +15 -15
  57. package/fontes/construtos/acesso-indice-variavel.js +20 -20
  58. package/fontes/construtos/acesso-metodo.d.ts +14 -14
  59. package/fontes/construtos/acesso-metodo.js +19 -19
  60. package/fontes/construtos/agrupamento.d.ts +14 -14
  61. package/fontes/construtos/agrupamento.js +19 -19
  62. package/fontes/construtos/atribuicao-sobrescrita.d.ts +11 -11
  63. package/fontes/construtos/atribuicao-sobrescrita.js +16 -16
  64. package/fontes/construtos/atribuir.d.ts +10 -10
  65. package/fontes/construtos/atribuir.js +15 -15
  66. package/fontes/construtos/binario.d.ts +22 -22
  67. package/fontes/construtos/binario.js +27 -27
  68. package/fontes/construtos/chamada.d.ts +13 -13
  69. package/fontes/construtos/chamada.js +36 -36
  70. package/fontes/construtos/construto.d.ts +7 -7
  71. package/fontes/construtos/construto.js +2 -2
  72. package/fontes/construtos/definir-valor.d.ts +11 -11
  73. package/fontes/construtos/definir-valor.js +16 -16
  74. package/fontes/construtos/dicionario.d.ts +10 -10
  75. package/fontes/construtos/dicionario.js +15 -15
  76. package/fontes/construtos/formatacao-escrita.d.ts +16 -16
  77. package/fontes/construtos/formatacao-escrita.js +21 -21
  78. package/fontes/construtos/funcao.d.ts +10 -10
  79. package/fontes/construtos/funcao.js +15 -15
  80. package/fontes/construtos/index.d.ts +19 -19
  81. package/fontes/construtos/index.js +35 -35
  82. package/fontes/construtos/isto.d.ts +9 -9
  83. package/fontes/construtos/isto.js +14 -14
  84. package/fontes/construtos/literal.d.ts +10 -10
  85. package/fontes/construtos/literal.js +14 -14
  86. package/fontes/construtos/logico.d.ts +11 -11
  87. package/fontes/construtos/logico.js +16 -16
  88. package/fontes/construtos/super.d.ts +10 -10
  89. package/fontes/construtos/super.js +15 -15
  90. package/fontes/construtos/unario.d.ts +11 -10
  91. package/fontes/construtos/unario.js +16 -15
  92. package/fontes/construtos/unario.js.map +1 -1
  93. package/fontes/construtos/variavel.d.ts +9 -9
  94. package/fontes/construtos/variavel.js +14 -14
  95. package/fontes/construtos/vetor.d.ts +9 -9
  96. package/fontes/construtos/vetor.js +14 -14
  97. package/fontes/declaracoes/bloco.d.ts +7 -7
  98. package/fontes/declaracoes/bloco.js +14 -14
  99. package/fontes/declaracoes/classe.d.ts +9 -9
  100. package/fontes/declaracoes/classe.js +16 -16
  101. package/fontes/declaracoes/continua.d.ts +6 -6
  102. package/fontes/declaracoes/continua.js +13 -13
  103. package/fontes/declaracoes/declaracao.d.ts +8 -8
  104. package/fontes/declaracoes/declaracao.js +17 -17
  105. package/fontes/declaracoes/enquanto.d.ts +9 -9
  106. package/fontes/declaracoes/enquanto.js +15 -15
  107. package/fontes/declaracoes/escolha.d.ts +14 -14
  108. package/fontes/declaracoes/escolha.js +19 -19
  109. package/fontes/declaracoes/escreva-mesma-linha.d.ts +8 -8
  110. package/fontes/declaracoes/escreva-mesma-linha.js +14 -14
  111. package/fontes/declaracoes/escreva.d.ts +8 -8
  112. package/fontes/declaracoes/escreva.js +14 -14
  113. package/fontes/declaracoes/expressao.d.ts +8 -8
  114. package/fontes/declaracoes/expressao.js +14 -14
  115. package/fontes/declaracoes/fazer.d.ts +8 -8
  116. package/fontes/declaracoes/fazer.js +15 -15
  117. package/fontes/declaracoes/funcao.d.ts +9 -9
  118. package/fontes/declaracoes/funcao.js +15 -15
  119. package/fontes/declaracoes/importar.d.ts +9 -9
  120. package/fontes/declaracoes/importar.js +15 -15
  121. package/fontes/declaracoes/index.d.ts +19 -19
  122. package/fontes/declaracoes/index.js +35 -35
  123. package/fontes/declaracoes/leia.d.ts +12 -12
  124. package/fontes/declaracoes/leia.js +18 -18
  125. package/fontes/declaracoes/para.d.ts +10 -10
  126. package/fontes/declaracoes/para.js +17 -17
  127. package/fontes/declaracoes/retorna.d.ts +8 -8
  128. package/fontes/declaracoes/retorna.js +15 -15
  129. package/fontes/declaracoes/se.d.ts +11 -11
  130. package/fontes/declaracoes/se.js +17 -17
  131. package/fontes/declaracoes/sustar.d.ts +6 -6
  132. package/fontes/declaracoes/sustar.js +13 -13
  133. package/fontes/declaracoes/tente.d.ts +14 -14
  134. package/fontes/declaracoes/tente.js +20 -20
  135. package/fontes/declaracoes/var.d.ts +9 -9
  136. package/fontes/declaracoes/var.js +15 -15
  137. package/fontes/depuracao/cyrb53.d.ts +9 -9
  138. package/fontes/depuracao/cyrb53.js +22 -22
  139. package/fontes/depuracao/index.d.ts +2 -2
  140. package/fontes/depuracao/index.js +23 -23
  141. package/fontes/depuracao/ponto-parada.d.ts +4 -4
  142. package/fontes/depuracao/ponto-parada.js +2 -2
  143. package/fontes/espaco-variaveis.d.ts +19 -19
  144. package/fontes/espaco-variaveis.js +19 -19
  145. package/fontes/estruturas/chamavel.d.ts +5 -5
  146. package/fontes/estruturas/chamavel.js +12 -12
  147. package/fontes/estruturas/classe-padrao.d.ts +17 -17
  148. package/fontes/estruturas/classe-padrao.js +28 -28
  149. package/fontes/estruturas/delegua-classe.d.ts +16 -16
  150. package/fontes/estruturas/delegua-classe.js +38 -38
  151. package/fontes/estruturas/delegua-funcao.d.ts +18 -18
  152. package/fontes/estruturas/delegua-funcao.js +60 -60
  153. package/fontes/estruturas/funcao-padrao.d.ts +12 -12
  154. package/fontes/estruturas/funcao-padrao.js +22 -22
  155. package/fontes/estruturas/index.d.ts +9 -9
  156. package/fontes/estruturas/index.js +25 -25
  157. package/fontes/estruturas/metodo-primitiva.d.ts +17 -17
  158. package/fontes/estruturas/metodo-primitiva.js +26 -26
  159. package/fontes/estruturas/modulo.d.ts +9 -9
  160. package/fontes/estruturas/modulo.js +13 -13
  161. package/fontes/estruturas/objeto-delegua-classe.d.ts +10 -10
  162. package/fontes/estruturas/objeto-delegua-classe.js +26 -26
  163. package/fontes/estruturas/objeto-padrao.d.ts +9 -9
  164. package/fontes/estruturas/objeto-padrao.js +21 -21
  165. package/fontes/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
  166. package/fontes/excecoes/erro-em-tempo-de-execucao.js +13 -13
  167. package/fontes/excecoes/index.d.ts +1 -1
  168. package/fontes/excecoes/index.js +17 -17
  169. package/fontes/formatadores/delegua.d.ts +18 -11
  170. package/fontes/formatadores/delegua.js +82 -99
  171. package/fontes/formatadores/delegua.js.map +1 -1
  172. package/fontes/formatadores/index.d.ts +1 -1
  173. package/fontes/formatadores/index.js +17 -17
  174. package/fontes/interfaces/avaliador-sintatico-interface.d.ts +57 -57
  175. package/fontes/interfaces/avaliador-sintatico-interface.js +2 -2
  176. package/fontes/interfaces/construtos/index.d.ts +4 -4
  177. package/fontes/interfaces/construtos/index.js +2 -2
  178. package/fontes/interfaces/escopo-execucao.d.ts +11 -11
  179. package/fontes/interfaces/escopo-execucao.js +2 -2
  180. package/fontes/interfaces/index.d.ts +11 -11
  181. package/fontes/interfaces/index.js +27 -27
  182. package/fontes/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
  183. package/fontes/interfaces/interpretador-com-depuracao-interface.js +2 -2
  184. package/fontes/interfaces/interpretador-interface.d.ts +55 -55
  185. package/fontes/interfaces/interpretador-interface.js +2 -2
  186. package/fontes/interfaces/lexador-interface.d.ts +23 -23
  187. package/fontes/interfaces/lexador-interface.js +2 -2
  188. package/fontes/interfaces/parametro-interface.d.ts +6 -6
  189. package/fontes/interfaces/parametro-interface.js +2 -2
  190. package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +25 -25
  191. package/fontes/interfaces/pilha-escopos-execucao-interface.js +2 -2
  192. package/fontes/interfaces/pilha-interface.d.ts +7 -7
  193. package/fontes/interfaces/pilha-interface.js +2 -2
  194. package/fontes/interfaces/resolvedor-interface.d.ts +41 -41
  195. package/fontes/interfaces/resolvedor-interface.js +2 -2
  196. package/fontes/interfaces/retornos/index.d.ts +4 -4
  197. package/fontes/interfaces/retornos/index.js +20 -20
  198. package/fontes/interfaces/retornos/retorno-avaliador-sintatico.d.ts +6 -6
  199. package/fontes/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
  200. package/fontes/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
  201. package/fontes/interfaces/retornos/retorno-execucao-interface.js +2 -2
  202. package/fontes/interfaces/retornos/retorno-interpretador.d.ts +5 -5
  203. package/fontes/interfaces/retornos/retorno-interpretador.js +2 -2
  204. package/fontes/interfaces/retornos/retorno-lexador.d.ts +10 -10
  205. package/fontes/interfaces/retornos/retorno-lexador.js +2 -2
  206. package/fontes/interfaces/simbolo-interface.d.ts +7 -7
  207. package/fontes/interfaces/simbolo-interface.js +2 -2
  208. package/fontes/interfaces/tradutor-interface.d.ts +4 -4
  209. package/fontes/interfaces/tradutor-interface.js +2 -2
  210. package/fontes/interfaces/variavel-interface.d.ts +4 -4
  211. package/fontes/interfaces/variavel-interface.js +2 -2
  212. package/fontes/interpretador/dialetos/egua-classico/index.d.ts +1 -1
  213. package/fontes/interpretador/dialetos/egua-classico/index.js +17 -17
  214. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +99 -99
  215. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +743 -743
  216. package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  217. package/fontes/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
  218. package/fontes/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
  219. package/fontes/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
  220. package/fontes/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
  221. package/fontes/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
  222. package/fontes/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
  223. package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +87 -87
  224. package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +387 -387
  225. package/fontes/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
  226. package/fontes/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
  227. package/fontes/interpretador/dialetos/index.d.ts +4 -4
  228. package/fontes/interpretador/dialetos/index.js +20 -20
  229. package/fontes/interpretador/dialetos/portugol-studio/interpretador-portugol-studio.d.ts +12 -12
  230. package/fontes/interpretador/dialetos/portugol-studio/interpretador-portugol-studio.js +26 -26
  231. package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.d.ts +40 -40
  232. package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js +96 -96
  233. package/fontes/interpretador/dialetos/visualg/interpretador-visualg.d.ts +46 -46
  234. package/fontes/interpretador/dialetos/visualg/interpretador-visualg.js +102 -102
  235. package/fontes/interpretador/erro-interpretador.d.ts +8 -8
  236. package/fontes/interpretador/erro-interpretador.js +2 -2
  237. package/fontes/interpretador/index.d.ts +4 -4
  238. package/fontes/interpretador/index.js +20 -20
  239. package/fontes/interpretador/inferenciador.d.ts +1 -1
  240. package/fontes/interpretador/inferenciador.js +31 -31
  241. package/fontes/interpretador/interpretador-base.d.ts +187 -187
  242. package/fontes/interpretador/interpretador-base.js +998 -972
  243. package/fontes/interpretador/interpretador-base.js.map +1 -1
  244. package/fontes/interpretador/interpretador-com-depuracao.d.ts +199 -199
  245. package/fontes/interpretador/interpretador-com-depuracao.js +516 -516
  246. package/fontes/interpretador/pilha-escopos-execucao.d.ts +38 -38
  247. package/fontes/interpretador/pilha-escopos-execucao.js +158 -158
  248. package/fontes/lexador/dialetos/index.d.ts +6 -6
  249. package/fontes/lexador/dialetos/index.js +22 -22
  250. package/fontes/lexador/dialetos/lexador-birl.d.ts +12 -12
  251. package/fontes/lexador/dialetos/lexador-birl.js +165 -165
  252. package/fontes/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
  253. package/fontes/lexador/dialetos/lexador-egua-classico.js +286 -286
  254. package/fontes/lexador/dialetos/lexador-eguap.d.ts +51 -51
  255. package/fontes/lexador/dialetos/lexador-eguap.js +398 -398
  256. package/fontes/lexador/dialetos/lexador-guarani.d.ts +9 -9
  257. package/fontes/lexador/dialetos/lexador-guarani.js +113 -113
  258. package/fontes/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
  259. package/fontes/lexador/dialetos/lexador-portugol-ipt.js +195 -195
  260. package/fontes/lexador/dialetos/lexador-portugol-studio.d.ts +21 -15
  261. package/fontes/lexador/dialetos/lexador-portugol-studio.js +280 -242
  262. package/fontes/lexador/dialetos/lexador-portugol-studio.js.map +1 -1
  263. package/fontes/lexador/dialetos/lexador-visualg.d.ts +18 -18
  264. package/fontes/lexador/dialetos/lexador-visualg.js +218 -218
  265. package/fontes/lexador/dialetos/palavras-reservadas/birl.d.ts +41 -41
  266. package/fontes/lexador/dialetos/palavras-reservadas/birl.js +58 -58
  267. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +36 -36
  268. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +41 -41
  269. package/fontes/lexador/dialetos/palavras-reservadas/guarani.d.ts +4 -4
  270. package/fontes/lexador/dialetos/palavras-reservadas/guarani.js +9 -9
  271. package/fontes/lexador/dialetos/palavras-reservadas/index.d.ts +3 -3
  272. package/fontes/lexador/dialetos/palavras-reservadas/index.js +19 -19
  273. package/fontes/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +6 -6
  274. package/fontes/lexador/dialetos/palavras-reservadas/portugol-ipt.js +11 -11
  275. package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.d.ts +23 -8
  276. package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js +28 -13
  277. package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js.map +1 -1
  278. package/fontes/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +2 -2
  279. package/fontes/lexador/dialetos/palavras-reservadas/rantiaquin.js +3 -3
  280. package/fontes/lexador/dialetos/palavras-reservadas/visualg.d.ts +60 -60
  281. package/fontes/lexador/dialetos/palavras-reservadas/visualg.js +65 -65
  282. package/fontes/lexador/dialetos/pragma.d.ts +8 -8
  283. package/fontes/lexador/dialetos/pragma.js +2 -2
  284. package/fontes/lexador/erro-lexador.d.ts +5 -5
  285. package/fontes/lexador/erro-lexador.js +2 -2
  286. package/fontes/lexador/index.d.ts +2 -2
  287. package/fontes/lexador/index.js +18 -18
  288. package/fontes/lexador/lexador-base-linha-unica.d.ts +28 -28
  289. package/fontes/lexador/lexador-base-linha-unica.js +82 -82
  290. package/fontes/lexador/lexador-base.d.ts +41 -41
  291. package/fontes/lexador/lexador-base.js +112 -112
  292. package/fontes/lexador/lexador-base.js.map +1 -1
  293. package/fontes/lexador/lexador.d.ts +43 -43
  294. package/fontes/lexador/lexador.js +412 -408
  295. package/fontes/lexador/lexador.js.map +1 -1
  296. package/fontes/lexador/palavras-reservadas.d.ts +36 -36
  297. package/fontes/lexador/palavras-reservadas.js +41 -41
  298. package/fontes/lexador/simbolo.d.ts +10 -10
  299. package/fontes/lexador/simbolo.js +16 -16
  300. package/fontes/quebras/index.d.ts +10 -10
  301. package/fontes/quebras/index.js +19 -19
  302. package/fontes/tipos-de-simbolos/birl.d.ts +57 -57
  303. package/fontes/tipos-de-simbolos/birl.js +61 -61
  304. package/fontes/tipos-de-simbolos/comum.d.ts +22 -22
  305. package/fontes/tipos-de-simbolos/comum.js +23 -23
  306. package/fontes/tipos-de-simbolos/delegua.d.ts +80 -80
  307. package/fontes/tipos-de-simbolos/delegua.js +81 -81
  308. package/fontes/tipos-de-simbolos/egua-classico.d.ts +77 -77
  309. package/fontes/tipos-de-simbolos/egua-classico.js +78 -78
  310. package/fontes/tipos-de-simbolos/eguap.d.ts +73 -73
  311. package/fontes/tipos-de-simbolos/eguap.js +74 -74
  312. package/fontes/tipos-de-simbolos/guarani.d.ts +14 -14
  313. package/fontes/tipos-de-simbolos/guarani.js +15 -15
  314. package/fontes/tipos-de-simbolos/portugol-ipt.d.ts +28 -28
  315. package/fontes/tipos-de-simbolos/portugol-ipt.js +29 -29
  316. package/fontes/tipos-de-simbolos/portugol-studio.d.ts +53 -35
  317. package/fontes/tipos-de-simbolos/portugol-studio.js +54 -36
  318. package/fontes/tipos-de-simbolos/portugol-studio.js.map +1 -1
  319. package/fontes/tipos-de-simbolos/rantiaquin.d.ts +2 -2
  320. package/fontes/tipos-de-simbolos/rantiaquin.js +3 -3
  321. package/fontes/tipos-de-simbolos/visualg.d.ts +68 -68
  322. package/fontes/tipos-de-simbolos/visualg.js +69 -69
  323. package/fontes/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
  324. package/fontes/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
  325. package/fontes/tradutores/dicionarios/index.d.ts +1 -1
  326. package/fontes/tradutores/dicionarios/index.js +17 -17
  327. package/fontes/tradutores/index.d.ts +2 -2
  328. package/fontes/tradutores/index.js +18 -18
  329. package/fontes/tradutores/python/python3-lexer.d.ts +152 -152
  330. package/fontes/tradutores/python/python3-lexer.js +1226 -1226
  331. package/fontes/tradutores/python/python3-listener.d.ts +953 -953
  332. package/fontes/tradutores/python/python3-listener.js +2 -2
  333. package/fontes/tradutores/python/python3-parser.d.ts +1330 -1330
  334. package/fontes/tradutores/python/python3-parser.js +11156 -11156
  335. package/fontes/tradutores/python/python3-visitor.d.ts +612 -612
  336. package/fontes/tradutores/python/python3-visitor.js +2 -2
  337. package/fontes/tradutores/tradutor-javascript.d.ts +83 -83
  338. package/fontes/tradutores/tradutor-javascript.js +470 -470
  339. package/fontes/tradutores/tradutor-javascript.js.map +1 -1
  340. package/fontes/tradutores/tradutor-python.d.ts +1 -1
  341. package/fontes/tradutores/tradutor-python.js +34 -34
  342. package/fontes/tradutores/tradutor-reverso-javascript.d.ts +47 -47
  343. package/fontes/tradutores/tradutor-reverso-javascript.js +342 -342
  344. package/index.d.ts +5 -5
  345. package/index.js +23 -23
  346. package/package.json +88 -88
@@ -1,471 +1,471 @@
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.TradutorJavaScript = void 0;
7
- const construtos_1 = require("../construtos");
8
- const declaracoes_1 = require("../declaracoes");
9
- const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
10
- /**
11
- * Esse tradutor traduz para JavaScript sem módulos, o que significa que
12
- * instruções em Delégua como `leia()` e `importar()` não são suportadas.
13
- * O tradutor levantará erro toda vez que essas instruções são encontradas.
14
- */
15
- class TradutorJavaScript {
16
- constructor() {
17
- this.indentacao = 0;
18
- this.dicionarioConstrutos = {
19
- AcessoIndiceVariavel: this.traduzirAcessoIndiceVariavel.bind(this),
20
- AcessoMetodo: this.trazudirConstrutoAcessoMetodo.bind(this),
21
- Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
22
- AtribuicaoSobrescrita: this.traduzirConstrutoAtribuicaoSobrescrita.bind(this),
23
- Atribuir: this.traduzirConstrutoAtribuir.bind(this),
24
- Binario: this.traduzirConstrutoBinario.bind(this),
25
- Chamada: this.traduzirConstrutoChamada.bind(this),
26
- DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
27
- FuncaoConstruto: this.traduzirFuncaoConstruto.bind(this),
28
- Isto: () => 'this',
29
- Literal: this.traduzirConstrutoLiteral.bind(this),
30
- Logico: this.traduzirConstrutoLogico.bind(this),
31
- Unario: this.traduzirConstrutoUnario.bind(this),
32
- Variavel: this.traduzirConstrutoVariavel.bind(this),
33
- Vetor: this.traduzirConstrutoVetor.bind(this),
34
- };
35
- this.dicionarioDeclaracoes = {
36
- Bloco: this.traduzirDeclaracaoBloco.bind(this),
37
- Classe: this.traduzirDeclaracaoClasse.bind(this),
38
- Continua: () => 'continue',
39
- Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
40
- Escolha: this.traduzirDeclaracaoEscolha.bind(this),
41
- Escreva: this.traduzirDeclaracaoEscreva.bind(this),
42
- Expressao: this.traduzirDeclaracaoExpressao.bind(this),
43
- Fazer: this.traduzirDeclaracaoFazer.bind(this),
44
- FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
45
- Importar: this.traduzirDeclaracaoImportar.bind(this),
46
- Leia: this.traduzirDeclaracaoLeia.bind(this),
47
- Para: this.traduzirDeclaracaoPara.bind(this),
48
- Sustar: () => 'break',
49
- Retorna: this.traduzirDeclaracaoRetorna.bind(this),
50
- Se: this.traduzirDeclaracaoSe.bind(this),
51
- Tente: this.traduzirDeclaracaoTente.bind(this),
52
- Var: this.traduzirDeclaracaoVar.bind(this),
53
- };
54
- }
55
- traduzirSimboloOperador(operador) {
56
- switch (operador.tipo) {
57
- case delegua_1.default.ADICAO:
58
- return '+';
59
- case delegua_1.default.BIT_AND:
60
- return '&';
61
- case delegua_1.default.BIT_OR:
62
- return '|';
63
- case delegua_1.default.BIT_XOR:
64
- return '^';
65
- case delegua_1.default.BIT_NOT:
66
- return '~';
67
- case delegua_1.default.DIFERENTE:
68
- return '!==';
69
- case delegua_1.default.DIVISAO:
70
- return '/';
71
- case delegua_1.default.E:
72
- return '&&';
73
- case delegua_1.default.EXPONENCIACAO:
74
- return '**';
75
- case delegua_1.default.IGUAL:
76
- return '=';
77
- case delegua_1.default.IGUAL_IGUAL:
78
- return '===';
79
- case delegua_1.default.MAIOR:
80
- return '>';
81
- case delegua_1.default.MAIOR_IGUAL:
82
- return '>=';
83
- case delegua_1.default.MENOR:
84
- return '<';
85
- case delegua_1.default.MENOR_IGUAL:
86
- return '<=';
87
- case delegua_1.default.MODULO:
88
- return '%';
89
- case delegua_1.default.MULTIPLICACAO:
90
- return '*';
91
- case delegua_1.default.OU:
92
- return '||';
93
- case delegua_1.default.SUBTRACAO:
94
- return '-';
95
- }
96
- }
97
- traduzirConstrutoAgrupamento(agrupamento) {
98
- return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
99
- }
100
- traduzirConstrutoAtribuir(atribuir) {
101
- let resultado = atribuir.simbolo.lexema;
102
- resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
103
- return resultado;
104
- }
105
- traduzirConstrutoBinario(binario) {
106
- let resultado = '';
107
- if (binario.esquerda.constructor.name === 'Agrupamento')
108
- resultado += '(' + this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) + ')';
109
- else
110
- resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
111
- let operador = this.traduzirSimboloOperador(binario.operador);
112
- resultado += ` ${operador} `;
113
- if (binario.direita.constructor.name === 'Agrupamento')
114
- resultado += '(' + this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) + ')';
115
- else
116
- resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
117
- return resultado;
118
- }
119
- traduzirConstrutoDefinirValor(definirValor) {
120
- let resultado = '';
121
- if (definirValor.objeto instanceof construtos_1.Isto) {
122
- resultado = 'this.' + definirValor.nome.lexema + ' = ';
123
- }
124
- resultado += definirValor.valor.simbolo.lexema;
125
- return resultado;
126
- }
127
- traduzirConstrutoLiteral(literal) {
128
- if (typeof literal.valor === 'string')
129
- return `'${literal.valor}'`;
130
- return literal.valor;
131
- }
132
- traduzirConstrutoVariavel(variavel) {
133
- return variavel.simbolo.lexema;
134
- }
135
- traduzirConstrutoChamada(chamada) {
136
- let resultado = '';
137
- const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
138
- const instanciaClasse = this.declaracoesDeClasses.some((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
139
- if (instanciaClasse) {
140
- const classe = this.declaracoesDeClasses.find((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
141
- if (classe.simbolo.lexema === retorno)
142
- resultado += `new ${retorno}`;
143
- }
144
- else {
145
- resultado += retorno;
146
- }
147
- resultado += '(';
148
- for (let parametro of chamada.argumentos) {
149
- resultado += this.dicionarioConstrutos[parametro.constructor.name](parametro) + ', ';
150
- }
151
- if (chamada.argumentos.length > 0) {
152
- resultado = resultado.slice(0, -2);
153
- }
154
- resultado += ')';
155
- return resultado;
156
- }
157
- logicaComumBlocoEscopo(declaracoes) {
158
- let resultado = '{\n';
159
- this.indentacao += 4;
160
- if (typeof declaracoes[Symbol.iterator] === 'function') {
161
- for (const declaracaoOuConstruto of declaracoes) {
162
- resultado += ' '.repeat(this.indentacao);
163
- const nomeConstrutor = declaracaoOuConstruto.constructor.name;
164
- if (this.dicionarioConstrutos.hasOwnProperty(nomeConstrutor)) {
165
- resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoOuConstruto);
166
- }
167
- else {
168
- resultado += this.dicionarioDeclaracoes[nomeConstrutor](declaracaoOuConstruto);
169
- }
170
- resultado += '\n';
171
- }
172
- }
173
- this.indentacao -= 4;
174
- resultado += ' '.repeat(this.indentacao) + '}\n';
175
- return resultado;
176
- }
177
- traduzirDeclaracaoBloco(declaracaoBloco) {
178
- return this.logicaComumBlocoEscopo(declaracaoBloco.declaracoes);
179
- }
180
- logicaTraducaoMetodoClasse(metodoClasse) {
181
- this.indentacao += 4;
182
- let resultado = ' '.repeat(this.indentacao);
183
- resultado += metodoClasse.simbolo.lexema === 'construtor' ? 'constructor(' : metodoClasse.simbolo.lexema + '(';
184
- for (let parametro of metodoClasse.funcao.parametros) {
185
- resultado += parametro.nome.lexema + ', ';
186
- }
187
- if (metodoClasse.funcao.parametros.length > 0) {
188
- resultado = resultado.slice(0, -2);
189
- }
190
- resultado += ') ';
191
- resultado += this.logicaComumBlocoEscopo(metodoClasse.funcao.corpo);
192
- resultado += ' '.repeat(this.indentacao) + '\n';
193
- this.indentacao -= 4;
194
- return resultado;
195
- }
196
- traduzirDeclaracaoClasse(declaracaoClasse) {
197
- let resultado = 'export class ';
198
- if (declaracaoClasse.superClasse)
199
- resultado += `${declaracaoClasse.simbolo.lexema} extends ${declaracaoClasse.superClasse.simbolo.lexema} {\n`;
200
- else
201
- resultado += declaracaoClasse.simbolo.lexema + ' {\n';
202
- for (let metodo of declaracaoClasse.metodos) {
203
- resultado += this.logicaTraducaoMetodoClasse(metodo);
204
- }
205
- resultado += '}';
206
- return resultado;
207
- }
208
- traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
209
- let resultado = 'while (';
210
- resultado +=
211
- this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao) + ') ';
212
- resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
213
- return resultado;
214
- }
215
- logicaComumCaminhosEscolha(caminho) {
216
- var _a, _b, _c;
217
- let resultado = '';
218
- this.indentacao += 4;
219
- resultado += ' '.repeat(this.indentacao);
220
- if ((_a = caminho === null || caminho === void 0 ? void 0 : caminho.condicoes) === null || _a === void 0 ? void 0 : _a.length) {
221
- for (let condicao of caminho.condicoes) {
222
- resultado += 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
223
- resultado += ' '.repeat(this.indentacao);
224
- }
225
- }
226
- if ((_b = caminho === null || caminho === void 0 ? void 0 : caminho.declaracoes) === null || _b === void 0 ? void 0 : _b.length) {
227
- for (let declaracao of caminho.declaracoes) {
228
- resultado += ' '.repeat(this.indentacao + 4);
229
- if (((_c = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simboloChave) === null || _c === void 0 ? void 0 : _c.lexema) === 'retorna') {
230
- resultado +=
231
- 'return ' + this.dicionarioConstrutos[declaracao.valor.constructor.name](declaracao.valor);
232
- }
233
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
234
- }
235
- resultado += ' '.repeat(this.indentacao + 4);
236
- resultado += 'break' + '\n';
237
- }
238
- this.indentacao -= 4;
239
- return resultado;
240
- }
241
- traduzirDeclaracaoEscolha(declaracaoEscolha) {
242
- let resultado = 'switch (';
243
- resultado +=
244
- this.dicionarioConstrutos[declaracaoEscolha.identificadorOuLiteral.constructor.name](declaracaoEscolha.identificadorOuLiteral) + ') {\n';
245
- for (let caminho of declaracaoEscolha.caminhos) {
246
- resultado += this.logicaComumCaminhosEscolha(caminho);
247
- }
248
- if (declaracaoEscolha.caminhoPadrao) {
249
- resultado += ' '.repeat(4);
250
- resultado += 'default:\n';
251
- resultado += this.logicaComumCaminhosEscolha(declaracaoEscolha.caminhoPadrao);
252
- }
253
- resultado += '}\n';
254
- return resultado;
255
- }
256
- traduzirDeclaracaoEscreva(declaracaoEscreva) {
257
- let resultado = 'console.log(';
258
- for (const argumento of declaracaoEscreva.argumentos) {
259
- const valor = this.dicionarioConstrutos[argumento.constructor.name](argumento);
260
- resultado += valor + ', ';
261
- }
262
- resultado = resultado.slice(0, -2);
263
- resultado += ')';
264
- return resultado;
265
- }
266
- traduzirDeclaracaoExpressao(declaracaoExpressao) {
267
- return this.dicionarioConstrutos[declaracaoExpressao.expressao.constructor.name](declaracaoExpressao.expressao);
268
- }
269
- traduzirDeclaracaoFazer(declaracaoFazer) {
270
- let resultado = 'do ';
271
- resultado += this.dicionarioDeclaracoes[declaracaoFazer.caminhoFazer.constructor.name](declaracaoFazer.caminhoFazer);
272
- resultado +=
273
- 'while (' +
274
- this.dicionarioConstrutos[declaracaoFazer.condicaoEnquanto.constructor.name](declaracaoFazer.condicaoEnquanto) +
275
- ') ';
276
- return resultado;
277
- }
278
- traduzirDeclaracaoFuncao(declaracaoFuncao) {
279
- let resultado = 'function ';
280
- resultado += declaracaoFuncao.simbolo.lexema + ' (';
281
- for (const parametro of declaracaoFuncao.funcao.parametros) {
282
- resultado += parametro.nome.lexema + ', ';
283
- }
284
- if (declaracaoFuncao.funcao.parametros.length > 0) {
285
- resultado = resultado.slice(0, -2);
286
- }
287
- resultado += ') ';
288
- resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
289
- return resultado;
290
- }
291
- traduzirDeclaracaoImportar(declaracaoImportar) {
292
- return `'importar() não é suportado por este padrão de JavaScript'`;
293
- }
294
- traduzirDeclaracaoLeia(declaracaoImportar) {
295
- return `'leia() não é suportado por este padrão de JavaScript.'`;
296
- }
297
- traduzirDeclaracaoPara(declaracaoPara) {
298
- let resultado = 'for (';
299
- resultado +=
300
- this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) +
301
- ' ';
302
- resultado += !resultado.includes(';') ? ';' : '';
303
- resultado +=
304
- this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
305
- resultado +=
306
- this.dicionarioConstrutos[declaracaoPara.incrementar.constructor.name](declaracaoPara.incrementar) + ') ';
307
- resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
308
- return resultado;
309
- }
310
- traduzirDeclaracaoRetorna(declaracaoRetorna) {
311
- let resultado = 'return ';
312
- const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
313
- return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
314
- }
315
- traduzirDeclaracaoSe(declaracaoSe) {
316
- let resultado = 'if (';
317
- const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
318
- resultado += condicao;
319
- resultado += ')';
320
- resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
321
- if (declaracaoSe.caminhoSenao !== null) {
322
- resultado += ' '.repeat(this.indentacao);
323
- resultado += 'else ';
324
- const se = declaracaoSe === null || declaracaoSe === void 0 ? void 0 : declaracaoSe.caminhoSenao;
325
- if (se === null || se === void 0 ? void 0 : se.caminhoEntao) {
326
- resultado += 'if (';
327
- resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao);
328
- resultado += ')';
329
- resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
330
- resultado += ' '.repeat(this.indentacao);
331
- if (se === null || se === void 0 ? void 0 : se.caminhoSenao) {
332
- resultado += 'else ';
333
- resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao);
334
- return resultado;
335
- }
336
- }
337
- resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
338
- }
339
- return resultado;
340
- }
341
- traduzirDeclaracaoTente(declaracaoTente) {
342
- let resultado = 'try {\n';
343
- this.indentacao += 4;
344
- resultado += ' '.repeat(this.indentacao);
345
- for (let condicao of declaracaoTente.caminhoTente) {
346
- resultado += this.dicionarioDeclaracoes[condicao.constructor.name](condicao) + '\n';
347
- resultado += ' '.repeat(this.indentacao);
348
- }
349
- resultado += '}';
350
- if (declaracaoTente.caminhoPegue !== null) {
351
- resultado += '\ncatch {\n';
352
- resultado += ' '.repeat(this.indentacao);
353
- if (Array.isArray(declaracaoTente.caminhoPegue)) {
354
- for (let declaracao of declaracaoTente.caminhoPegue) {
355
- resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
356
- }
357
- }
358
- else {
359
- for (let corpo of declaracaoTente.caminhoPegue.corpo) {
360
- resultado += this.dicionarioDeclaracoes[corpo.constructor.name](corpo) + '\n';
361
- }
362
- }
363
- resultado += ' '.repeat(this.indentacao);
364
- resultado += '}';
365
- }
366
- if (declaracaoTente.caminhoFinalmente !== null) {
367
- resultado += '\nfinally {\n';
368
- for (let finalmente of declaracaoTente.caminhoFinalmente) {
369
- resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
370
- }
371
- resultado += ' '.repeat(this.indentacao);
372
- resultado += '}';
373
- }
374
- return resultado;
375
- }
376
- traduzirDeclaracaoVar(declaracaoVar) {
377
- let resultado = 'let ';
378
- resultado += declaracaoVar.simbolo.lexema;
379
- if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
380
- resultado += ';';
381
- else {
382
- resultado += ' = ';
383
- if (this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name]) {
384
- resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
385
- }
386
- else {
387
- resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
388
- }
389
- resultado += ';';
390
- }
391
- return resultado;
392
- }
393
- trazudirConstrutoAcessoMetodo(acessoMetodo) {
394
- if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
395
- let objetoVariavel = acessoMetodo.objeto;
396
- return `${objetoVariavel.simbolo.lexema}.${acessoMetodo.simbolo.lexema}`;
397
- }
398
- return `this.${acessoMetodo.simbolo.lexema}`;
399
- }
400
- traduzirFuncaoConstruto(funcaoConstruto) {
401
- let resultado = 'function(';
402
- for (const parametro of funcaoConstruto.parametros) {
403
- resultado += parametro.nome.lexema + ', ';
404
- }
405
- if (funcaoConstruto.parametros.length > 0) {
406
- resultado = resultado.slice(0, -2);
407
- }
408
- resultado += ') ';
409
- resultado += this.logicaComumBlocoEscopo(funcaoConstruto.corpo);
410
- return resultado;
411
- }
412
- traduzirConstrutoLogico(logico) {
413
- let direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
414
- let operador = this.traduzirSimboloOperador(logico.operador);
415
- let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
416
- return `${direita} ${operador} ${esquerda}`;
417
- }
418
- traduzirConstrutoAtribuicaoSobrescrita(atribuicaoSobrescrita) {
419
- var _a, _b;
420
- let resultado = '';
421
- resultado += atribuicaoSobrescrita.objeto.simbolo.lexema + '[';
422
- resultado +=
423
- this.dicionarioConstrutos[atribuicaoSobrescrita.indice.constructor.name](atribuicaoSobrescrita.indice) +
424
- ']';
425
- resultado += ' = ';
426
- if ((_b = (_a = atribuicaoSobrescrita === null || atribuicaoSobrescrita === void 0 ? void 0 : atribuicaoSobrescrita.valor) === null || _a === void 0 ? void 0 : _a.simbolo) === null || _b === void 0 ? void 0 : _b.lexema) {
427
- resultado += `${atribuicaoSobrescrita.valor.simbolo.lexema}`;
428
- }
429
- else {
430
- resultado += this.dicionarioConstrutos[atribuicaoSobrescrita.valor.constructor.name](atribuicaoSobrescrita.valor);
431
- }
432
- return resultado;
433
- }
434
- traduzirAcessoIndiceVariavel(acessoIndiceVariavel) {
435
- let resultado = '';
436
- resultado += this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
437
- resultado += `[${this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice)}]`;
438
- return resultado;
439
- }
440
- traduzirConstrutoVetor(vetor) {
441
- if (!vetor.valores.length) {
442
- return '[]';
443
- }
444
- let resultado = '[';
445
- for (let valor of vetor.valores) {
446
- resultado += `${this.dicionarioConstrutos[valor.constructor.name](valor)}, `;
447
- }
448
- if (vetor.valores.length > 0) {
449
- resultado = resultado.slice(0, -2);
450
- }
451
- resultado += ']';
452
- return resultado;
453
- }
454
- traduzirConstrutoUnario(unario) {
455
- var _a;
456
- let resultado = '';
457
- resultado += this.traduzirSimboloOperador(unario.operador);
458
- resultado += (_a = unario.direita.valor) !== null && _a !== void 0 ? _a : unario.direita.simbolo.lexema;
459
- return resultado;
460
- }
461
- traduzir(declaracoes) {
462
- let resultado = '';
463
- this.declaracoesDeClasses = declaracoes.filter((declaracao) => declaracao instanceof declaracoes_1.Classe);
464
- for (const declaracao of declaracoes) {
465
- resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
466
- }
467
- return resultado;
468
- }
469
- }
470
- exports.TradutorJavaScript = TradutorJavaScript;
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.TradutorJavaScript = void 0;
7
+ const construtos_1 = require("../construtos");
8
+ const declaracoes_1 = require("../declaracoes");
9
+ const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
10
+ /**
11
+ * Esse tradutor traduz para JavaScript sem módulos, o que significa que
12
+ * instruções em Delégua como `leia()` e `importar()` não são suportadas.
13
+ * O tradutor levantará erro toda vez que essas instruções são encontradas.
14
+ */
15
+ class TradutorJavaScript {
16
+ constructor() {
17
+ this.indentacao = 0;
18
+ this.dicionarioConstrutos = {
19
+ AcessoIndiceVariavel: this.traduzirAcessoIndiceVariavel.bind(this),
20
+ AcessoMetodo: this.trazudirConstrutoAcessoMetodo.bind(this),
21
+ Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
22
+ AtribuicaoSobrescrita: this.traduzirConstrutoAtribuicaoSobrescrita.bind(this),
23
+ Atribuir: this.traduzirConstrutoAtribuir.bind(this),
24
+ Binario: this.traduzirConstrutoBinario.bind(this),
25
+ Chamada: this.traduzirConstrutoChamada.bind(this),
26
+ DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
27
+ FuncaoConstruto: this.traduzirFuncaoConstruto.bind(this),
28
+ Isto: () => 'this',
29
+ Literal: this.traduzirConstrutoLiteral.bind(this),
30
+ Logico: this.traduzirConstrutoLogico.bind(this),
31
+ Unario: this.traduzirConstrutoUnario.bind(this),
32
+ Variavel: this.traduzirConstrutoVariavel.bind(this),
33
+ Vetor: this.traduzirConstrutoVetor.bind(this),
34
+ };
35
+ this.dicionarioDeclaracoes = {
36
+ Bloco: this.traduzirDeclaracaoBloco.bind(this),
37
+ Classe: this.traduzirDeclaracaoClasse.bind(this),
38
+ Continua: () => 'continue',
39
+ Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
40
+ Escolha: this.traduzirDeclaracaoEscolha.bind(this),
41
+ Escreva: this.traduzirDeclaracaoEscreva.bind(this),
42
+ Expressao: this.traduzirDeclaracaoExpressao.bind(this),
43
+ Fazer: this.traduzirDeclaracaoFazer.bind(this),
44
+ FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
45
+ Importar: this.traduzirDeclaracaoImportar.bind(this),
46
+ Leia: this.traduzirDeclaracaoLeia.bind(this),
47
+ Para: this.traduzirDeclaracaoPara.bind(this),
48
+ Sustar: () => 'break',
49
+ Retorna: this.traduzirDeclaracaoRetorna.bind(this),
50
+ Se: this.traduzirDeclaracaoSe.bind(this),
51
+ Tente: this.traduzirDeclaracaoTente.bind(this),
52
+ Var: this.traduzirDeclaracaoVar.bind(this),
53
+ };
54
+ }
55
+ traduzirSimboloOperador(operador) {
56
+ switch (operador.tipo) {
57
+ case delegua_1.default.ADICAO:
58
+ return '+';
59
+ case delegua_1.default.BIT_AND:
60
+ return '&';
61
+ case delegua_1.default.BIT_OR:
62
+ return '|';
63
+ case delegua_1.default.BIT_XOR:
64
+ return '^';
65
+ case delegua_1.default.BIT_NOT:
66
+ return '~';
67
+ case delegua_1.default.DIFERENTE:
68
+ return '!==';
69
+ case delegua_1.default.DIVISAO:
70
+ return '/';
71
+ case delegua_1.default.E:
72
+ return '&&';
73
+ case delegua_1.default.EXPONENCIACAO:
74
+ return '**';
75
+ case delegua_1.default.IGUAL:
76
+ return '=';
77
+ case delegua_1.default.IGUAL_IGUAL:
78
+ return '===';
79
+ case delegua_1.default.MAIOR:
80
+ return '>';
81
+ case delegua_1.default.MAIOR_IGUAL:
82
+ return '>=';
83
+ case delegua_1.default.MENOR:
84
+ return '<';
85
+ case delegua_1.default.MENOR_IGUAL:
86
+ return '<=';
87
+ case delegua_1.default.MODULO:
88
+ return '%';
89
+ case delegua_1.default.MULTIPLICACAO:
90
+ return '*';
91
+ case delegua_1.default.OU:
92
+ return '||';
93
+ case delegua_1.default.SUBTRACAO:
94
+ return '-';
95
+ }
96
+ }
97
+ traduzirConstrutoAgrupamento(agrupamento) {
98
+ return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
99
+ }
100
+ traduzirConstrutoAtribuir(atribuir) {
101
+ let resultado = atribuir.simbolo.lexema;
102
+ resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
103
+ return resultado;
104
+ }
105
+ traduzirConstrutoBinario(binario) {
106
+ let resultado = '';
107
+ if (binario.esquerda.constructor.name === 'Agrupamento')
108
+ resultado += '(' + this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) + ')';
109
+ else
110
+ resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
111
+ let operador = this.traduzirSimboloOperador(binario.operador);
112
+ resultado += ` ${operador} `;
113
+ if (binario.direita.constructor.name === 'Agrupamento')
114
+ resultado += '(' + this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) + ')';
115
+ else
116
+ resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
117
+ return resultado;
118
+ }
119
+ traduzirConstrutoDefinirValor(definirValor) {
120
+ let resultado = '';
121
+ if (definirValor.objeto instanceof construtos_1.Isto) {
122
+ resultado = 'this.' + definirValor.nome.lexema + ' = ';
123
+ }
124
+ resultado += definirValor.valor.simbolo.lexema;
125
+ return resultado;
126
+ }
127
+ traduzirConstrutoLiteral(literal) {
128
+ if (typeof literal.valor === 'string')
129
+ return `'${literal.valor}'`;
130
+ return literal.valor;
131
+ }
132
+ traduzirConstrutoVariavel(variavel) {
133
+ return variavel.simbolo.lexema;
134
+ }
135
+ traduzirConstrutoChamada(chamada) {
136
+ let resultado = '';
137
+ const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
138
+ const instanciaClasse = this.declaracoesDeClasses.some((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
139
+ if (instanciaClasse) {
140
+ const classe = this.declaracoesDeClasses.find((declaracao) => { var _a; return ((_a = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) === retorno; });
141
+ if (classe.simbolo.lexema === retorno)
142
+ resultado += `new ${retorno}`;
143
+ }
144
+ else {
145
+ resultado += retorno;
146
+ }
147
+ resultado += '(';
148
+ for (let parametro of chamada.argumentos) {
149
+ resultado += this.dicionarioConstrutos[parametro.constructor.name](parametro) + ', ';
150
+ }
151
+ if (chamada.argumentos.length > 0) {
152
+ resultado = resultado.slice(0, -2);
153
+ }
154
+ resultado += ')';
155
+ return resultado;
156
+ }
157
+ logicaComumBlocoEscopo(declaracoes) {
158
+ let resultado = '{\n';
159
+ this.indentacao += 4;
160
+ if (typeof declaracoes[Symbol.iterator] === 'function') {
161
+ for (const declaracaoOuConstruto of declaracoes) {
162
+ resultado += ' '.repeat(this.indentacao);
163
+ const nomeConstrutor = declaracaoOuConstruto.constructor.name;
164
+ if (this.dicionarioConstrutos.hasOwnProperty(nomeConstrutor)) {
165
+ resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoOuConstruto);
166
+ }
167
+ else {
168
+ resultado += this.dicionarioDeclaracoes[nomeConstrutor](declaracaoOuConstruto);
169
+ }
170
+ resultado += '\n';
171
+ }
172
+ }
173
+ this.indentacao -= 4;
174
+ resultado += ' '.repeat(this.indentacao) + '}\n';
175
+ return resultado;
176
+ }
177
+ traduzirDeclaracaoBloco(declaracaoBloco) {
178
+ return this.logicaComumBlocoEscopo(declaracaoBloco.declaracoes);
179
+ }
180
+ logicaTraducaoMetodoClasse(metodoClasse) {
181
+ this.indentacao += 4;
182
+ let resultado = ' '.repeat(this.indentacao);
183
+ resultado += metodoClasse.simbolo.lexema === 'construtor' ? 'constructor(' : metodoClasse.simbolo.lexema + '(';
184
+ for (let parametro of metodoClasse.funcao.parametros) {
185
+ resultado += parametro.nome.lexema + ', ';
186
+ }
187
+ if (metodoClasse.funcao.parametros.length > 0) {
188
+ resultado = resultado.slice(0, -2);
189
+ }
190
+ resultado += ') ';
191
+ resultado += this.logicaComumBlocoEscopo(metodoClasse.funcao.corpo);
192
+ resultado += ' '.repeat(this.indentacao) + '\n';
193
+ this.indentacao -= 4;
194
+ return resultado;
195
+ }
196
+ traduzirDeclaracaoClasse(declaracaoClasse) {
197
+ let resultado = 'export class ';
198
+ if (declaracaoClasse.superClasse)
199
+ resultado += `${declaracaoClasse.simbolo.lexema} extends ${declaracaoClasse.superClasse.simbolo.lexema} {\n`;
200
+ else
201
+ resultado += declaracaoClasse.simbolo.lexema + ' {\n';
202
+ for (let metodo of declaracaoClasse.metodos) {
203
+ resultado += this.logicaTraducaoMetodoClasse(metodo);
204
+ }
205
+ resultado += '}';
206
+ return resultado;
207
+ }
208
+ traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
209
+ let resultado = 'while (';
210
+ resultado +=
211
+ this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao) + ') ';
212
+ resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
213
+ return resultado;
214
+ }
215
+ logicaComumCaminhosEscolha(caminho) {
216
+ var _a, _b, _c;
217
+ let resultado = '';
218
+ this.indentacao += 4;
219
+ resultado += ' '.repeat(this.indentacao);
220
+ if ((_a = caminho === null || caminho === void 0 ? void 0 : caminho.condicoes) === null || _a === void 0 ? void 0 : _a.length) {
221
+ for (let condicao of caminho.condicoes) {
222
+ resultado += 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
223
+ resultado += ' '.repeat(this.indentacao);
224
+ }
225
+ }
226
+ if ((_b = caminho === null || caminho === void 0 ? void 0 : caminho.declaracoes) === null || _b === void 0 ? void 0 : _b.length) {
227
+ for (let declaracao of caminho.declaracoes) {
228
+ resultado += ' '.repeat(this.indentacao + 4);
229
+ if (((_c = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simboloChave) === null || _c === void 0 ? void 0 : _c.lexema) === 'retorna') {
230
+ resultado +=
231
+ 'return ' + this.dicionarioConstrutos[declaracao.valor.constructor.name](declaracao.valor);
232
+ }
233
+ resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
234
+ }
235
+ resultado += ' '.repeat(this.indentacao + 4);
236
+ resultado += 'break' + '\n';
237
+ }
238
+ this.indentacao -= 4;
239
+ return resultado;
240
+ }
241
+ traduzirDeclaracaoEscolha(declaracaoEscolha) {
242
+ let resultado = 'switch (';
243
+ resultado +=
244
+ this.dicionarioConstrutos[declaracaoEscolha.identificadorOuLiteral.constructor.name](declaracaoEscolha.identificadorOuLiteral) + ') {\n';
245
+ for (let caminho of declaracaoEscolha.caminhos) {
246
+ resultado += this.logicaComumCaminhosEscolha(caminho);
247
+ }
248
+ if (declaracaoEscolha.caminhoPadrao) {
249
+ resultado += ' '.repeat(4);
250
+ resultado += 'default:\n';
251
+ resultado += this.logicaComumCaminhosEscolha(declaracaoEscolha.caminhoPadrao);
252
+ }
253
+ resultado += '}\n';
254
+ return resultado;
255
+ }
256
+ traduzirDeclaracaoEscreva(declaracaoEscreva) {
257
+ let resultado = 'console.log(';
258
+ for (const argumento of declaracaoEscreva.argumentos) {
259
+ const valor = this.dicionarioConstrutos[argumento.constructor.name](argumento);
260
+ resultado += valor + ', ';
261
+ }
262
+ resultado = resultado.slice(0, -2);
263
+ resultado += ')';
264
+ return resultado;
265
+ }
266
+ traduzirDeclaracaoExpressao(declaracaoExpressao) {
267
+ return this.dicionarioConstrutos[declaracaoExpressao.expressao.constructor.name](declaracaoExpressao.expressao);
268
+ }
269
+ traduzirDeclaracaoFazer(declaracaoFazer) {
270
+ let resultado = 'do ';
271
+ resultado += this.dicionarioDeclaracoes[declaracaoFazer.caminhoFazer.constructor.name](declaracaoFazer.caminhoFazer);
272
+ resultado +=
273
+ 'while (' +
274
+ this.dicionarioConstrutos[declaracaoFazer.condicaoEnquanto.constructor.name](declaracaoFazer.condicaoEnquanto) +
275
+ ') ';
276
+ return resultado;
277
+ }
278
+ traduzirDeclaracaoFuncao(declaracaoFuncao) {
279
+ let resultado = 'function ';
280
+ resultado += declaracaoFuncao.simbolo.lexema + ' (';
281
+ for (const parametro of declaracaoFuncao.funcao.parametros) {
282
+ resultado += parametro.nome.lexema + ', ';
283
+ }
284
+ if (declaracaoFuncao.funcao.parametros.length > 0) {
285
+ resultado = resultado.slice(0, -2);
286
+ }
287
+ resultado += ') ';
288
+ resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
289
+ return resultado;
290
+ }
291
+ traduzirDeclaracaoImportar(declaracaoImportar) {
292
+ return `'importar() não é suportado por este padrão de JavaScript'`;
293
+ }
294
+ traduzirDeclaracaoLeia(declaracaoImportar) {
295
+ return `'leia() não é suportado por este padrão de JavaScript.'`;
296
+ }
297
+ traduzirDeclaracaoPara(declaracaoPara) {
298
+ let resultado = 'for (';
299
+ resultado +=
300
+ this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) +
301
+ ' ';
302
+ resultado += !resultado.includes(';') ? ';' : '';
303
+ resultado +=
304
+ this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
305
+ resultado +=
306
+ this.dicionarioConstrutos[declaracaoPara.incrementar.constructor.name](declaracaoPara.incrementar) + ') ';
307
+ resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
308
+ return resultado;
309
+ }
310
+ traduzirDeclaracaoRetorna(declaracaoRetorna) {
311
+ let resultado = 'return ';
312
+ const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
313
+ return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
314
+ }
315
+ traduzirDeclaracaoSe(declaracaoSe) {
316
+ let resultado = 'if (';
317
+ const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
318
+ resultado += condicao;
319
+ resultado += ')';
320
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
321
+ if (declaracaoSe.caminhoSenao !== null) {
322
+ resultado += ' '.repeat(this.indentacao);
323
+ resultado += 'else ';
324
+ const se = declaracaoSe === null || declaracaoSe === void 0 ? void 0 : declaracaoSe.caminhoSenao;
325
+ if (se === null || se === void 0 ? void 0 : se.caminhoEntao) {
326
+ resultado += 'if (';
327
+ resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao);
328
+ resultado += ')';
329
+ resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
330
+ resultado += ' '.repeat(this.indentacao);
331
+ if (se === null || se === void 0 ? void 0 : se.caminhoSenao) {
332
+ resultado += 'else ';
333
+ resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao);
334
+ return resultado;
335
+ }
336
+ }
337
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
338
+ }
339
+ return resultado;
340
+ }
341
+ traduzirDeclaracaoTente(declaracaoTente) {
342
+ let resultado = 'try {\n';
343
+ this.indentacao += 4;
344
+ resultado += ' '.repeat(this.indentacao);
345
+ for (let condicao of declaracaoTente.caminhoTente) {
346
+ resultado += this.dicionarioDeclaracoes[condicao.constructor.name](condicao) + '\n';
347
+ resultado += ' '.repeat(this.indentacao);
348
+ }
349
+ resultado += '}';
350
+ if (declaracaoTente.caminhoPegue !== null) {
351
+ resultado += '\ncatch {\n';
352
+ resultado += ' '.repeat(this.indentacao);
353
+ if (Array.isArray(declaracaoTente.caminhoPegue)) {
354
+ for (let declaracao of declaracaoTente.caminhoPegue) {
355
+ resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
356
+ }
357
+ }
358
+ else {
359
+ for (let corpo of declaracaoTente.caminhoPegue.corpo) {
360
+ resultado += this.dicionarioDeclaracoes[corpo.constructor.name](corpo) + '\n';
361
+ }
362
+ }
363
+ resultado += ' '.repeat(this.indentacao);
364
+ resultado += '}';
365
+ }
366
+ if (declaracaoTente.caminhoFinalmente !== null) {
367
+ resultado += '\nfinally {\n';
368
+ for (let finalmente of declaracaoTente.caminhoFinalmente) {
369
+ resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
370
+ }
371
+ resultado += ' '.repeat(this.indentacao);
372
+ resultado += '}';
373
+ }
374
+ return resultado;
375
+ }
376
+ traduzirDeclaracaoVar(declaracaoVar) {
377
+ let resultado = 'let ';
378
+ resultado += declaracaoVar.simbolo.lexema;
379
+ if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
380
+ resultado += ';';
381
+ else {
382
+ resultado += ' = ';
383
+ if (this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name]) {
384
+ resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
385
+ }
386
+ else {
387
+ resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
388
+ }
389
+ resultado += ';';
390
+ }
391
+ return resultado;
392
+ }
393
+ trazudirConstrutoAcessoMetodo(acessoMetodo) {
394
+ if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
395
+ let objetoVariavel = acessoMetodo.objeto;
396
+ return `${objetoVariavel.simbolo.lexema}.${acessoMetodo.simbolo.lexema}`;
397
+ }
398
+ return `this.${acessoMetodo.simbolo.lexema}`;
399
+ }
400
+ traduzirFuncaoConstruto(funcaoConstruto) {
401
+ let resultado = 'function(';
402
+ for (const parametro of funcaoConstruto.parametros) {
403
+ resultado += parametro.nome.lexema + ', ';
404
+ }
405
+ if (funcaoConstruto.parametros.length > 0) {
406
+ resultado = resultado.slice(0, -2);
407
+ }
408
+ resultado += ') ';
409
+ resultado += this.logicaComumBlocoEscopo(funcaoConstruto.corpo);
410
+ return resultado;
411
+ }
412
+ traduzirConstrutoLogico(logico) {
413
+ let direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
414
+ let operador = this.traduzirSimboloOperador(logico.operador);
415
+ let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
416
+ return `${direita} ${operador} ${esquerda}`;
417
+ }
418
+ traduzirConstrutoAtribuicaoSobrescrita(atribuicaoSobrescrita) {
419
+ var _a, _b;
420
+ let resultado = '';
421
+ resultado += atribuicaoSobrescrita.objeto.simbolo.lexema + '[';
422
+ resultado +=
423
+ this.dicionarioConstrutos[atribuicaoSobrescrita.indice.constructor.name](atribuicaoSobrescrita.indice) +
424
+ ']';
425
+ resultado += ' = ';
426
+ if ((_b = (_a = atribuicaoSobrescrita === null || atribuicaoSobrescrita === void 0 ? void 0 : atribuicaoSobrescrita.valor) === null || _a === void 0 ? void 0 : _a.simbolo) === null || _b === void 0 ? void 0 : _b.lexema) {
427
+ resultado += `${atribuicaoSobrescrita.valor.simbolo.lexema}`;
428
+ }
429
+ else {
430
+ resultado += this.dicionarioConstrutos[atribuicaoSobrescrita.valor.constructor.name](atribuicaoSobrescrita.valor);
431
+ }
432
+ return resultado;
433
+ }
434
+ traduzirAcessoIndiceVariavel(acessoIndiceVariavel) {
435
+ let resultado = '';
436
+ resultado += this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
437
+ resultado += `[${this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice)}]`;
438
+ return resultado;
439
+ }
440
+ traduzirConstrutoVetor(vetor) {
441
+ if (!vetor.valores.length) {
442
+ return '[]';
443
+ }
444
+ let resultado = '[';
445
+ for (let valor of vetor.valores) {
446
+ resultado += `${this.dicionarioConstrutos[valor.constructor.name](valor)}, `;
447
+ }
448
+ if (vetor.valores.length > 0) {
449
+ resultado = resultado.slice(0, -2);
450
+ }
451
+ resultado += ']';
452
+ return resultado;
453
+ }
454
+ traduzirConstrutoUnario(unario) {
455
+ var _a;
456
+ let resultado = '';
457
+ resultado += this.traduzirSimboloOperador(unario.operador);
458
+ resultado += (_a = unario.operando.valor) !== null && _a !== void 0 ? _a : unario.operando.simbolo.lexema;
459
+ return resultado;
460
+ }
461
+ traduzir(declaracoes) {
462
+ let resultado = '';
463
+ this.declaracoesDeClasses = declaracoes.filter((declaracao) => declaracao instanceof declaracoes_1.Classe);
464
+ for (const declaracao of declaracoes) {
465
+ resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
466
+ }
467
+ return resultado;
468
+ }
469
+ }
470
+ exports.TradutorJavaScript = TradutorJavaScript;
471
471
  //# sourceMappingURL=tradutor-javascript.js.map