@designliquido/delegua 1.11.0 → 1.12.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 (242) hide show
  1. package/analisador-semantico/analisador-semantico-base.d.ts +2 -2
  2. package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
  3. package/analisador-semantico/analisador-semantico-base.js +14 -6
  4. package/analisador-semantico/analisador-semantico-base.js.map +1 -1
  5. package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
  6. package/analisador-semantico/analisador-semantico.js +38 -19
  7. package/analisador-semantico/analisador-semantico.js.map +1 -1
  8. package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
  9. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +41 -18
  10. package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
  11. package/analisador-semantico/funcao-hipotetica-interface.d.ts +1 -1
  12. package/analisador-semantico/gerenciador-escopos.d.ts +1 -1
  13. package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
  14. package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
  15. package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  16. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  17. package/avaliador-sintatico/avaliador-sintatico.js +99 -42
  18. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  19. package/avaliador-sintatico/comum.d.ts.map +1 -1
  20. package/avaliador-sintatico/comum.js.map +1 -1
  21. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
  22. package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
  23. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
  24. package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  25. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
  26. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
  27. package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
  28. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
  29. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +91 -96
  30. package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
  31. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
  32. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +4 -4
  33. package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
  34. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
  35. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
  36. package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
  37. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
  38. package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
  39. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
  40. package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
  41. package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
  42. package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
  43. package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
  44. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
  45. package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
  46. package/bibliotecas/biblioteca-global.d.ts.map +1 -1
  47. package/bibliotecas/biblioteca-global.js +93 -31
  48. package/bibliotecas/biblioteca-global.js.map +1 -1
  49. package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
  50. package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
  51. package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
  52. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
  53. package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
  54. package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
  55. package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
  56. package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
  57. package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
  58. package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
  59. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
  60. package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
  61. package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
  62. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
  63. package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
  64. package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
  65. package/bibliotecas/primitivas-dicionario.js +1 -1
  66. package/bibliotecas/primitivas-dicionario.js.map +1 -1
  67. package/bibliotecas/primitivas-numero.d.ts.map +1 -1
  68. package/bibliotecas/primitivas-numero.js.map +1 -1
  69. package/bibliotecas/primitivas-texto.d.ts.map +1 -1
  70. package/bibliotecas/primitivas-texto.js +1 -1
  71. package/bibliotecas/primitivas-texto.js.map +1 -1
  72. package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
  73. package/bibliotecas/primitivas-tupla.js +34 -14
  74. package/bibliotecas/primitivas-tupla.js.map +1 -1
  75. package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
  76. package/bibliotecas/primitivas-vetor.js +1 -1
  77. package/bibliotecas/primitivas-vetor.js.map +1 -1
  78. package/bin/package.json +1 -1
  79. package/construtos/ajuda-como-construto.d.ts +2 -2
  80. package/construtos/ajuda-como-construto.js +1 -1
  81. package/construtos/atribuir.d.ts.map +1 -1
  82. package/construtos/atribuir.js +5 -2
  83. package/construtos/atribuir.js.map +1 -1
  84. package/construtos/binario.d.ts.map +1 -1
  85. package/construtos/binario.js +1 -2
  86. package/construtos/binario.js.map +1 -1
  87. package/construtos/comentario-como-construto.d.ts.map +1 -1
  88. package/construtos/comentario-como-construto.js.map +1 -1
  89. package/construtos/decorador.d.ts.map +1 -1
  90. package/construtos/decorador.js +3 -1
  91. package/construtos/decorador.js.map +1 -1
  92. package/construtos/dicionario.d.ts.map +1 -1
  93. package/construtos/dicionario.js.map +1 -1
  94. package/construtos/tupla-n.d.ts +3 -3
  95. package/construtos/tupla-n.d.ts.map +1 -1
  96. package/construtos/tupla-n.js +4 -2
  97. package/construtos/tupla-n.js.map +1 -1
  98. package/declaracoes/ajuda.d.ts +3 -3
  99. package/declaracoes/funcao.d.ts +2 -1
  100. package/declaracoes/funcao.d.ts.map +1 -1
  101. package/declaracoes/funcao.js +2 -1
  102. package/declaracoes/funcao.js.map +1 -1
  103. package/declaracoes/interface.d.ts.map +1 -1
  104. package/declaracoes/interface.js.map +1 -1
  105. package/declaracoes/texto-documentacao.d.ts.map +1 -1
  106. package/declaracoes/texto-documentacao.js.map +1 -1
  107. package/estilizador/estilizador-delegua.d.ts.map +1 -1
  108. package/estilizador/estilizador-delegua.js +5 -1
  109. package/estilizador/estilizador-delegua.js.map +1 -1
  110. package/formatadores/formatador-delegua.d.ts.map +1 -1
  111. package/formatadores/formatador-delegua.js.map +1 -1
  112. package/formatadores/formatador-pitugues.d.ts.map +1 -1
  113. package/formatadores/formatador-pitugues.js +74 -29
  114. package/formatadores/formatador-pitugues.js.map +1 -1
  115. package/geracao-identificadores/index.js +2 -2
  116. package/geracao-identificadores/index.js.map +1 -1
  117. package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
  118. package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
  119. package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
  120. package/interfaces/modulo-interface.d.ts +2 -2
  121. package/interfaces/modulo-interface.d.ts.map +1 -1
  122. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  123. package/interpretador/comum.d.ts.map +1 -1
  124. package/interpretador/comum.js +55 -55
  125. package/interpretador/comum.js.map +1 -1
  126. package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
  127. package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
  128. package/interpretador/depuracao/comum.d.ts.map +1 -1
  129. package/interpretador/depuracao/comum.js +8 -4
  130. package/interpretador/depuracao/comum.js.map +1 -1
  131. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
  132. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -3
  133. package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
  134. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
  135. package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
  136. package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
  137. package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
  138. package/interpretador/dialetos/pitugues/comum.js +2 -3
  139. package/interpretador/dialetos/pitugues/comum.js.map +1 -1
  140. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
  141. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
  142. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
  143. package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
  144. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
  145. package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
  146. package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
  147. package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
  148. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
  149. package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
  150. package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
  151. package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
  152. package/interpretador/estruturas/delegua-funcao.js +3 -1
  153. package/interpretador/estruturas/delegua-funcao.js.map +1 -1
  154. package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
  155. package/interpretador/estruturas/descritor-tipo-classe.js +6 -6
  156. package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
  157. package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
  158. package/interpretador/estruturas/metodo-polimorfico.js +13 -9
  159. package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
  160. package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
  161. package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
  162. package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
  163. package/interpretador/estruturas/objeto-base.js.map +1 -1
  164. package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
  165. package/interpretador/estruturas/objeto-delegua-classe.js +10 -6
  166. package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
  167. package/interpretador/interpretador-base.d.ts +4 -4
  168. package/interpretador/interpretador-base.d.ts.map +1 -1
  169. package/interpretador/interpretador-base.js +123 -54
  170. package/interpretador/interpretador-base.js.map +1 -1
  171. package/interpretador/interpretador.d.ts.map +1 -1
  172. package/interpretador/interpretador.js +28 -17
  173. package/interpretador/interpretador.js.map +1 -1
  174. package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
  175. package/interpretador/pilha-escopos-execucao.js.map +1 -1
  176. package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
  177. package/lexador/dialetos/lexador-calango.js.map +1 -1
  178. package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
  179. package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  180. package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
  181. package/lexador/dialetos/lexador-pitugues.js +21 -13
  182. package/lexador/dialetos/lexador-pitugues.js.map +1 -1
  183. package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
  184. package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
  185. package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
  186. package/lexador/dialetos/lexador-prisma.js +25 -3
  187. package/lexador/dialetos/lexador-prisma.js.map +1 -1
  188. package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
  189. package/lexador/dialetos/lexador-tenda.js.map +1 -1
  190. package/lexador/filtro-paradigma.d.ts.map +1 -1
  191. package/lexador/filtro-paradigma.js.map +1 -1
  192. package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
  193. package/lexador/lexador-base-linha-unica.js.map +1 -1
  194. package/lexador/lexador-base.d.ts.map +1 -1
  195. package/lexador/lexador-base.js.map +1 -1
  196. package/lexador/lexador.d.ts.map +1 -1
  197. package/lexador/lexador.js.map +1 -1
  198. package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
  199. package/lexador/mapeamento-paradigmas.js.map +1 -1
  200. package/lexador/palavras-reservadas.js +2 -2
  201. package/lexador/palavras-reservadas.js.map +1 -1
  202. package/lexador/simbolo.d.ts.map +1 -1
  203. package/lexador/simbolo.js.map +1 -1
  204. package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
  205. package/package.json +1 -1
  206. package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
  207. package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
  208. package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
  209. package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
  210. package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
  211. package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
  212. package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
  213. package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
  214. package/tradutores/tradutor-assembly-arm.js +164 -156
  215. package/tradutores/tradutor-assembly-arm.js.map +1 -1
  216. package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
  217. package/tradutores/tradutor-assembly-x64.js +136 -127
  218. package/tradutores/tradutor-assembly-x64.js.map +1 -1
  219. package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
  220. package/tradutores/tradutor-assemblyscript.js +10 -6
  221. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  222. package/tradutores/tradutor-calango.d.ts.map +1 -1
  223. package/tradutores/tradutor-calango.js.map +1 -1
  224. package/tradutores/tradutor-elixir.d.ts.map +1 -1
  225. package/tradutores/tradutor-elixir.js +9 -7
  226. package/tradutores/tradutor-elixir.js.map +1 -1
  227. package/tradutores/tradutor-javascript.d.ts.map +1 -1
  228. package/tradutores/tradutor-javascript.js +2 -1
  229. package/tradutores/tradutor-javascript.js.map +1 -1
  230. package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
  231. package/tradutores/tradutor-mermaidjs.js +4 -8
  232. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  233. package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
  234. package/tradutores/tradutor-portugol-ipt.js.map +1 -1
  235. package/tradutores/tradutor-python.d.ts.map +1 -1
  236. package/tradutores/tradutor-python.js +1 -1
  237. package/tradutores/tradutor-python.js.map +1 -1
  238. package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
  239. package/tradutores/tradutor-ruby.d.ts.map +1 -1
  240. package/tradutores/tradutor-ruby.js +1 -1
  241. package/tradutores/tradutor-ruby.js.map +1 -1
  242. package/umd/delegua.js +1056 -720
