@designliquido/delegua 0.22.6 → 0.23.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 (28) hide show
  1. package/README.md +1 -1
  2. package/bin/package.json +2 -2
  3. package/fontes/avaliador-sintatico/dialetos/{avaliador-sintatico-eguap.d.ts → avaliador-sintatico-pitugues.d.ts} +1 -1
  4. package/fontes/avaliador-sintatico/dialetos/{avaliador-sintatico-eguap.js → avaliador-sintatico-pitugues.js} +131 -131
  5. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -0
  6. package/fontes/avaliador-sintatico/dialetos/index.d.ts +1 -1
  7. package/fontes/avaliador-sintatico/dialetos/index.js +1 -1
  8. package/fontes/avaliador-sintatico/dialetos/index.js.map +1 -1
  9. package/fontes/bibliotecas/biblioteca-global.js +1 -1
  10. package/fontes/bibliotecas/biblioteca-global.js.map +1 -1
  11. package/fontes/lexador/dialetos/index.d.ts +1 -1
  12. package/fontes/lexador/dialetos/index.js +1 -1
  13. package/fontes/lexador/dialetos/index.js.map +1 -1
  14. package/fontes/lexador/dialetos/lexador-birl.js +0 -10
  15. package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
  16. package/fontes/lexador/dialetos/{lexador-eguap.d.ts → lexador-pitugues.d.ts} +1 -1
  17. package/fontes/lexador/dialetos/{lexador-eguap.js → lexador-pitugues.js} +40 -40
  18. package/fontes/lexador/dialetos/lexador-pitugues.js.map +1 -0
  19. package/fontes/tipos-de-simbolos/{eguap.js → pitugues.js} +1 -1
  20. package/fontes/tipos-de-simbolos/pitugues.js.map +1 -0
  21. package/fontes/tradutores/tradutor-assemblyscript.d.ts +88 -0
  22. package/fontes/tradutores/tradutor-assemblyscript.js +575 -0
  23. package/fontes/tradutores/tradutor-assemblyscript.js.map +1 -0
  24. package/package.json +2 -2
  25. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +0 -1
  26. package/fontes/lexador/dialetos/lexador-eguap.js.map +0 -1
  27. package/fontes/tipos-de-simbolos/eguap.js.map +0 -1
  28. /package/fontes/tipos-de-simbolos/{eguap.d.ts → pitugues.d.ts} +0 -0
