@designliquido/delegua 0.37.0 → 0.37.2
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/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +10 -6
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/bin/package.json +5 -1
- package/construtos/acesso-indice-variavel.d.ts +2 -2
- package/construtos/acesso-indice-variavel.d.ts.map +1 -1
- package/construtos/acesso-indice-variavel.js.map +1 -1
- package/construtos/atribuicao-por-indice.d.ts +4 -4
- package/construtos/atribuicao-por-indice.d.ts.map +1 -1
- package/construtos/atribuicao-por-indice.js.map +1 -1
- package/construtos/atribuir.d.ts +2 -3
- package/construtos/atribuir.d.ts.map +1 -1
- package/construtos/atribuir.js +1 -1
- package/construtos/atribuir.js.map +1 -1
- package/interpretador/interpretador-base.js.map +1 -1
- package/package.json +5 -1
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +3 -2
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts +4 -4
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +27 -24
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-python.d.ts +20 -5
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +109 -55
- package/tradutores/tradutor-python.js.map +1 -1
- package/umd/delegua.js +150 -88
package/umd/delegua.js
CHANGED
|
@@ -539,11 +539,12 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
539
539
|
delegua_2.default.DIVISAO_INTEIRA_IGUAL,
|
|
540
540
|
delegua_2.default.MODULO_IGUAL,
|
|
541
541
|
].includes(expressao.operador.tipo)) {
|
|
542
|
-
let simbolo = expressao.esquerda.simbolo;
|
|
543
542
|
if (expressao.esquerda instanceof construtos_1.AcessoIndiceVariavel) {
|
|
544
|
-
|
|
545
|
-
|
|
543
|
+
const entidade = expressao.esquerda;
|
|
544
|
+
const simbolo = entidade.entidadeChamada.simbolo;
|
|
545
|
+
return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao, entidade.indice);
|
|
546
546
|
}
|
|
547
|
+
const simbolo = expressao.esquerda.simbolo;
|
|
547
548
|
return new construtos_1.Atribuir(this.hashArquivo, simbolo, expressao);
|
|
548
549
|
}
|
|
549
550
|
else if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.IGUAL)) {
|
|
@@ -553,11 +554,11 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
553
554
|
const simbolo = expressao.simbolo;
|
|
554
555
|
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
555
556
|
}
|
|
556
|
-
|
|
557
|
+
if (expressao instanceof construtos_1.AcessoMetodoOuPropriedade) {
|
|
557
558
|
const get = expressao;
|
|
558
559
|
return new construtos_1.DefinirValor(this.hashArquivo, igual.linha, get.objeto, get.simbolo, valor);
|
|
559
560
|
}
|
|
560
|
-
|
|
561
|
+
if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
561
562
|
return new construtos_1.AtribuicaoPorIndice(this.hashArquivo, expressao.linha, expressao.entidadeChamada, expressao.indice, valor);
|
|
562
563
|
}
|
|
563
564
|
this.erro(igual, 'Tarefa de atribuição inválida');
|
|
@@ -610,10 +611,13 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
610
611
|
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
|
|
611
612
|
}
|
|
612
613
|
declaracaoExpressao() {
|
|
614
|
+
// Se há decoradores a serem adicionados aqui, obtemo-los agora,
|
|
615
|
+
// para evitar que outros passos recursivos peguem-los antes.
|
|
616
|
+
const decoradores = Array.from(this.pilhaDecoradores);
|
|
617
|
+
this.pilhaDecoradores = [];
|
|
613
618
|
const expressao = this.expressao();
|
|
614
619
|
// Ponto-e-vírgula é opcional aqui.
|
|
615
620
|
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
616
|
-
const decoradores = Array.from(this.pilhaDecoradores);
|
|
617
621
|
return new declaracoes_1.Expressao(expressao, decoradores);
|
|
618
622
|
}
|
|
619
623
|
declaracaoComentarioMultilinha() {
|
|
@@ -4039,7 +4043,7 @@ exports.Atribuir = void 0;
|
|
|
4039
4043
|
class Atribuir {
|
|
4040
4044
|
constructor(hashArquivo, simbolo, valor,
|
|
4041
4045
|
// indice so é usado para variaveis de vetores
|
|
4042
|
-
// TODO: criar alguma validaçao para garantir que indice
|
|
4046
|
+
// TODO: criar alguma validaçao para garantir que `indice` só seja passado para variáveis de vetores
|
|
4043
4047
|
indice) {
|
|
4044
4048
|
this.linha = Number(simbolo.linha);
|
|
4045
4049
|
this.hashArquivo = hashArquivo;
|
|
@@ -24846,14 +24850,15 @@ class TradutorAssemblyScript {
|
|
|
24846
24850
|
resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
24847
24851
|
return resultado;
|
|
24848
24852
|
}
|
|
24853
|
+
// TODO: Eliminar o soft cast para `any`.
|
|
24849
24854
|
traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
|
|
24850
|
-
var _a
|
|
24855
|
+
var _a;
|
|
24851
24856
|
let resultado = '';
|
|
24852
24857
|
resultado += AtribuicaoPorIndice.objeto.simbolo.lexema + '[';
|
|
24853
24858
|
resultado +=
|
|
24854
24859
|
this.dicionarioConstrutos[AtribuicaoPorIndice.indice.constructor.name](AtribuicaoPorIndice.indice) + ']';
|
|
24855
24860
|
resultado += ' = ';
|
|
24856
|
-
if ((
|
|
24861
|
+
if ((_a = (AtribuicaoPorIndice === null || AtribuicaoPorIndice === void 0 ? void 0 : AtribuicaoPorIndice.valor).simbolo) === null || _a === void 0 ? void 0 : _a.lexema) {
|
|
24857
24862
|
resultado += `${AtribuicaoPorIndice.valor.simbolo.lexema}`;
|
|
24858
24863
|
}
|
|
24859
24864
|
else {
|
|
@@ -24991,7 +24996,6 @@ class TradutorJavaScript {
|
|
|
24991
24996
|
return '-';
|
|
24992
24997
|
}
|
|
24993
24998
|
}
|
|
24994
|
-
//TODO: @Samuel
|
|
24995
24999
|
traduzirFuncoesNativas(metodo) {
|
|
24996
25000
|
switch (metodo.toLowerCase()) {
|
|
24997
25001
|
case 'adicionar':
|
|
@@ -25021,6 +25025,8 @@ class TradutorJavaScript {
|
|
|
25021
25025
|
return 'toLowerCase';
|
|
25022
25026
|
case 'substituir':
|
|
25023
25027
|
return 'replace';
|
|
25028
|
+
case 'texto':
|
|
25029
|
+
return 'String';
|
|
25024
25030
|
default:
|
|
25025
25031
|
return metodo;
|
|
25026
25032
|
}
|
|
@@ -25047,22 +25053,6 @@ class TradutorJavaScript {
|
|
|
25047
25053
|
resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
25048
25054
|
return resultado;
|
|
25049
25055
|
}
|
|
25050
|
-
traduzirConstrutoDefinirValor(definirValor) {
|
|
25051
|
-
let resultado = '';
|
|
25052
|
-
if (definirValor.objeto instanceof construtos_1.Isto) {
|
|
25053
|
-
resultado = 'this.' + definirValor.nome.lexema + ' = ';
|
|
25054
|
-
}
|
|
25055
|
-
resultado += definirValor.valor.simbolo.lexema;
|
|
25056
|
-
return resultado;
|
|
25057
|
-
}
|
|
25058
|
-
traduzirConstrutoLiteral(literal) {
|
|
25059
|
-
if (typeof literal.valor === 'string')
|
|
25060
|
-
return `'${literal.valor}'`;
|
|
25061
|
-
return literal.valor;
|
|
25062
|
-
}
|
|
25063
|
-
traduzirConstrutoVariavel(variavel) {
|
|
25064
|
-
return variavel.simbolo.lexema;
|
|
25065
|
-
}
|
|
25066
25056
|
traduzirConstrutoChamada(chamada) {
|
|
25067
25057
|
let resultado = '';
|
|
25068
25058
|
const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
|
|
@@ -25103,6 +25093,22 @@ class TradutorJavaScript {
|
|
|
25103
25093
|
}
|
|
25104
25094
|
return resultado;
|
|
25105
25095
|
}
|
|
25096
|
+
traduzirConstrutoDefinirValor(definirValor) {
|
|
25097
|
+
let resultado = '';
|
|
25098
|
+
if (definirValor.objeto instanceof construtos_1.Isto) {
|
|
25099
|
+
resultado = 'this.' + definirValor.nome.lexema + ' = ';
|
|
25100
|
+
}
|
|
25101
|
+
resultado += definirValor.valor.simbolo.lexema;
|
|
25102
|
+
return resultado;
|
|
25103
|
+
}
|
|
25104
|
+
traduzirConstrutoLiteral(literal) {
|
|
25105
|
+
if (typeof literal.valor === 'string')
|
|
25106
|
+
return `'${literal.valor}'`;
|
|
25107
|
+
return literal.valor;
|
|
25108
|
+
}
|
|
25109
|
+
traduzirConstrutoVariavel(variavel) {
|
|
25110
|
+
return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
|
|
25111
|
+
}
|
|
25106
25112
|
logicaComumBlocoEscopo(declaracoes) {
|
|
25107
25113
|
let resultado = '{\n';
|
|
25108
25114
|
this.indentacao += 4;
|
|
@@ -25254,13 +25260,12 @@ class TradutorJavaScript {
|
|
|
25254
25260
|
let resultado = 'for (';
|
|
25255
25261
|
if (declaracaoPara.inicializador.constructor.name === 'Array') {
|
|
25256
25262
|
resultado +=
|
|
25257
|
-
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
|
|
25263
|
+
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
25258
25264
|
}
|
|
25259
25265
|
else {
|
|
25260
25266
|
resultado +=
|
|
25261
|
-
this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + ' ';
|
|
25267
|
+
this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador, false) + '; ';
|
|
25262
25268
|
}
|
|
25263
|
-
resultado += !resultado.includes(';') ? ';' : '';
|
|
25264
25269
|
resultado +=
|
|
25265
25270
|
this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
|
|
25266
25271
|
resultado +=
|
|
@@ -25351,10 +25356,10 @@ class TradutorJavaScript {
|
|
|
25351
25356
|
}
|
|
25352
25357
|
return resultado;
|
|
25353
25358
|
}
|
|
25354
|
-
traduzirDeclaracaoVar(declaracaoVar) {
|
|
25359
|
+
traduzirDeclaracaoVar(declaracaoVar, adicionarPontoEVirgula = true) {
|
|
25355
25360
|
let resultado = 'let ';
|
|
25356
25361
|
resultado += declaracaoVar.simbolo.lexema;
|
|
25357
|
-
if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
|
|
25362
|
+
if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador) && adicionarPontoEVirgula)
|
|
25358
25363
|
resultado += ';';
|
|
25359
25364
|
else {
|
|
25360
25365
|
resultado += ' = ';
|
|
@@ -25364,7 +25369,8 @@ class TradutorJavaScript {
|
|
|
25364
25369
|
else {
|
|
25365
25370
|
resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
|
|
25366
25371
|
}
|
|
25367
|
-
|
|
25372
|
+
if (adicionarPontoEVirgula)
|
|
25373
|
+
resultado += ';';
|
|
25368
25374
|
}
|
|
25369
25375
|
return resultado;
|
|
25370
25376
|
}
|
|
@@ -25393,6 +25399,7 @@ class TradutorJavaScript {
|
|
|
25393
25399
|
let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
|
|
25394
25400
|
return `${direita} ${operador} ${esquerda}`;
|
|
25395
25401
|
}
|
|
25402
|
+
// TODO: Eliminar o soft cast para `any`.
|
|
25396
25403
|
traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
|
|
25397
25404
|
var _a, _b;
|
|
25398
25405
|
let resultado = '';
|
|
@@ -25441,7 +25448,8 @@ class TradutorJavaScript {
|
|
|
25441
25448
|
return resultado;
|
|
25442
25449
|
}
|
|
25443
25450
|
traduzirDeclaracaoFalhar(falhar) {
|
|
25444
|
-
|
|
25451
|
+
const explicacao = this.dicionarioConstrutos[falhar.explicacao.constructor.name](falhar.explicacao);
|
|
25452
|
+
return `throw ${explicacao}`;
|
|
25445
25453
|
}
|
|
25446
25454
|
traduzirConstrutoUnario(unario) {
|
|
25447
25455
|
var _a, _b;
|
|
@@ -25543,8 +25551,10 @@ class TradutorPython {
|
|
|
25543
25551
|
constructor() {
|
|
25544
25552
|
this.indentacao = 0;
|
|
25545
25553
|
this.dicionarioConstrutos = {
|
|
25546
|
-
AcessoMetodoOuPropriedade: this.
|
|
25554
|
+
AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
|
|
25555
|
+
AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
|
|
25547
25556
|
Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
|
|
25557
|
+
AtribuicaoPorIndice: this.traduzirConstrutoAtribuicaoPorIndice.bind(this),
|
|
25548
25558
|
Atribuir: this.traduzirConstrutoAtribuir.bind(this),
|
|
25549
25559
|
Binario: this.traduzirConstrutoBinario.bind(this),
|
|
25550
25560
|
Chamada: this.traduzirConstrutoChamada.bind(this),
|
|
@@ -25552,6 +25562,7 @@ class TradutorPython {
|
|
|
25552
25562
|
DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
|
|
25553
25563
|
Literal: this.traduzirConstrutoLiteral.bind(this),
|
|
25554
25564
|
Logico: this.traduzirConstrutoLogico.bind(this),
|
|
25565
|
+
Unario: this.traduzirConstrutoUnario.bind(this),
|
|
25555
25566
|
Variavel: this.traduzirConstrutoVariavel.bind(this),
|
|
25556
25567
|
Vetor: this.traduzirConstrutoVetor.bind(this),
|
|
25557
25568
|
};
|
|
@@ -25561,10 +25572,12 @@ class TradutorPython {
|
|
|
25561
25572
|
Comentario: this.traduzirConstrutoComentario.bind(this),
|
|
25562
25573
|
Const: this.traduzirDeclaracaoConst.bind(this),
|
|
25563
25574
|
Continua: () => 'continue',
|
|
25575
|
+
Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
|
|
25564
25576
|
Escreva: this.traduzirDeclaracaoEscreva.bind(this),
|
|
25565
25577
|
Expressao: this.traduzirDeclaracaoExpressao.bind(this),
|
|
25566
25578
|
FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
|
|
25567
25579
|
Leia: this.traduzirDeclaracaoLeia.bind(this),
|
|
25580
|
+
Para: this.traduzirDeclaracaoPara.bind(this),
|
|
25568
25581
|
ParaCada: this.traduzirDeclaracaoParaCada.bind(this),
|
|
25569
25582
|
Retorna: this.traduzirDeclaracaoRetorna.bind(this),
|
|
25570
25583
|
Se: this.traduzirDeclaracaoSe.bind(this),
|
|
@@ -25573,9 +25586,6 @@ class TradutorPython {
|
|
|
25573
25586
|
Var: this.traduzirDeclaracaoVar.bind(this),
|
|
25574
25587
|
};
|
|
25575
25588
|
}
|
|
25576
|
-
traduzirNomeVariavel(variavel) {
|
|
25577
|
-
return variavel.replace(/\.?([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '');
|
|
25578
|
-
}
|
|
25579
25589
|
traduzirSimboloOperador(operador) {
|
|
25580
25590
|
switch (operador.tipo) {
|
|
25581
25591
|
case delegua_1.default.ADICAO:
|
|
@@ -25645,6 +25655,8 @@ class TradutorPython {
|
|
|
25645
25655
|
return 'lower';
|
|
25646
25656
|
case 'substituir':
|
|
25647
25657
|
return 'replace';
|
|
25658
|
+
case 'texto':
|
|
25659
|
+
return 'str';
|
|
25648
25660
|
default:
|
|
25649
25661
|
return metodo;
|
|
25650
25662
|
}
|
|
@@ -25669,7 +25681,12 @@ class TradutorPython {
|
|
|
25669
25681
|
resultado += ' '.repeat(this.indentacao) + '\n';
|
|
25670
25682
|
return resultado;
|
|
25671
25683
|
}
|
|
25672
|
-
|
|
25684
|
+
traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
|
|
25685
|
+
const entidade = this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
|
|
25686
|
+
const indice = this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice);
|
|
25687
|
+
return `${entidade}[${indice}]`;
|
|
25688
|
+
}
|
|
25689
|
+
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo) {
|
|
25673
25690
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
25674
25691
|
let objetoVariavel = acessoMetodo.objeto;
|
|
25675
25692
|
let funcaoTraduzida = this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema);
|
|
@@ -25686,6 +25703,12 @@ class TradutorPython {
|
|
|
25686
25703
|
traduzirConstrutoAgrupamento(agrupamento) {
|
|
25687
25704
|
return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
|
|
25688
25705
|
}
|
|
25706
|
+
traduzirConstrutoAtribuicaoPorIndice(atribuicaoPorIndice) {
|
|
25707
|
+
const objeto = this.dicionarioConstrutos[atribuicaoPorIndice.objeto.constructor.name](atribuicaoPorIndice.objeto);
|
|
25708
|
+
const indice = this.dicionarioConstrutos[atribuicaoPorIndice.indice.constructor.name](atribuicaoPorIndice.indice);
|
|
25709
|
+
const valor = this.dicionarioConstrutos[atribuicaoPorIndice.valor.constructor.name](atribuicaoPorIndice.valor);
|
|
25710
|
+
return `${objeto}[${indice}] = ${valor}`;
|
|
25711
|
+
}
|
|
25689
25712
|
traduzirConstrutoAtribuir(atribuir) {
|
|
25690
25713
|
let resultado = atribuir.simbolo.lexema;
|
|
25691
25714
|
resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
@@ -25759,18 +25782,31 @@ class TradutorPython {
|
|
|
25759
25782
|
if (typeof literal.valor === 'boolean') {
|
|
25760
25783
|
return literal.valor ? 'True' : 'False';
|
|
25761
25784
|
}
|
|
25785
|
+
if (typeof literal.valor === 'number') {
|
|
25786
|
+
return String(literal.valor);
|
|
25787
|
+
}
|
|
25762
25788
|
if (!literal.valor)
|
|
25763
25789
|
return 'None';
|
|
25764
25790
|
return literal.valor;
|
|
25765
25791
|
}
|
|
25766
25792
|
traduzirConstrutoLogico(logico) {
|
|
25767
|
-
|
|
25768
|
-
|
|
25769
|
-
|
|
25793
|
+
const direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
|
|
25794
|
+
const operador = this.traduzirSimboloOperador(logico.operador);
|
|
25795
|
+
const esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
|
|
25770
25796
|
return `${esquerda} ${operador} ${direita}`;
|
|
25771
25797
|
}
|
|
25798
|
+
traduzirConstrutoUnario(unario) {
|
|
25799
|
+
const operador = this.traduzirSimboloOperador(unario.operador);
|
|
25800
|
+
const operando = this.dicionarioConstrutos[unario.operando.constructor.name](unario.operando);
|
|
25801
|
+
switch (unario.incidenciaOperador) {
|
|
25802
|
+
case 'ANTES':
|
|
25803
|
+
return `${operador}${operando}`;
|
|
25804
|
+
case 'DEPOIS':
|
|
25805
|
+
return `${operando}${operador}`;
|
|
25806
|
+
}
|
|
25807
|
+
}
|
|
25772
25808
|
traduzirConstrutoVariavel(variavel) {
|
|
25773
|
-
return variavel.simbolo.lexema;
|
|
25809
|
+
return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
|
|
25774
25810
|
}
|
|
25775
25811
|
traduzirConstrutoVetor(vetor) {
|
|
25776
25812
|
if (!vetor.valores.length) {
|
|
@@ -25786,45 +25822,6 @@ class TradutorPython {
|
|
|
25786
25822
|
resultado += ']';
|
|
25787
25823
|
return resultado;
|
|
25788
25824
|
}
|
|
25789
|
-
traduzirDeclaracaoSe(declaracaoSe, iniciarComIf = true) {
|
|
25790
|
-
let resultado = '';
|
|
25791
|
-
if (iniciarComIf) {
|
|
25792
|
-
resultado += 'if ';
|
|
25793
|
-
}
|
|
25794
|
-
else {
|
|
25795
|
-
resultado += 'elif ';
|
|
25796
|
-
}
|
|
25797
|
-
const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
|
|
25798
|
-
resultado += condicao;
|
|
25799
|
-
resultado += ':\n';
|
|
25800
|
-
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
|
|
25801
|
-
if (declaracaoSe.caminhoSenao !== null) {
|
|
25802
|
-
resultado += ' '.repeat(this.indentacao);
|
|
25803
|
-
const se = declaracaoSe === null || declaracaoSe === void 0 ? void 0 : declaracaoSe.caminhoSenao;
|
|
25804
|
-
if (se === null || se === void 0 ? void 0 : se.caminhoEntao) {
|
|
25805
|
-
resultado += 'elif ';
|
|
25806
|
-
resultado += this.dicionarioConstrutos[se.condicao.constructor.name](se.condicao, false);
|
|
25807
|
-
resultado += ':\n';
|
|
25808
|
-
resultado += this.dicionarioDeclaracoes[se.caminhoEntao.constructor.name](se.caminhoEntao);
|
|
25809
|
-
resultado += ' '.repeat(this.indentacao);
|
|
25810
|
-
if (se === null || se === void 0 ? void 0 : se.caminhoSenao) {
|
|
25811
|
-
if (se.caminhoSenao instanceof declaracoes_1.Bloco) {
|
|
25812
|
-
resultado += 'else:\n';
|
|
25813
|
-
resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao, false);
|
|
25814
|
-
return resultado;
|
|
25815
|
-
}
|
|
25816
|
-
else {
|
|
25817
|
-
resultado += this.dicionarioDeclaracoes[se.caminhoSenao.constructor.name](se.caminhoSenao, false);
|
|
25818
|
-
return resultado;
|
|
25819
|
-
}
|
|
25820
|
-
}
|
|
25821
|
-
}
|
|
25822
|
-
resultado += 'else:\n';
|
|
25823
|
-
resultado += ' '.repeat(this.indentacao);
|
|
25824
|
-
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
|
|
25825
|
-
}
|
|
25826
|
-
return resultado;
|
|
25827
|
-
}
|
|
25828
25825
|
logicaTraducaoMetodoClasse(metodoClasse) {
|
|
25829
25826
|
this.indentacao += 4;
|
|
25830
25827
|
let resultado = ' '.repeat(this.indentacao);
|
|
@@ -25867,9 +25864,7 @@ class TradutorPython {
|
|
|
25867
25864
|
return resultado;
|
|
25868
25865
|
}
|
|
25869
25866
|
traduzirDeclaracaoConst(declaracaoConst) {
|
|
25870
|
-
let resultado = '';
|
|
25871
|
-
resultado += this.traduzirNomeVariavel(declaracaoConst.simbolo.lexema);
|
|
25872
|
-
resultado += ' = ';
|
|
25867
|
+
let resultado = declaracaoConst.simbolo.lexema + ' = ';
|
|
25873
25868
|
const inicializador = declaracaoConst.inicializador;
|
|
25874
25869
|
if (inicializador) {
|
|
25875
25870
|
if (this.dicionarioConstrutos[inicializador.constructor.name]) {
|
|
@@ -25884,6 +25879,13 @@ class TradutorPython {
|
|
|
25884
25879
|
}
|
|
25885
25880
|
return resultado;
|
|
25886
25881
|
}
|
|
25882
|
+
traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
|
|
25883
|
+
let resultado = ' '.repeat(this.indentacao) + 'while ';
|
|
25884
|
+
const condicao = this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao);
|
|
25885
|
+
resultado += condicao + ':\n';
|
|
25886
|
+
resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
|
|
25887
|
+
return resultado;
|
|
25888
|
+
}
|
|
25887
25889
|
traduzirDeclaracaoEscreva(declaracaoEscreva) {
|
|
25888
25890
|
let resultado = 'print(';
|
|
25889
25891
|
for (const argumento of declaracaoEscreva.argumentos) {
|
|
@@ -25906,7 +25908,7 @@ class TradutorPython {
|
|
|
25906
25908
|
if (declaracaoFuncao.funcao.parametros.length > 0) {
|
|
25907
25909
|
resultado = resultado.slice(0, -2);
|
|
25908
25910
|
}
|
|
25909
|
-
resultado += ')
|
|
25911
|
+
resultado += '):\n';
|
|
25910
25912
|
resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
|
|
25911
25913
|
return resultado;
|
|
25912
25914
|
}
|
|
@@ -25920,6 +25922,32 @@ class TradutorPython {
|
|
|
25920
25922
|
resultado += ')';
|
|
25921
25923
|
return resultado;
|
|
25922
25924
|
}
|
|
25925
|
+
/**
|
|
25926
|
+
* Como não existe declaração `para` com variáveis de controle em Python, o
|
|
25927
|
+
* que tentamos aqui é criar a mesma coisa usando `while()`.
|
|
25928
|
+
* @param declaracaoPara A declaração `Para`.
|
|
25929
|
+
* @returns Um bloco equivalente ao que seria um bloco `for` com variáveis de controle em Python.
|
|
25930
|
+
*/
|
|
25931
|
+
traduzirDeclaracaoPara(declaracaoPara) {
|
|
25932
|
+
let resultado = '';
|
|
25933
|
+
// Em uma declaração `Para` em Delégua, são obrigatórios a condição e o incremento.
|
|
25934
|
+
if (declaracaoPara.inicializador) {
|
|
25935
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
25936
|
+
for (const declaracaoInicializador of declaracaoPara.inicializador) {
|
|
25937
|
+
resultado += this.dicionarioDeclaracoes[declaracaoInicializador.constructor.name](declaracaoInicializador) + `\n`;
|
|
25938
|
+
}
|
|
25939
|
+
}
|
|
25940
|
+
else {
|
|
25941
|
+
resultado += this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + `\n`;
|
|
25942
|
+
}
|
|
25943
|
+
}
|
|
25944
|
+
const condicao = this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao);
|
|
25945
|
+
resultado += ' '.repeat(this.indentacao) + `while ${condicao}:\n`;
|
|
25946
|
+
// O incremento passa a ser a última instrução do bloco.
|
|
25947
|
+
declaracaoPara.corpo.declaracoes.push(new declaracoes_1.Expressao(declaracaoPara.incrementar));
|
|
25948
|
+
resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
|
|
25949
|
+
return resultado;
|
|
25950
|
+
}
|
|
25923
25951
|
traduzirDeclaracaoParaCada(declaracaoParaCada) {
|
|
25924
25952
|
let resultado = `for ${declaracaoParaCada.nomeVariavelIteracao} in `;
|
|
25925
25953
|
resultado +=
|
|
@@ -25932,6 +25960,42 @@ class TradutorPython {
|
|
|
25932
25960
|
const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
|
|
25933
25961
|
return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
|
|
25934
25962
|
}
|
|
25963
|
+
traduzirDeclaracaoSe(declaracaoSe, iniciarComIf = true) {
|
|
25964
|
+
let resultado = '';
|
|
25965
|
+
if (iniciarComIf) {
|
|
25966
|
+
resultado += 'if ';
|
|
25967
|
+
}
|
|
25968
|
+
else {
|
|
25969
|
+
resultado += 'elif ';
|
|
25970
|
+
}
|
|
25971
|
+
const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
|
|
25972
|
+
resultado += condicao;
|
|
25973
|
+
resultado += ':\n';
|
|
25974
|
+
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
|
|
25975
|
+
if (declaracaoSe.caminhoSenao) {
|
|
25976
|
+
resultado += ' '.repeat(this.indentacao);
|
|
25977
|
+
const senao = declaracaoSe.caminhoSenao;
|
|
25978
|
+
if (senao === null || senao === void 0 ? void 0 : senao.caminhoEntao) {
|
|
25979
|
+
resultado += 'elif ';
|
|
25980
|
+
resultado += this.dicionarioConstrutos[senao.condicao.constructor.name](senao.condicao, false);
|
|
25981
|
+
resultado += ':\n';
|
|
25982
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoEntao.constructor.name](senao.caminhoEntao);
|
|
25983
|
+
resultado += ' '.repeat(this.indentacao);
|
|
25984
|
+
if (senao === null || senao === void 0 ? void 0 : senao.caminhoSenao) {
|
|
25985
|
+
if (senao.caminhoSenao instanceof declaracoes_1.Bloco) {
|
|
25986
|
+
resultado += 'else:\n';
|
|
25987
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
|
|
25988
|
+
return resultado;
|
|
25989
|
+
}
|
|
25990
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
|
|
25991
|
+
return resultado;
|
|
25992
|
+
}
|
|
25993
|
+
}
|
|
25994
|
+
resultado += 'else:\n';
|
|
25995
|
+
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
|
|
25996
|
+
}
|
|
25997
|
+
return resultado;
|
|
25998
|
+
}
|
|
25935
25999
|
traduzirDeclaracaoTente(declaracaoTente) {
|
|
25936
26000
|
let resultado = 'try:\n';
|
|
25937
26001
|
this.indentacao += 4;
|
|
@@ -25965,9 +26029,7 @@ class TradutorPython {
|
|
|
25965
26029
|
return resultado;
|
|
25966
26030
|
}
|
|
25967
26031
|
traduzirDeclaracaoVar(declaracaoVar) {
|
|
25968
|
-
let resultado = '';
|
|
25969
|
-
resultado += this.traduzirNomeVariavel(declaracaoVar.simbolo.lexema);
|
|
25970
|
-
resultado += ' = ';
|
|
26032
|
+
let resultado = declaracaoVar.simbolo.lexema + ' = ';
|
|
25971
26033
|
const inicializador = declaracaoVar.inicializador;
|
|
25972
26034
|
if (inicializador) {
|
|
25973
26035
|
if (this.dicionarioConstrutos[inicializador.constructor.name]) {
|