@@ -59,10 +59,10 @@ class TradutorAssemblyARM {
59
59
  // Para android: ainda é um binário standalone, mas com rótulo Delegua_main
60
60
  // para deixar claro que não é o _start do CRT padrão.
61
61
  const entryLabel = this.alvo === 'android' ? 'Delegua_main' : '_start';
62
- this.text = `
63
- .text
64
- .global ${entryLabel}
65
-
62
+ this.text = `
63
+ .text
64
+ .global ${entryLabel}
65
+
66
66
  ${entryLabel}:`;
67
67
  }
68
68
  gerarDigitoAleatorio() {
@@ -104,11 +104,11 @@ ${entryLabel}:`;
104
104
  }
105
105
  const indice = this.dicionarioConstrutos[construto.indice.constructor.name](construto.indice);
106
106
  const reg = this.obterRegistrador();
107
- this.text += `
108
- ldr ${reg}, =${nomeVar}
109
- ldr r0, =${indice}
110
- lsl r0, r0, #2 @ multiply index by 4 (word size)
111
- add ${reg}, ${reg}, r0
107
+ this.text += `
108
+ ldr ${reg}, =${nomeVar}
109
+ ldr r0, =${indice}
110
+ lsl r0, r0, #2 @ multiply index by 4 (word size)
111
+ add ${reg}, ${reg}, r0
112
112
  ldr r0, [${reg}]`;
113
113
  this.liberarRegistrador(reg);
114
114
  return 'r0';
@@ -132,12 +132,12 @@ ${entryLabel}:`;
132
132
  const indice = this.dicionarioConstrutos[construto.indice.constructor.name](construto.indice);