@@ -0,0 +1,88 @@
1
+ import { AcessoIndiceVariavel, AcessoMetodo, Agrupamento, AtribuicaoPorIndice, Atribuir, Binario, Chamada, DefinirValor, FuncaoConstruto, Literal, Logico, TipoDe, Unario, Variavel, Vetor } from '../construtos';
2
+ import { Bloco, Classe, Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, Leia, Para, ParaCada, Retorna, Se, Tente, Var } from '../declaracoes';
3
+ import { SimboloInterface } from '../interfaces';
4
+ import { CaminhoEscolha } from '../interfaces/construtos';
5
+ export declare class TradutorAssemblyScript {
6
+ indentacao: number;
7
+ declaracoesDeClasses: Classe[];
8
+ traduzirSimboloOperador(operador: SimboloInterface): string;
9
+ traduzirFuncoesNativas(metodo: string): string;
10
+ traduzirDeclaracaoEscreva(declaracaoEscreva: Escreva): string;
11
+ traduzirConstrutoLiteral(literal: Literal): string;
12
+ resolveTipoDeclaracaoVarEContante(tipo: string): string;
13
+ traduzirDeclaracaoVar(declaracaoVar: Var): string;
14
+ traduzirDeclaracaoConst(declaracaoConst: Const): string;
15
+ traduzirDeclaracaoTente(declaracaoTente: Tente): string;
16
+ logicaComumBlocoEscopo(declaracoes: Declaracao[]): string;
17
+ logicaTraducaoMetodoClasse(metodoClasse: FuncaoDeclaracao): string;
18
+ traduzirDeclaracaoClasse(declaracaoClasse: Classe): string;
19
+ traduzirDeclaracaoSe(declaracaoSe: Se): string;
20
+ traduzirDeclaracaoRetorna(declaracaoRetorna: Retorna): string;
21
+ traduzirDeclaracaoParaCada(declaracaoParaCada: ParaCada): string;
22
+ traduzirDeclaracaoPara(declaracaoPara: Para): string;
23
+ traduzirDeclaracaoImportar(declaracaoImportar: Importar): string;
24
+ traduzirDeclaracaoLeia(declaracaoLeia: Leia): string;
25
+ traduzirDeclaracaoFuncao(declaracaoFuncao: FuncaoDeclaracao): string;
26
+ traduzirDeclaracaoFalhar(falhar: Falhar): string;
27
+ traduzirDeclaracaoFazer(declaracaoFazer: Fazer): string;
28
+ traduzirDeclaracaoExpressao(declaracaoExpressao: Expressao): string;
29
+ logicaComumCaminhosEscolha(caminho: CaminhoEscolha): string;
30
+ traduzirDeclaracaoEscolha(declaracaoEscolha: Escolha): string;
31
+ traduzirDeclaracaoEnquanto(declaracaoEnquanto: Enquanto): string;
32
+ traduzirDeclaracaoBloco(declaracaoBloco: Bloco): string;
33
+ traduzirConstrutoVetor(vetor: Vetor): string;
34
+ traduzirConstrutoVariavel(variavel: Variavel): string;
35
+ traduzirConstrutoUnario(unario: Unario): string;
36
+ traduzirConstrutoTipoDe(tipoDe: TipoDe): string;
37
+ traduzirConstrutoLogico(logico: Logico): string;
38
+ traduzirFuncaoConstruto(funcaoConstruto: FuncaoConstruto): string;
39
+ traduzirConstrutoDefinirValor(definirValor: DefinirValor): string;
40
+ traduzirConstrutoChamada(chamada: Chamada): string;
41
+ traduzirConstrutoBinario(binario: Binario): string;
42
+ traduzirConstrutoAtribuir(atribuir: Atribuir): string;
43
+ traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice: AtribuicaoPorIndice): string;
44
+ traduzirConstrutoAgrupamento(agrupamento: Agrupamento): string;
45
+ trazudirConstrutoAcessoMetodo(acessoMetodo: AcessoMetodo): string;
46
+ traduzirAcessoIndiceVariavel(acessoIndiceVariavel: AcessoIndiceVariavel): string;
47
+ dicionarioConstrutos: {
48
+ AcessoIndiceVariavel: any;
49
+ AcessoMetodo: any;
50
+ Agrupamento: any;
51
+ AtribuicaoPorIndice: any;
52
+ Atribuir: any;
53
+ Binario: any;
54
+ Chamada: any;
55
+ DefinirValor: any;
56
+ FuncaoConstruto: any;
57
+ Isto: () => string;
58
+ Literal: any;
59
+ Logico: any;
60
+ TipoDe: any;
61
+ Unario: any;
62
+ Variavel: any;
63
+ Vetor: any;
64
+ };
65
+ dicionarioDeclaracoes: {
66
+ Bloco: any;
67
+ Enquanto: any;
68
+ Continua: () => string;
69
+ Escolha: any;
70
+ Expressao: any;
71
+ Fazer: any;
72
+ Falhar: any;
73
+ FuncaoDeclaracao: any;
74
+ Importar: any;
75
+ Leia: any;
76
+ Para: any;
77
+ ParaCada: any;
78
+ Retorna: any;
79
+ Se: any;
80
+ Sustar: () => string;
81
+ Classe: any;
82
+ Tente: any;
83
+ Const: any;
84
+ Var: any;
85
+ Escreva: any;
86
+ };
87
+ traduzir(declaracoes: Declaracao[]): string;
88
+ }
@@ -0,0 +1,575 @@
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.TradutorAssemblyScript = 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
+ class TradutorAssemblyScript {
11
+ constructor() {
12
+ this.indentacao = 0;
13
+ this.dicionarioConstrutos = {
14
+ AcessoIndiceVariavel: this.traduzirAcessoIndiceVariavel.bind(this),
15
+ AcessoMetodo: this.trazudirConstrutoAcessoMetodo.bind(this),
16
+ Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
17
+ AtribuicaoPorIndice: this.traduzirConstrutoAtribuicaoPorIndice.bind(this),
18
+ Atribuir: this.traduzirConstrutoAtribuir.bind(this),
19
+ Binario: this.traduzirConstrutoBinario.bind(this),
20
+ Chamada: this.traduzirConstrutoChamada.bind(this),
21
+ DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
22
+ FuncaoConstruto: this.traduzirFuncaoConstruto.bind(this),
23
+ Isto: () => 'this',
24
+ Literal: this.traduzirConstrutoLiteral.bind(this),
25
+ Logico: this.traduzirConstrutoLogico.bind(this),
26
+ TipoDe: this.traduzirConstrutoTipoDe.bind(this),
27
+ Unario: this.traduzirConstrutoUnario.bind(this),
28
+ Variavel: this.traduzirConstrutoVariavel.bind(this),
29
+ Vetor: this.traduzirConstrutoVetor.bind(this),
30
+ };
31
+ this.dicionarioDeclaracoes = {
32
+ Bloco: this.traduzirDeclaracaoBloco.bind(this),
33
+ Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
34
+ Continua: () => 'continue',
35
+ Escolha: this.traduzirDeclaracaoEscolha.bind(this),
36
+ Expressao: this.traduzirDeclaracaoExpressao.bind(this),
37
+ Fazer: this.traduzirDeclaracaoFazer.bind(this),
38
+ Falhar: this.traduzirDeclaracaoFalhar.bind(this),
39
+ FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
40
+ Importar: this.traduzirDeclaracaoImportar.bind(this),
41
+ Leia: this.traduzirDeclaracaoLeia.bind(this),
42
+ Para: this.traduzirDeclaracaoPara.bind(this),
43
+ ParaCada: this.traduzirDeclaracaoParaCada.bind(this),
44
+ Retorna: this.traduzirDeclaracaoRetorna.bind(this),
45
+ Se: this.traduzirDeclaracaoSe.bind(this),
46
+ Sustar: () => 'break',
47
+ Classe: this.traduzirDeclaracaoClasse.bind(this),
48
+ Tente: this.traduzirDeclaracaoTente.bind(this),
49
+ Const: this.traduzirDeclaracaoConst.bind(this),
50
+ Var: this.traduzirDeclaracaoVar.bind(this),
51
+ Escreva: this.traduzirDeclaracaoEscreva.bind(this),
52
+ };
53
+ }
54
+ traduzirSimboloOperador(operador) {
55
+ switch (operador.tipo) {
56
+ case delegua_1.default.ADICAO:
57
+ return '+';
58
+ case delegua_1.default.BIT_AND:
59
+ return '&';
60
+ case delegua_1.default.BIT_OR:
61
+ return '|';
62
+ case delegua_1.default.BIT_XOR:
63
+ return '^';
64
+ case delegua_1.default.BIT_NOT:
65
+ return '~';
66
+ case delegua_1.default.DIFERENTE:
67
+ return '!==';
68
+ case delegua_1.default.DIVISAO:
69
+ return '/';
70
+ case delegua_1.default.E:
71
+ return '&&';
72
+ case delegua_1.default.EXPONENCIACAO:
73
+ return '**';
74
+ case delegua_1.default.IGUAL:
75
+ return '=';
76
+ case delegua_1.default.IGUAL_IGUAL:
77
+ return '===';
78
+ case delegua_1.default.MAIOR:
79
+ return '>';
80
+ case delegua_1.default.MAIOR_IGUAL:
81
+ return '>=';
82
+ case delegua_1.default.MENOR:
83
+ return '<';
84
+ case delegua_1.default.MENOR_IGUAL:
85
+ return '<=';
86
+ case delegua_1.default.MODULO:
87
+ return '%';
88
+ case delegua_1.default.MULTIPLICACAO:
89
+ return '*';
90
+ case delegua_1.default.OU:
91
+ return '||';
92
+ case delegua_1.default.SUBTRACAO:
93
+ return '-';
94
+ }
95
+ }
96
+ traduzirFuncoesNativas(metodo) {
97
+ switch (metodo.toLowerCase()) {
98
+ case 'adicionar':
99
+ case 'empilhar':
100
+ return 'push';
101
+ case 'concatenar':
102
+ return 'concat';
103
+ case 'fatiar':
104
+ return 'slice';
105
+ case 'inclui':
106
+ return 'includes';
107
+ case 'inverter':
108
+ return 'reverse';
109
+ case 'juntar':
110
+ return 'join';
111
+ case 'ordenar':
112
+ return 'sort';
113
+ case 'removerprimeiro':
114
+ return 'shift';
115
+ case 'removerultimo':
116
+ return 'pop';
117
+ case 'tamanho':
118
+ return 'length';
119
+ case 'maiusculo':
120
+ return 'toUpperCase';
121
+ case 'minusculo':
122
+ return 'toLowerCase';
123
+ case 'substituir':
124
+ return 'replace';
125
+ default:
126
+ return metodo;
127
+ }
128
+ }
129
+ traduzirDeclaracaoEscreva(declaracaoEscreva) {
130
+ let resultado = 'console.log(';
131
+ for (const argumento of declaracaoEscreva.argumentos) {
132
+ const valor = this.dicionarioConstrutos[argumento.constructor.name](argumento);
133
+ resultado += valor + ', ';
134
+ }
135
+ resultado = resultado.slice(0, -2);
136
+ resultado += ')';
137
+ return resultado;
138
+ }
139
+ traduzirConstrutoLiteral(literal) {
140
+ if (typeof literal.valor === 'string')
141
+ return `'${literal.valor}'`;
142
+ return literal.valor;
143
+ }
144
+ resolveTipoDeclaracaoVarEContante(tipo) {
145
+ switch (tipo) {
146
+ case 'texto':
147
+ return ': string';
148
+ case 'inteiro':
149
+ case 'real':
150
+ return ': f64';
151
+ case 'logico':
152
+ return ': bool';
153
+ case 'nulo':
154
+ return ': null';
155
+ case 'inteiro[]':
156
+ case 'real[]':
157
+ return ': f64[]';
158
+ case 'texto[]':
159
+ return ': string[]';
160
+ case 'logico[]':
161
+ return ': bool[]';
162
+ default:
163
+ return ': any';
164
+ }
165
+ }
166
+ traduzirDeclaracaoVar(declaracaoVar) {
167
+ let resultado = 'let ';
168
+ resultado += declaracaoVar.simbolo.lexema;
169
+ resultado += this.resolveTipoDeclaracaoVarEContante(declaracaoVar.tipo);
170
+ if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
171
+ resultado += ';';
172
+ else {
173
+ resultado += ' = ';
174
+ if (this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name]) {
175
+ resultado += this.dicionarioConstrutos[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
176
+ }
177
+ else {
178
+ resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
179
+ }
180
+ resultado += ';';
181
+ }
182
+ return resultado;
183
+ }
184
+ traduzirDeclaracaoConst(declaracaoConst) {
185
+ let resultado = 'const ';
186
+ resultado += declaracaoConst.simbolo.lexema;
187
+ resultado += this.resolveTipoDeclaracaoVarEContante(declaracaoConst.tipo);
188
+ if (!(declaracaoConst === null || declaracaoConst === void 0 ? void 0 : declaracaoConst.inicializador))
189
+ resultado += ';';
190
+ else {
191
+ resultado += ' = ';
192
+ if (this.dicionarioConstrutos[declaracaoConst.inicializador.constructor.name]) {
193
+ resultado += this.dicionarioConstrutos[declaracaoConst.inicializador.constructor.name](declaracaoConst.inicializador);
194
+ }
195
+ else {
196
+ resultado += this.dicionarioDeclaracoes[declaracaoConst.inicializador.constructor.name](declaracaoConst.inicializador);
197
+ }
198
+ resultado += ';';
199
+ }
200
+ return resultado;
201
+ }
202
+ traduzirDeclaracaoTente(declaracaoTente) {
203
+ let resultado = 'try {\n';
204
+ this.indentacao += 4;
205
+ resultado += ' '.repeat(this.indentacao);
206
+ for (let condicao of declaracaoTente.caminhoTente) {
207
+ resultado += this.dicionarioDeclaracoes[condicao.constructor.name](condicao) + '\n';
208
+ resultado += ' '.repeat(this.indentacao);
209
+ }
210
+ resultado += '}';
211
+ if (declaracaoTente.caminhoPegue !== null) {
212
+ resultado += '\ncatch {\n';
213
+ resultado += ' '.repeat(this.indentacao);
214
+ if (Array.isArray(declaracaoTente.caminhoPegue)) {
215
+ for (let declaracao of declaracaoTente.caminhoPegue) {
216
+ resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
217
+ }
218
+ }
219
+ else {
220
+ for (let corpo of declaracaoTente.caminhoPegue.corpo) {
221
+ resultado += this.dicionarioDeclaracoes[corpo.constructor.name](corpo) + '\n';
222
+ }
223
+ }
224
+ resultado += ' '.repeat(this.indentacao);
225
+ resultado += '}';
226
+ }
227
+ if (declaracaoTente.caminhoFinalmente !== null) {
228
+ resultado += '\nfinally {\n';
229
+ for (let finalmente of declaracaoTente.caminhoFinalmente) {
230
+ resultado += this.dicionarioDeclaracoes[finalmente.constructor.name](finalmente) + '\n';
231
+ }
232
+ resultado += ' '.repeat(this.indentacao);
233
+ resultado += '}';
234
+ }
235
+ return resultado;
236
+ }
237
+ logicaComumBlocoEscopo(declaracoes) {
238
+ let resultado = '{\n';
239
+ this.indentacao += 4;
240
+ if (typeof declaracoes[Symbol.iterator] === 'function') {
241
+ for (const declaracaoOuConstruto of declaracoes) {
242
+ resultado += ' '.repeat(this.indentacao);
243
+ const nomeConstrutor = declaracaoOuConstruto.constructor.name;
244
+ if (this.dicionarioConstrutos.hasOwnProperty(nomeConstrutor)) {
245
+ resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoOuConstruto);
246
+ }
247
+ else {
248
+ resultado += this.dicionarioDeclaracoes[nomeConstrutor](declaracaoOuConstruto);
249
+ }
250
+ resultado += '\n';
251
+ }
252
+ }
253
+ this.indentacao -= 4;
254
+ resultado += ' '.repeat(this.indentacao) + '}\n';
255
+ return resultado;
256
+ }
257
+ logicaTraducaoMetodoClasse(metodoClasse) {
258
+ this.indentacao += 4;
259
+ let resultado = ' '.repeat(this.indentacao);
260
+ resultado += metodoClasse.simbolo.lexema === 'construtor' ? 'constructor(' : metodoClasse.simbolo.lexema + '(';
261
+ for (let parametro of metodoClasse.funcao.parametros) {
262
+ resultado += parametro.nome.lexema + ', ';
263
+ }
264
+ if (metodoClasse.funcao.parametros.length > 0) {
265
+ resultado = resultado.slice(0, -2);
266
+ }
267
+ resultado += ') ';
268
+ resultado += this.logicaComumBlocoEscopo(metodoClasse.funcao.corpo);
269
+ resultado += ' '.repeat(this.indentacao) + '\n';
270
+ this.indentacao -= 4;
271
+ return resultado;
272
+ }
273
+ traduzirDeclaracaoClasse(declaracaoClasse) {
274
+ let resultado = 'export class ';
275
+ if (declaracaoClasse.superClasse)
276
+ resultado += `${declaracaoClasse.simbolo.lexema} extends ${declaracaoClasse.superClasse.simbolo.lexema} {\n`;
277
+ else
278
+ resultado += declaracaoClasse.simbolo.lexema + ' {\n';
279
+ for (let metodo of declaracaoClasse.metodos) {
280
+ resultado += this.logicaTraducaoMetodoClasse(metodo);
281
+ }
282
+ resultado += '}';
283
+ return resultado;
284
+ }
285
+ traduzirDeclaracaoSe(declaracaoSe) {
286
+ let resultado = 'if (';
287
+ const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
288
+ resultado += condicao;
289
+ resultado += ')';
290
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
291
+ if (declaracaoSe.caminhoSenao !== null) {
292
+ resultado += ' '.repeat(this.indentacao);
293
+ resultado += 'else ';
294
+ const se = declaracaoSe === null || declaracaoSe === void 0 ? void 0 : declaracaoSe.caminhoSenao;
295
+ if (se === null || se === void 0 ? void 0 : se.caminhoEntao) {
296
+ resultado += 'if (';
297
+ resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao);
298
+ resultado += ')';
299
+ resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
300
+ resultado += ' '.repeat(this.indentacao);
301
+ if (se === null || se === void 0 ? void 0 : se.caminhoSenao) {
302
+ resultado += 'else ';
303
+ resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao);
304
+ return resultado;
305
+ }
306
+ }
307
+ resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
308
+ }
309
+ return resultado;
310
+ }
311
+ traduzirDeclaracaoRetorna(declaracaoRetorna) {
312
+ let resultado = 'return ';
313
+ const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
314
+ return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
315
+ }
316
+ traduzirDeclaracaoParaCada(declaracaoParaCada) {
317
+ let resultado = `for (let ${declaracaoParaCada.nomeVariavelIteracao} of `;
318
+ resultado +=
319
+ this.dicionarioConstrutos[declaracaoParaCada.vetor.constructor.name](declaracaoParaCada.vetor) + ') ';
320
+ resultado += this.dicionarioDeclaracoes[declaracaoParaCada.corpo.constructor.name](declaracaoParaCada.corpo);
321
+ return resultado;
322
+ }
323
+ traduzirDeclaracaoPara(declaracaoPara) {
324
+ let resultado = 'for (';
325
+ if (declaracaoPara.inicializador.constructor.name === 'Array') {
326
+ resultado +=
327
+ this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
328
+ }
329
+ else {
330
+ resultado +=
331
+ this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + ' ';
332
+ }
333
+ resultado += !resultado.includes(';') ? ';' : '';
334
+ resultado +=
335
+ this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
336
+ resultado +=
337
+ this.dicionarioConstrutos[declaracaoPara.incrementar.constructor.name](declaracaoPara.incrementar) + ') ';
338
+ resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
339
+ return resultado;
340
+ }
341
+ traduzirDeclaracaoImportar(declaracaoImportar) {
342
+ return `'importar() não é suportado por este padrão de JavaScript'`;
343
+ }
344
+ traduzirDeclaracaoLeia(declaracaoLeia) {
345
+ return `'leia() não é suportado por este padrão de JavaScript.'`;
346
+ }
347
+ traduzirDeclaracaoFuncao(declaracaoFuncao) {
348
+ let resultado = 'function ';
349
+ resultado += declaracaoFuncao.simbolo.lexema + ' (';
350
+ for (const parametro of declaracaoFuncao.funcao.parametros) {
351
+ resultado += parametro.nome.lexema + ', ';
352
+ }
353
+ if (declaracaoFuncao.funcao.parametros.length > 0) {
354
+ resultado = resultado.slice(0, -2);
355
+ }
356
+ resultado += ') ';
357
+ resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
358
+ return resultado;
359
+ }
360
+ traduzirDeclaracaoFalhar(falhar) {
361
+ return `throw '${falhar.explicacao}'`;
362
+ }
363
+ traduzirDeclaracaoFazer(declaracaoFazer) {
364
+ let resultado = 'do ';
365
+ resultado += this.dicionarioDeclaracoes[declaracaoFazer.caminhoFazer.constructor.name](declaracaoFazer.caminhoFazer);
366
+ resultado +=
367
+ 'while (' +
368
+ this.dicionarioConstrutos[declaracaoFazer.condicaoEnquanto.constructor.name](declaracaoFazer.condicaoEnquanto) +
369
+ ') ';
370
+ return resultado;
371
+ }
372
+ traduzirDeclaracaoExpressao(declaracaoExpressao) {
373
+ return this.dicionarioConstrutos[declaracaoExpressao.expressao.constructor.name](declaracaoExpressao.expressao);
374
+ }
375
+ logicaComumCaminhosEscolha(caminho) {
376
+ var _a, _b, _c;
377
+ let resultado = '';
378
+ this.indentacao += 4;
379
+ resultado += ' '.repeat(this.indentacao);
380
+ if ((_a = caminho === null || caminho === void 0 ? void 0 : caminho.condicoes) === null || _a === void 0 ? void 0 : _a.length) {
381
+ for (let condicao of caminho.condicoes) {
382
+ resultado += 'case ' + this.dicionarioConstrutos[condicao.constructor.name](condicao) + ':\n';
383
+ resultado += ' '.repeat(this.indentacao);
384
+ }
385
+ }
386
+ if ((_b = caminho === null || caminho === void 0 ? void 0 : caminho.declaracoes) === null || _b === void 0 ? void 0 : _b.length) {
387
+ for (let declaracao of caminho.declaracoes) {
388
+ resultado += ' '.repeat(this.indentacao + 4);
389
+ if (((_c = declaracao === null || declaracao === void 0 ? void 0 : declaracao.simboloChave) === null || _c === void 0 ? void 0 : _c.lexema) === 'retorna') {
390
+ resultado +=
391
+ 'return ' + this.dicionarioConstrutos[declaracao.valor.constructor.name](declaracao.valor);
392
+ }
393
+ resultado += this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao) + '\n';
394
+ }
395
+ resultado += ' '.repeat(this.indentacao + 4);
396
+ resultado += 'break' + '\n';
397
+ }
398
+ this.indentacao -= 4;
399
+ return resultado;
400
+ }
401
+ traduzirDeclaracaoEscolha(declaracaoEscolha) {
402
+ let resultado = 'switch (';
403
+ resultado +=
404
+ this.dicionarioConstrutos[declaracaoEscolha.identificadorOuLiteral.constructor.name](declaracaoEscolha.identificadorOuLiteral) + ') {\n';
405
+ for (let caminho of declaracaoEscolha.caminhos) {
406
+ resultado += this.logicaComumCaminhosEscolha(caminho);
407
+ }
408
+ if (declaracaoEscolha.caminhoPadrao) {
409
+ resultado += ' '.repeat(4);
410
+ resultado += 'default:\n';
411
+ resultado += this.logicaComumCaminhosEscolha(declaracaoEscolha.caminhoPadrao);
412
+ }
413
+ resultado += '}\n';
414
+ return resultado;
415
+ }
416
+ traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
417
+ let resultado = 'while (';
418
+ resultado +=
419
+ this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao) + ') ';
420
+ resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
421
+ return resultado;
422
+ }
423
+ traduzirDeclaracaoBloco(declaracaoBloco) {
424
+ return this.logicaComumBlocoEscopo(declaracaoBloco.declaracoes);
425
+ }
426
+ traduzirConstrutoVetor(vetor) {
427
+ if (!vetor.valores.length) {
428
+ return '[]';
429
+ }
430
+ let resultado = '[';
431
+ for (let valor of vetor.valores) {
432
+ resultado += `${this.dicionarioConstrutos[valor.constructor.name](valor)}, `;
433
+ }
434
+ if (vetor.valores.length > 0) {
435
+ resultado = resultado.slice(0, -2);
436
+ }
437
+ resultado += ']';
438
+ return resultado;
439
+ }
440
+ traduzirConstrutoVariavel(variavel) {
441
+ return variavel.simbolo.lexema;
442
+ }
443
+ traduzirConstrutoUnario(unario) {
444
+ var _a, _b;
445
+ let resultado = '';
446
+ if ([delegua_1.default.INCREMENTAR, delegua_1.default.DECREMENTAR].includes(unario.operador.tipo)) {
447
+ resultado += (_a = unario.operando.valor) !== null && _a !== void 0 ? _a : unario.operando.simbolo.lexema;
448
+ resultado += unario.operador.tipo === delegua_1.default.INCREMENTAR ? '++' : '--';
449
+ }
450
+ else {
451
+ resultado += this.traduzirSimboloOperador(unario.operador);
452
+ resultado += (_b = unario.operando.valor) !== null && _b !== void 0 ? _b : unario.operando.simbolo.lexema;
453
+ }
454
+ return resultado;
455
+ }
456
+ traduzirConstrutoTipoDe(tipoDe) {
457
+ let resultado = 'typeof ';
458
+ if (typeof tipoDe.valor === 'string')
459
+ resultado += `'${tipoDe.valor}'`;
460
+ else if (tipoDe.valor instanceof construtos_1.Vetor)
461
+ resultado += this.traduzirConstrutoVetor(tipoDe.valor);
462
+ else
463
+ resultado += tipoDe.valor;
464
+ return resultado;
465
+ }
466
+ traduzirConstrutoLogico(logico) {
467
+ let direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
468
+ let operador = this.traduzirSimboloOperador(logico.operador);
469
+ let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
470
+ return `${direita} ${operador} ${esquerda}`;
471
+ }
472
+ traduzirFuncaoConstruto(funcaoConstruto) {
473
+ let resultado = 'function(';
474
+ for (const parametro of funcaoConstruto.parametros) {
475
+ const tipoParametro = this.resolveTipoDeclaracaoVarEContante(parametro.tipo);
476
+ resultado += `${parametro.nome.lexema}${tipoParametro}, `;
477
+ }
478
+ if (funcaoConstruto.parametros.length > 0) {
479
+ resultado = resultado.slice(0, -2);
480
+ }
481
+ resultado += ') ';
482
+ resultado += this.logicaComumBlocoEscopo(funcaoConstruto.corpo);
483
+ return resultado;
484
+ }
485
+ traduzirConstrutoDefinirValor(definirValor) {
486
+ let resultado = '';
487
+ if (definirValor.objeto instanceof construtos_1.Isto) {
488
+ resultado = 'this.' + definirValor.nome.lexema + ' = ';
489
+ }
490
+ resultado += definirValor.valor.simbolo.lexema;
491
+ return resultado;
492
+ }
493
+ traduzirConstrutoChamada(chamada) {
494
+ let resultado = '';
495
+ const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
496
+ 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; });
497
+ if (instanciaClasse) {
498
+ 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; });
499
+ if (classe.simbolo.lexema === retorno)
500
+ resultado += `new ${retorno}`;
501
+ }
502
+ else {
503
+ resultado += retorno;
504
+ }
505
+ resultado += '(';
506
+ for (let parametro of chamada.argumentos) {
507
+ resultado += this.dicionarioConstrutos[parametro.constructor.name](parametro) + ', ';
508
+ }
509
+ if (chamada.argumentos.length > 0) {
510
+ resultado = resultado.slice(0, -2);
511
+ }
512
+ resultado += ')';
513
+ return resultado;
514
+ }
515
+ traduzirConstrutoBinario(binario) {
516
+ let resultado = '';
517
+ if (binario.esquerda.constructor.name === 'Agrupamento')
518
+ resultado += '(' + this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda) + ')';
519
+ else
520
+ resultado += this.dicionarioConstrutos[binario.esquerda.constructor.name](binario.esquerda);
521
+ let operador = this.traduzirSimboloOperador(binario.operador);
522
+ resultado += ` ${operador} `;
523
+ if (binario.direita.constructor.name === 'Agrupamento')
524
+ resultado += '(' + this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita) + ')';
525
+ else
526
+ resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
527
+ return resultado;
528
+ }
529
+ traduzirConstrutoAtribuir(atribuir) {
530
+ let resultado = atribuir.simbolo.lexema;
531
+ resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
532
+ return resultado;
533
+ }
534
+ traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
535
+ var _a, _b;
536
+ let resultado = '';
537
+ resultado += AtribuicaoPorIndice.objeto.simbolo.lexema + '[';
538
+ resultado +=
539
+ this.dicionarioConstrutos[AtribuicaoPorIndice.indice.constructor.name](AtribuicaoPorIndice.indice) + ']';
540
+ resultado += ' = ';
541
+ if ((_b = (_a = AtribuicaoPorIndice === null || AtribuicaoPorIndice === void 0 ? void 0 : AtribuicaoPorIndice.valor) === null || _a === void 0 ? void 0 : _a.simbolo) === null || _b === void 0 ? void 0 : _b.lexema) {
542
+ resultado += `${AtribuicaoPorIndice.valor.simbolo.lexema}`;
543
+ }
544
+ else {
545
+ resultado += this.dicionarioConstrutos[AtribuicaoPorIndice.valor.constructor.name](AtribuicaoPorIndice.valor);
546
+ }
547
+ return resultado;
548
+ }
549
+ traduzirConstrutoAgrupamento(agrupamento) {
550
+ return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
551
+ }
552
+ trazudirConstrutoAcessoMetodo(acessoMetodo) {
553
+ if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
554
+ let objetoVariavel = acessoMetodo.objeto;
555
+ return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema)}`;
556
+ }
557
+ return `this.${acessoMetodo.simbolo.lexema}`;
558
+ }
559
+ traduzirAcessoIndiceVariavel(acessoIndiceVariavel) {
560
+ let resultado = '';
561
+ resultado += this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
562
+ resultado += `[${this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice)}]`;
563
+ return resultado;
564
+ }
565
+ traduzir(declaracoes) {
566
+ let resultado = '';
567
+ this.declaracoesDeClasses = declaracoes.filter((declaracao) => declaracao instanceof declaracoes_1.Classe);
568
+ for (const declaracao of declaracoes) {
569
+ resultado += `${this.dicionarioDeclaracoes[declaracao.constructor.name](declaracao)} \n`;
570
+ }
571
+ return resultado;
572
+ }
573
+ }
574
+ exports.TradutorAssemblyScript = TradutorAssemblyScript;
575
+ //# sourceMappingURL=tradutor-assemblyscript.js.map