@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.
- package/analisador-semantico/analisador-semantico-base.d.ts +2 -2
- package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +14 -6
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +38 -19
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +41 -18
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/analisador-semantico/funcao-hipotetica-interface.d.ts +1 -1
- package/analisador-semantico/gerenciador-escopos.d.ts +1 -1
- package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +99 -42
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/comum.d.ts.map +1 -1
- package/avaliador-sintatico/comum.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +91 -96
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +4 -4
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +93 -31
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
- package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/primitivas-dicionario.js +1 -1
- package/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/primitivas-numero.js.map +1 -1
- package/bibliotecas/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/primitivas-texto.js +1 -1
- package/bibliotecas/primitivas-texto.js.map +1 -1
- package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/primitivas-tupla.js +34 -14
- package/bibliotecas/primitivas-tupla.js.map +1 -1
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +1 -1
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/ajuda-como-construto.d.ts +2 -2
- package/construtos/ajuda-como-construto.js +1 -1
- package/construtos/atribuir.d.ts.map +1 -1
- package/construtos/atribuir.js +5 -2
- package/construtos/atribuir.js.map +1 -1
- package/construtos/binario.d.ts.map +1 -1
- package/construtos/binario.js +1 -2
- package/construtos/binario.js.map +1 -1
- package/construtos/comentario-como-construto.d.ts.map +1 -1
- package/construtos/comentario-como-construto.js.map +1 -1
- package/construtos/decorador.d.ts.map +1 -1
- package/construtos/decorador.js +3 -1
- package/construtos/decorador.js.map +1 -1
- package/construtos/dicionario.d.ts.map +1 -1
- package/construtos/dicionario.js.map +1 -1
- package/construtos/tupla-n.d.ts +3 -3
- package/construtos/tupla-n.d.ts.map +1 -1
- package/construtos/tupla-n.js +4 -2
- package/construtos/tupla-n.js.map +1 -1
- package/declaracoes/ajuda.d.ts +3 -3
- package/declaracoes/funcao.d.ts +2 -1
- package/declaracoes/funcao.d.ts.map +1 -1
- package/declaracoes/funcao.js +2 -1
- package/declaracoes/funcao.js.map +1 -1
- package/declaracoes/interface.d.ts.map +1 -1
- package/declaracoes/interface.js.map +1 -1
- package/declaracoes/texto-documentacao.d.ts.map +1 -1
- package/declaracoes/texto-documentacao.js.map +1 -1
- package/estilizador/estilizador-delegua.d.ts.map +1 -1
- package/estilizador/estilizador-delegua.js +5 -1
- package/estilizador/estilizador-delegua.js.map +1 -1
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js.map +1 -1
- package/formatadores/formatador-pitugues.d.ts.map +1 -1
- package/formatadores/formatador-pitugues.js +74 -29
- package/formatadores/formatador-pitugues.js.map +1 -1
- package/geracao-identificadores/index.js +2 -2
- package/geracao-identificadores/index.js.map +1 -1
- package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
- package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
- package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
- package/interfaces/modulo-interface.d.ts +2 -2
- package/interfaces/modulo-interface.d.ts.map +1 -1
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +55 -55
- package/interpretador/comum.js.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
- package/interpretador/depuracao/comum.d.ts.map +1 -1
- package/interpretador/depuracao/comum.js +8 -4
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -3
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +2 -3
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +3 -1
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.js +6 -6
- package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.js +13 -9
- package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
- package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-base.js.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.js +10 -6
- package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +4 -4
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +123 -54
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +28 -17
- package/interpretador/interpretador.js.map +1 -1
- package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
- package/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
- package/lexador/dialetos/lexador-calango.js.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
- package/lexador/dialetos/lexador-pitugues.js +21 -13
- package/lexador/dialetos/lexador-pitugues.js.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
- package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
- package/lexador/dialetos/lexador-prisma.js +25 -3
- package/lexador/dialetos/lexador-prisma.js.map +1 -1
- package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
- package/lexador/dialetos/lexador-tenda.js.map +1 -1
- package/lexador/filtro-paradigma.d.ts.map +1 -1
- package/lexador/filtro-paradigma.js.map +1 -1
- package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
- package/lexador/lexador-base-linha-unica.js.map +1 -1
- package/lexador/lexador-base.d.ts.map +1 -1
- package/lexador/lexador-base.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js.map +1 -1
- package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
- package/lexador/mapeamento-paradigmas.js.map +1 -1
- package/lexador/palavras-reservadas.js +2 -2
- package/lexador/palavras-reservadas.js.map +1 -1
- package/lexador/simbolo.d.ts.map +1 -1
- package/lexador/simbolo.js.map +1 -1
- package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
- package/package.json +1 -1
- package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
- package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
- package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
- package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
- package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
- package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
- package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
- package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-arm.js +164 -156
- package/tradutores/tradutor-assembly-arm.js.map +1 -1
- package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-x64.js +136 -127
- package/tradutores/tradutor-assembly-x64.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +10 -6
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-calango.d.ts.map +1 -1
- package/tradutores/tradutor-calango.js.map +1 -1
- package/tradutores/tradutor-elixir.d.ts.map +1 -1
- package/tradutores/tradutor-elixir.js +9 -7
- package/tradutores/tradutor-elixir.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +2 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
- package/tradutores/tradutor-mermaidjs.js +4 -8
- package/tradutores/tradutor-mermaidjs.js.map +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
- package/tradutores/tradutor-portugol-ipt.js.map +1 -1
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +1 -1
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.js +1 -1
- package/tradutores/tradutor-ruby.js.map +1 -1
- 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 &&
|
|
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 &&
|
|
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 &&
|
|
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 &&
|
|
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 &&
|
|
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) {
|