133
133
  const valor = this.dicionarioConstrutos[construto.valor.constructor.name](construto.valor);
134
134
  const reg = this.obterRegistrador();
135
- this.text += `
136
- ldr ${reg}, =${nomeVar}
137
- ldr r1, =${indice}
138
- lsl r1, r1, #2 @ multiply by 4
139
- add ${reg}, ${reg}, r1
140
- ldr r1, =${valor}
135
+ this.text += `
136
+ ldr ${reg}, =${nomeVar}
137
+ ldr r1, =${indice}
138
+ lsl r1, r1, #2 @ multiply by 4
139
+ add ${reg}, ${reg}, r1
140
+ ldr r1, =${valor}
141
141
  str r1, [${reg}]`;
142
142
  this.liberarRegistrador(reg);
143
143
  }
@@ -156,9 +156,9 @@ ${entryLabel}:`;
156
156
  this.bss += ` ${varLabel}: .space 4\n`;
157
157
  this.variaveis.set(nomeVar, varLabel);
158
158
  }
159
- this.text += `
160
- ldr r0, =${valor}
161
- ldr r1, =${this.variaveis.get(nomeVar)}
159
+ this.text += `
160
+ ldr r0, =${valor}
161
+ ldr r1, =${this.variaveis.get(nomeVar)}
162
162
  str r0, [r1]`;
163
163
  }
164
164
  traduzirConstrutoBinario(construto) {
@@ -168,75 +168,75 @@ ${entryLabel}:`;
168
168
  const reg = this.obterRegistrador();
169
169
  // Load left operand into r0
170
170
  if (esquerda !== 'r0') {
171
- this.text += `
171
+ this.text += `
172
172
  ldr r0, =${esquerda}`;
173
173
  }
174
174
  // Load right operand into reg
175
- this.text += `
175
+ this.text += `
176
176
  ldr ${reg}, =${direita}`;
177
177
  switch (operador) {
178
178
  case '+':
179
- this.text += `
179
+ this.text += `
180
180
  add r0, r0, ${reg}`;
181
181
  break;
182
182
  case '-':
183
- this.text += `
183
+ this.text += `
184
184
  sub r0, r0, ${reg}`;
185
185
  break;
186
186
  case '*':
187
- this.text += `
187
+ this.text += `
188
188
  mul r0, r0, ${reg}`;
189
189
  break;
190
190
  case '/':
191
- this.text += `
191
+ this.text += `
192
192
  sdiv r0, r0, ${reg}`;
193
193
  break;
194
194
  case '%':
195
- this.text += `
196
- sdiv r1, r0, ${reg}
197
- mul r1, r1, ${reg}
195
+ this.text += `
196
+ sdiv r1, r0, ${reg}
197
+ mul r1, r1, ${reg}
198
198
  sub r0, r0, r1 @ r0 = r0 - (r0/reg)*reg`;
199
199
  break;
200
200
  case '<':
201
- this.text += `
202
- cmp r0, ${reg}
203
- movlt r0, #1
201
+ this.text += `
202
+ cmp r0, ${reg}
203
+ movlt r0, #1
204
204
  movge r0, #0`;
205
205
  break;
206
206
  case '>':
207
- this.text += `
208
- cmp r0, ${reg}
209
- movgt r0, #1
207
+ this.text += `
208
+ cmp r0, ${reg}
209
+ movgt r0, #1
210
210
  movle r0, #0`;
211
211
  break;
212
212
  case '<=':
213
- this.text += `
214
- cmp r0, ${reg}
215
- movle r0, #1
213
+ this.text += `
214
+ cmp r0, ${reg}
215
+ movle r0, #1
216
216
  movgt r0, #0`;
217
217
  break;
218
218
  case '>=':
219
- this.text += `
220
- cmp r0, ${reg}
221
- movge r0, #1
219
+ this.text += `
220
+ cmp r0, ${reg}
221
+ movge r0, #1
222
222
  movlt r0, #0`;
223
223
  break;
224
224
  case '==':
225
225
  case '===':
226
- this.text += `
227
- cmp r0, ${reg}
228
- moveq r0, #1
226
+ this.text += `
227
+ cmp r0, ${reg}
228
+ moveq r0, #1
229
229
  movne r0, #0`;
230
230
  break;
231
231
  case '!=':
232
232
  case '!==':
233
- this.text += `
234
- cmp r0, ${reg}
235
- movne r0, #1
233
+ this.text += `
234
+ cmp r0, ${reg}
235
+ movne r0, #1
236
236
  moveq r0, #0`;
237
237
  break;
238
238
  default:
239
- this.text += `
239
+ this.text += `
240
240
  @ Operador ${operador} não implementado`;
241
241
  }
242
242
  this.liberarRegistrador(reg);
@@ -254,35 +254,35 @@ ${entryLabel}:`;
254
254
  if (index < registrosArgs.length) {
255
255
  const valorArg = this.dicionarioConstrutos[arg.constructor.name](arg);
256
256
  if (valorArg !== registrosArgs[index]) {
257
- this.text += `
257
+ this.text += `
258
258
  ldr ${registrosArgs[index]}, =${valorArg}`;
259
259
  }
260
260
  }
261
261
  else {
262
262
  // Push extra args on stack
263
263
  const valorArg = this.dicionarioConstrutos[arg.constructor.name](arg);
264
- this.text += `
265
- ldr r0, =${valorArg}
264
+ this.text += `
265
+ ldr r0, =${valorArg}
266
266
  push {r0}`;
267
267
  }
268
268
  });
269
- this.text += `
269
+ this.text += `
270
270
  bl ${nomeFuncao}`;
271
271
  }
272
272
  traduzirConstrutoDefinirValor(construto) {
273
273
  const objeto = this.dicionarioConstrutos[construto.objeto.constructor.name](construto.objeto);
274
274
  const valor = this.dicionarioConstrutos[construto.valor.constructor.name](construto.valor);
275
- this.text += `
276
- ldr r0, =${valor}
277
- ldr r1, =${objeto}
275
+ this.text += `
276
+ ldr r0, =${valor}
277
+ ldr r1, =${objeto}
278
278
  str r0, [r1]`;
279
279
  }
280
280
  traduzirFuncaoConstruto(construto) {
281
281
  const labelFuncao = `func_${this.gerarDigitoAleatorio()}`;
282
- this.text += `
283
-
284
- ${labelFuncao}:
285
- push {fp, lr}
282
+ this.text += `
283
+
284
+ ${labelFuncao}:
285
+ push {fp, lr}
286
286
  mov fp, sp`;
287
287
  // Traduzir corpo da função
288
288
  if (construto.corpo && Array.isArray(construto.corpo)) {
@@ -292,8 +292,8 @@ ${labelFuncao}:
292
292
  }
293
293
  });
294
294
  }
295
- this.text += `
296
- mov sp, fp
295
+ this.text += `
296
+ mov sp, fp
297
297
  pop {fp, pc}`;
298
298
  }
299
299
  traduzirConstrutoLiteral(construto) {
@@ -308,29 +308,29 @@ ${labelFuncao}:
308
308
  const operador = construto.operador.lexema;
309
309
  const labelVerdadeiro = this.gerarLabel();
310
310
  const labelFim = this.gerarLabel();
311
- this.text += `
312
- ldr r0, =${esquerda}
311
+ this.text += `
312
+ ldr r0, =${esquerda}
313
313
  cmp r0, #0`;
314
314
  if (operador === 'e' || operador === '&&') {
315
- this.text += `
316
- beq ${labelFim}
317
- ldr r0, =${direita}
318
- cmp r0, #0
319
- beq ${labelFim}
320
- ${labelVerdadeiro}:
321
- mov r0, #1
315
+ this.text += `
316
+ beq ${labelFim}
317
+ ldr r0, =${direita}
318
+ cmp r0, #0
319
+ beq ${labelFim}
320
+ ${labelVerdadeiro}:
321
+ mov r0, #1
322
322
  ${labelFim}:`;
323
323
  }
324
324
  else if (operador === 'ou' || operador === '||') {
325
- this.text += `
326
- bne ${labelVerdadeiro}
327
- ldr r0, =${direita}
328
- cmp r0, #0
329
- bne ${labelVerdadeiro}
330
- mov r0, #0
331
- b ${labelFim}
332
- ${labelVerdadeiro}:
333
- mov r0, #1
325
+ this.text += `
326
+ bne ${labelVerdadeiro}
327
+ ldr r0, =${direita}
328
+ cmp r0, #0
329
+ bne ${labelVerdadeiro}
330
+ mov r0, #0
331
+ b ${labelFim}
332
+ ${labelVerdadeiro}:
333
+ mov r0, #1
334
334
  ${labelFim}:`;
335
335
  }
336
336
  return 'r0';
@@ -342,16 +342,16 @@ ${labelFim}:`;
342
342
  traduzirConstrutoUnario(construto) {
343
343
  const operando = this.dicionarioConstrutos[construto.operando.constructor.name](construto.operando);
344
344
  const operador = construto.operador.lexema;
345
- this.text += `
345
+ this.text += `
346
346
  ldr r0, =${operando}`;
347
347
  if (operador === '-') {
348
- this.text += `
348
+ this.text += `
349
349
  neg r0, r0`;
350
350
  }
351
351
  else if (operador === '!' || operador === 'nao') {
352
- this.text += `
353
- cmp r0, #0
354
- moveq r0, #1
352
+ this.text += `
353
+ cmp r0, #0
354
+ moveq r0, #1
355
355
  movne r0, #0`;
356
356
  }
357
357
  return 'r0';
@@ -361,8 +361,8 @@ ${labelFim}:`;
361
361
  const nomeVar = (_a = construto.simbolo) === null || _a === void 0 ? void 0 : _a.lexema;
362
362
  if (nomeVar && this.variaveis.has(nomeVar)) {
363
363
  const varLabel = this.variaveis.get(nomeVar);
364
- this.text += `
365
- ldr r0, =${varLabel}
364
+ this.text += `
365
+ ldr r0, =${varLabel}
366
366
  ldr r0, [r0]`;
367
367
  return 'r0';
368
368
  }
@@ -377,9 +377,9 @@ ${labelFim}:`;
377
377
  construto.valores.forEach((valor, index) => {
378
378
  if (this.dicionarioConstrutos[valor.constructor.name]) {
379
379
  const valorTraduzido = this.dicionarioConstrutos[valor.constructor.name](valor);
380
- this.text += `
381
- ldr r0, =${valorTraduzido}
382
- ldr r1, =${labelVetor}
380
+ this.text += `
381
+ ldr r0, =${valorTraduzido}
382
+ ldr r1, =${labelVetor}
383
383
  str r0, [r1, #${index * 4}]`;
384
384
  }
385
385
  });
@@ -399,17 +399,17 @@ ${labelFim}:`;
399
399
  traduzirDeclaracaoEnquanto(declaracao) {
400
400
  const labelInicio = this.gerarLabel();
401
401
  const labelFim = this.gerarLabel();
402
- this.text += `
402
+ this.text += `
403
403
  ${labelInicio}:`;
404
404
  const condicao = this.dicionarioConstrutos[declaracao.condicao.constructor.name](declaracao.condicao);
405
- this.text += `
406
- cmp ${condicao}, #0
405
+ this.text += `
406
+ cmp ${condicao}, #0
407
407
  beq ${labelFim}`;
408
408
  if (this.dicionarioDeclaracoes[declaracao.corpo.constructor.name]) {
409
409
  this.dicionarioDeclaracoes[declaracao.corpo.constructor.name](declaracao.corpo);
410
410
  }
411
- this.text += `
412
- b ${labelInicio}
411
+ this.text += `
412
+ b ${labelInicio}
413
413
  ${labelFim}:`;
414
414
  }
415
415
  traduzirDeclaracaoEscolha(declaracao) {
@@ -420,10 +420,10 @@ ${labelFim}:`;
420
420
  const labelProximo = this.gerarLabel();
421
421
  if (caminho.condicoes && caminho.condicoes[0]) {
422
422
  const valorCaso = this.dicionarioConstrutos[caminho.condicoes[0].constructor.name](caminho.condicoes[0]);
423
- this.text += `
424
- ldr r0, =${valorEscolha}
425
- ldr r1, =${valorCaso}
426
- cmp r0, r1
423
+ this.text += `
424
+ ldr r0, =${valorEscolha}
425
+ ldr r1, =${valorCaso}
426
+ cmp r0, r1
427
427
  bne ${labelProximo}`;
428
428
  if (caminho.declaracoes && Array.isArray(caminho.declaracoes)) {
429
429
  caminho.declaracoes.forEach((decl) => {
@@ -432,23 +432,24 @@ ${labelFim}:`;
432
432
  }
433
433
  });
434
434
  }
435
- this.text += `
436
- b ${labelFim}
435
+ this.text += `
436
+ b ${labelFim}
437
437
  ${labelProximo}:`;
438
438
  }
439
439
  });
440
440
  }
441
- this.text += `
441
+ this.text += `
442
442
  ${labelFim}:`;
443
443
  }
444
444
  traduzirDeclaracaoExpressao(declaracao) {
445
- if (declaracao.expressao && this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
445
+ if (declaracao.expressao &&
446
+ this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
446
447
  this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
447
448
  }
448
449
  }
449
450
  traduzirDeclaracaoFazer(declaracao) {
450
451
  const labelInicio = this.gerarLabel();
451
- this.text += `
452
+ this.text += `
452
453
  ${labelInicio}:`;
453
454
  if (declaracao.caminhoFazer && declaracao.caminhoFazer.declaracoes) {
454
455
  declaracao.caminhoFazer.declaracoes.forEach((decl) => {
@@ -459,52 +460,58 @@ ${labelInicio}:`;
459
460
  }
460
461
  if (declaracao.condicaoEnquanto) {
461
462
  const condicao = this.dicionarioConstrutos[declaracao.condicaoEnquanto.constructor.name](declaracao.condicaoEnquanto);
462
- this.text += `
463
- cmp ${condicao}, #0
463
+ this.text += `
464
+ cmp ${condicao}, #0
464
465
  bne ${labelInicio}`;
465
466
  }
466
467
  }
467
468
  traduzirDeclaracaoFalhar(declaracao) {
468
469
  let mensagem = '"Erro"';
469
- if (declaracao.explicacao && typeof declaracao.explicacao === 'object' && 'constructor' in declaracao.explicacao) {
470
+ if (declaracao.explicacao &&
471
+ typeof declaracao.explicacao === 'object' &&
472
+ 'constructor' in declaracao.explicacao) {
470
473
  const explicacao = declaracao.explicacao;
471
474
  if (explicacao.constructor && this.dicionarioConstrutos[explicacao.constructor.name]) {
472
475
  mensagem = this.dicionarioConstrutos[explicacao.constructor.name](explicacao);
473
476
  }
474
477
  }
475
- this.text += `
476
- @ Falhar com mensagem: ${mensagem}
477
- mov r0, #1
478
- mov r7, #1 @ sys_exit
478
+ this.text += `
479
+ @ Falhar com mensagem: ${mensagem}
480
+ mov r0, #1
481
+ mov r7, #1 @ sys_exit
479
482
  swi 0`;
480
483
  }
481
484
  traduzirDeclaracaoFuncao(declaracao) {
482
485
  var _a;
483
486
  const nomeFuncao = ((_a = declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) || 'funcao';
484
- this.text += `
485
-
486
- ${nomeFuncao}:
487
- push {fp, lr}
487
+ this.text += `
488
+
489
+ ${nomeFuncao}:
490
+ push {fp, lr}
488
491
  mov fp, sp`;
489
- if (declaracao.funcao && declaracao.funcao.corpo && Array.isArray(declaracao.funcao.corpo)) {
492
+ if (declaracao.funcao &&
493
+ declaracao.funcao.corpo &&
494
+ Array.isArray(declaracao.funcao.corpo)) {
490
495
  declaracao.funcao.corpo.forEach((decl) => {
491
496
  if (this.dicionarioDeclaracoes[decl.constructor.name]) {
492
497
  this.dicionarioDeclaracoes[decl.constructor.name](decl);
493
498
  }
494
499
  });
495
500
  }
496
- this.text += `
497
- mov sp, fp
501
+ this.text += `
502
+ mov sp, fp
498
503
  pop {fp, pc}`;
499
504
  }
500
505
  traduzirDeclaracaoImportar(declaracao) {
501
- this.text += `
506
+ this.text += `
502
507
  @ Importar: ${declaracao.caminho || 'unknown'}`;
503
508
  }
504
509
  traduzirDeclaracaoLeia(declaracao) {
505
510
  var _a;
506
511
  let nomeVar;
507
- if (declaracao.argumentos && declaracao.argumentos[0] && declaracao.argumentos[0] instanceof construtos_1.Variavel) {
512
+ if (declaracao.argumentos &&
513
+ declaracao.argumentos[0] &&
514
+ declaracao.argumentos[0] instanceof construtos_1.Variavel) {
508
515
  nomeVar = (_a = declaracao.argumentos[0].simbolo) === null || _a === void 0 ? void 0 : _a.lexema;
509
516
  }
510
517
  if (!nomeVar)
@@ -514,11 +521,11 @@ ${nomeFuncao}:
514
521
  this.bss += ` ${varLabel}: .space 256\n`;
515
522
  this.variaveis.set(nomeVar, varLabel);
516
523
  }
517
- this.text += `
518
- ldr r1, =${this.variaveis.get(nomeVar)}
519
- mov r2, #256
520
- mov r0, #0 @ stdin
521
- mov r7, #3 @ sys_read
524
+ this.text += `
525
+ ldr r1, =${this.variaveis.get(nomeVar)}
526
+ mov r2, #256
527
+ mov r0, #0 @ stdin
528
+ mov r7, #3 @ sys_read
522
529
  swi 0`;
523
530
  }
524
531
  traduzirDeclaracaoPara(declaracao) {
@@ -533,12 +540,12 @@ ${nomeFuncao}:
533
540
  this.dicionarioConstrutos[tipoInicializador](declaracao.inicializador);
534
541
  }
535
542
  }
536
- this.text += `
543
+ this.text += `
537
544
  ${labelInicio}:`;
538
545
  if (declaracao.condicao) {
539
546
  const condicao = this.dicionarioConstrutos[declaracao.condicao.constructor.name](declaracao.condicao);
540
- this.text += `
541
- cmp ${condicao}, #0
547
+ this.text += `
548
+ cmp ${condicao}, #0
542
549
  beq ${labelFim}`;
543
550
  }
544
551
  if (this.dicionarioDeclaracoes[declaracao.corpo.constructor.name]) {
@@ -549,8 +556,8 @@ ${labelInicio}:`;
549
556
  this.dicionarioConstrutos[declaracao.incrementar.constructor.name](declaracao.incrementar);
550
557
  }
551
558
  }
552
- this.text += `
553
- b ${labelInicio}
559
+ this.text += `
560
+ b ${labelInicio}
554
561
  ${labelFim}:`;
555
562
  }
556
563
  traduzirDeclaracaoParaCada(declaracao) {
@@ -566,55 +573,56 @@ ${labelFim}:`;
566
573
  if (vetor instanceof construtos_1.Vetor) {
567
574
  tamanhoVetor = vetor.tamanho || 0;
568
575
  }
569
- this.text += `
570
- mov r4, #0 @ counter
571
- ${labelInicio}:
572
- cmp r4, #${tamanhoVetor}
576
+ this.text += `
577
+ mov r4, #0 @ counter
578
+ ${labelInicio}:
579
+ cmp r4, #${tamanhoVetor}
573
580
  bge ${labelFim}`;
574
581
  if (this.dicionarioDeclaracoes[declaracao.corpo.constructor.name]) {
575
582
  this.dicionarioDeclaracoes[declaracao.corpo.constructor.name](declaracao.corpo);
576
583
  }
577
- this.text += `
578
- add r4, r4, #1
579
- b ${labelInicio}
584
+ this.text += `
585
+ add r4, r4, #1
586
+ b ${labelInicio}
580
587
  ${labelFim}:`;
581
588
  }
582
589
  traduzirDeclaracaoRetorna(declaracao) {
583
590
  if (declaracao.valor) {
584
591
  const valor = this.dicionarioConstrutos[declaracao.valor.constructor.name](declaracao.valor);
585
- this.text += `
592
+ this.text += `
586
593
  ldr r0, =${valor}`;
587
594
  }
588
- this.text += `
589
- mov sp, fp
595
+ this.text += `
596
+ mov sp, fp
590
597
  pop {fp, pc}`;
591
598
  }
592
599
  traduzirDeclaracaoSe(declaracao) {
593
600
  const labelSenao = this.gerarLabel();
594
601
  const labelFim = this.gerarLabel();
595
602
  const condicao = this.dicionarioConstrutos[declaracao.condicao.constructor.name](declaracao.condicao);
596
- this.text += `
597
- cmp ${condicao}, #0
603
+ this.text += `
604
+ cmp ${condicao}, #0
598
605
  beq ${labelSenao}`;
599
606
  if (this.dicionarioDeclaracoes[declaracao.caminhoEntao.constructor.name]) {
600
607
  this.dicionarioDeclaracoes[declaracao.caminhoEntao.constructor.name](declaracao.caminhoEntao);
601
608
  }
602
- this.text += `
603
- b ${labelFim}
609
+ this.text += `
610
+ b ${labelFim}
604
611
  ${labelSenao}:`;
605
- if (declaracao.caminhoSenao && this.dicionarioDeclaracoes[declaracao.caminhoSenao.constructor.name]) {
612
+ if (declaracao.caminhoSenao &&
613
+ this.dicionarioDeclaracoes[declaracao.caminhoSenao.constructor.name]) {
606
614
  this.dicionarioDeclaracoes[declaracao.caminhoSenao.constructor.name](declaracao.caminhoSenao);
607
615
  }
608
- this.text += `
616
+ this.text += `
609
617
  ${labelFim}:`;
610
618
  }
611
619
  traduzirDeclaracaoClasse(declaracao) {
612
620
  var _a;
613
- this.text += `
621
+ this.text += `
614
622
  @ Classe: ${((_a = declaracao.simbolo) === null || _a === void 0 ? void 0 : _a.lexema) || 'unknown'}`;
615
623
  }
616
624
  traduzirDeclaracaoTente(declaracao) {
617
- this.text += `
625
+ this.text += `
618
626
  @ Tente-pegue`;
619
627
  if (declaracao.caminhoTente && Array.isArray(declaracao.caminhoTente)) {
620
628
  declaracao.caminhoTente.forEach((decl) => {
@@ -653,9 +661,9 @@ ${labelFim}:`;
653
661
  }
654
662
  else if (this.dicionarioConstrutos[tipoInicializador]) {
655
663
  const valor = this.dicionarioConstrutos[tipoInicializador](declaracao.inicializador);
656
- this.text += `
657
- ldr r0, =${valor}
658
- ldr r1, =${varLabel}
664
+ this.text += `
665
+ ldr r0, =${valor}
666
+ ldr r1, =${varLabel}
659
667
  str r0, [r1]`;
660
668
  }
661
669
  }
@@ -682,20 +690,20 @@ ${labelFim}:`;
682
690
  // Para ambos linux-arm e android, continuamos usando a convenção
683
691
  // de syscall Linux ARM (write). Em Android típico, esse binário
684
692
  // seria executado via adb/Termux, onde essa convenção ainda é válida.
685
- this.text += `
686
- ldr r1, =${nome_string_literal}
687
- mov r2, #${tam_string_literal}
688
- mov r0, #1 @ fd stdout
689
- mov r7, #4 @ sys_write
693
+ this.text += `
694
+ ldr r1, =${nome_string_literal}
695
+ mov r2, #${tam_string_literal}
696
+ mov r0, #1 @ fd stdout
697
+ mov r7, #4 @ sys_write
690
698
  swi 0`;
691
699
  }
692
700
  saidaSistema() {
693
701
  // Mesmo comentário da função Escreva: usamos sys_exit Linux.
694
702
  // Em um futuro modo Android "NDK/JNI", esta função deveria
695
703
  // apenas retornar ao chamador em vez de fazer syscall direta.
696
- this.text += `
697
- mov r0, #1 @ exit status
698
- mov r7, #1 @ sys_exit
704
+ this.text += `
705
+ mov r0, #1 @ exit status
706
+ mov r7, #1 @ sys_exit
699
707
  swi 0`;
700
708
  }
701
709
  traduzir(declaracoes) {