@designliquido/delegua 0.37.0 → 0.37.1
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 +6 -5
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/bin/package.json +1 -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 +1 -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 +146 -87
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');
|
|
@@ -4039,7 +4040,7 @@ exports.Atribuir = void 0;
|
|
|
4039
4040
|
class Atribuir {
|
|
4040
4041
|
constructor(hashArquivo, simbolo, valor,
|
|
4041
4042
|
// indice so é usado para variaveis de vetores
|
|
4042
|
-
// TODO: criar alguma validaçao para garantir que indice
|
|
4043
|
+
// TODO: criar alguma validaçao para garantir que `indice` só seja passado para variáveis de vetores
|
|
4043
4044
|
indice) {
|
|
4044
4045
|
this.linha = Number(simbolo.linha);
|
|
4045
4046
|
this.hashArquivo = hashArquivo;
|
|
@@ -24846,14 +24847,15 @@ class TradutorAssemblyScript {
|
|
|
24846
24847
|
resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
24847
24848
|
return resultado;
|
|
24848
24849
|
}
|
|
24850
|
+
// TODO: Eliminar o soft cast para `any`.
|
|
24849
24851
|
traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
|
|
24850
|
-
var _a
|
|
24852
|
+
var _a;
|
|
24851
24853
|
let resultado = '';
|
|
24852
24854
|
resultado += AtribuicaoPorIndice.objeto.simbolo.lexema + '[';
|
|
24853
24855
|
resultado +=
|
|
24854
24856
|
this.dicionarioConstrutos[AtribuicaoPorIndice.indice.constructor.name](AtribuicaoPorIndice.indice) + ']';
|
|
24855
24857
|
resultado += ' = ';
|
|
24856
|
-
if ((
|
|
24858
|
+
if ((_a = (AtribuicaoPorIndice === null || AtribuicaoPorIndice === void 0 ? void 0 : AtribuicaoPorIndice.valor).simbolo) === null || _a === void 0 ? void 0 : _a.lexema) {
|
|
24857
24859
|
resultado += `${AtribuicaoPorIndice.valor.simbolo.lexema}`;
|
|
24858
24860
|
}
|
|
24859
24861
|
else {
|
|
@@ -24991,7 +24993,6 @@ class TradutorJavaScript {
|
|
|
24991
24993
|
return '-';
|
|
24992
24994
|
}
|
|
24993
24995
|
}
|
|
24994
|
-
//TODO: @Samuel
|
|
24995
24996
|
traduzirFuncoesNativas(metodo) {
|
|
24996
24997
|
switch (metodo.toLowerCase()) {
|
|
24997
24998
|
case 'adicionar':
|
|
@@ -25021,6 +25022,8 @@ class TradutorJavaScript {
|
|
|
25021
25022
|
return 'toLowerCase';
|
|
25022
25023
|
case 'substituir':
|
|
25023
25024
|
return 'replace';
|
|
25025
|
+
case 'texto':
|
|
25026
|
+
return 'String';
|
|
25024
25027
|
default:
|
|
25025
25028
|
return metodo;
|
|
25026
25029
|
}
|
|
@@ -25047,22 +25050,6 @@ class TradutorJavaScript {
|
|
|
25047
25050
|
resultado += this.dicionarioConstrutos[binario.direita.constructor.name](binario.direita);
|
|
25048
25051
|
return resultado;
|
|
25049
25052
|
}
|
|
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
25053
|
traduzirConstrutoChamada(chamada) {
|
|
25067
25054
|
let resultado = '';
|
|
25068
25055
|
const retorno = `${this.dicionarioConstrutos[chamada.entidadeChamada.constructor.name](chamada.entidadeChamada)}`;
|
|
@@ -25103,6 +25090,22 @@ class TradutorJavaScript {
|
|
|
25103
25090
|
}
|
|
25104
25091
|
return resultado;
|
|
25105
25092
|
}
|
|
25093
|
+
traduzirConstrutoDefinirValor(definirValor) {
|
|
25094
|
+
let resultado = '';
|
|
25095
|
+
if (definirValor.objeto instanceof construtos_1.Isto) {
|
|
25096
|
+
resultado = 'this.' + definirValor.nome.lexema + ' = ';
|
|
25097
|
+
}
|
|
25098
|
+
resultado += definirValor.valor.simbolo.lexema;
|
|
25099
|
+
return resultado;
|
|
25100
|
+
}
|
|
25101
|
+
traduzirConstrutoLiteral(literal) {
|
|
25102
|
+
if (typeof literal.valor === 'string')
|
|
25103
|
+
return `'${literal.valor}'`;
|
|
25104
|
+
return literal.valor;
|
|
25105
|
+
}
|
|
25106
|
+
traduzirConstrutoVariavel(variavel) {
|
|
25107
|
+
return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
|
|
25108
|
+
}
|
|
25106
25109
|
logicaComumBlocoEscopo(declaracoes) {
|
|
25107
25110
|
let resultado = '{\n';
|
|
25108
25111
|
this.indentacao += 4;
|
|
@@ -25254,13 +25257,12 @@ class TradutorJavaScript {
|
|
|
25254
25257
|
let resultado = 'for (';
|
|
25255
25258
|
if (declaracaoPara.inicializador.constructor.name === 'Array') {
|
|
25256
25259
|
resultado +=
|
|
25257
|
-
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0]) + ' ';
|
|
25260
|
+
this.dicionarioDeclaracoes[declaracaoPara.inicializador[0].constructor.name](declaracaoPara.inicializador[0], false) + '; ';
|
|
25258
25261
|
}
|
|
25259
25262
|
else {
|
|
25260
25263
|
resultado +=
|
|
25261
|
-
this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + ' ';
|
|
25264
|
+
this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador, false) + '; ';
|
|
25262
25265
|
}
|
|
25263
|
-
resultado += !resultado.includes(';') ? ';' : '';
|
|
25264
25266
|
resultado +=
|
|
25265
25267
|
this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao) + '; ';
|
|
25266
25268
|
resultado +=
|
|
@@ -25351,10 +25353,10 @@ class TradutorJavaScript {
|
|
|
25351
25353
|
}
|
|
25352
25354
|
return resultado;
|
|
25353
25355
|
}
|
|
25354
|
-
traduzirDeclaracaoVar(declaracaoVar) {
|
|
25356
|
+
traduzirDeclaracaoVar(declaracaoVar, adicionarPontoEVirgula = true) {
|
|
25355
25357
|
let resultado = 'let ';
|
|
25356
25358
|
resultado += declaracaoVar.simbolo.lexema;
|
|
25357
|
-
if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador))
|
|
25359
|
+
if (!(declaracaoVar === null || declaracaoVar === void 0 ? void 0 : declaracaoVar.inicializador) && adicionarPontoEVirgula)
|
|
25358
25360
|
resultado += ';';
|
|
25359
25361
|
else {
|
|
25360
25362
|
resultado += ' = ';
|
|
@@ -25364,7 +25366,8 @@ class TradutorJavaScript {
|
|
|
25364
25366
|
else {
|
|
25365
25367
|
resultado += this.dicionarioDeclaracoes[declaracaoVar.inicializador.constructor.name](declaracaoVar.inicializador);
|
|
25366
25368
|
}
|
|
25367
|
-
|
|
25369
|
+
if (adicionarPontoEVirgula)
|
|
25370
|
+
resultado += ';';
|
|
25368
25371
|
}
|
|
25369
25372
|
return resultado;
|
|
25370
25373
|
}
|
|
@@ -25393,6 +25396,7 @@ class TradutorJavaScript {
|
|
|
25393
25396
|
let esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
|
|
25394
25397
|
return `${direita} ${operador} ${esquerda}`;
|
|
25395
25398
|
}
|
|
25399
|
+
// TODO: Eliminar o soft cast para `any`.
|
|
25396
25400
|
traduzirConstrutoAtribuicaoPorIndice(AtribuicaoPorIndice) {
|
|
25397
25401
|
var _a, _b;
|
|
25398
25402
|
let resultado = '';
|
|
@@ -25441,7 +25445,8 @@ class TradutorJavaScript {
|
|
|
25441
25445
|
return resultado;
|
|
25442
25446
|
}
|
|
25443
25447
|
traduzirDeclaracaoFalhar(falhar) {
|
|
25444
|
-
|
|
25448
|
+
const explicacao = this.dicionarioConstrutos[falhar.explicacao.constructor.name](falhar.explicacao);
|
|
25449
|
+
return `throw ${explicacao}`;
|
|
25445
25450
|
}
|
|
25446
25451
|
traduzirConstrutoUnario(unario) {
|
|
25447
25452
|
var _a, _b;
|
|
@@ -25543,8 +25548,10 @@ class TradutorPython {
|
|
|
25543
25548
|
constructor() {
|
|
25544
25549
|
this.indentacao = 0;
|
|
25545
25550
|
this.dicionarioConstrutos = {
|
|
25546
|
-
AcessoMetodoOuPropriedade: this.
|
|
25551
|
+
AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
|
|
25552
|
+
AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
|
|
25547
25553
|
Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
|
|
25554
|
+
AtribuicaoPorIndice: this.traduzirConstrutoAtribuicaoPorIndice.bind(this),
|
|
25548
25555
|
Atribuir: this.traduzirConstrutoAtribuir.bind(this),
|
|
25549
25556
|
Binario: this.traduzirConstrutoBinario.bind(this),
|
|
25550
25557
|
Chamada: this.traduzirConstrutoChamada.bind(this),
|
|
@@ -25552,6 +25559,7 @@ class TradutorPython {
|
|
|
25552
25559
|
DefinirValor: this.traduzirConstrutoDefinirValor.bind(this),
|
|
25553
25560
|
Literal: this.traduzirConstrutoLiteral.bind(this),
|
|
25554
25561
|
Logico: this.traduzirConstrutoLogico.bind(this),
|
|
25562
|
+
Unario: this.traduzirConstrutoUnario.bind(this),
|
|
25555
25563
|
Variavel: this.traduzirConstrutoVariavel.bind(this),
|
|
25556
25564
|
Vetor: this.traduzirConstrutoVetor.bind(this),
|
|
25557
25565
|
};
|
|
@@ -25561,10 +25569,12 @@ class TradutorPython {
|
|
|
25561
25569
|
Comentario: this.traduzirConstrutoComentario.bind(this),
|
|
25562
25570
|
Const: this.traduzirDeclaracaoConst.bind(this),
|
|
25563
25571
|
Continua: () => 'continue',
|
|
25572
|
+
Enquanto: this.traduzirDeclaracaoEnquanto.bind(this),
|
|
25564
25573
|
Escreva: this.traduzirDeclaracaoEscreva.bind(this),
|
|
25565
25574
|
Expressao: this.traduzirDeclaracaoExpressao.bind(this),
|
|
25566
25575
|
FuncaoDeclaracao: this.traduzirDeclaracaoFuncao.bind(this),
|
|
25567
25576
|
Leia: this.traduzirDeclaracaoLeia.bind(this),
|
|
25577
|
+
Para: this.traduzirDeclaracaoPara.bind(this),
|
|
25568
25578
|
ParaCada: this.traduzirDeclaracaoParaCada.bind(this),
|
|
25569
25579
|
Retorna: this.traduzirDeclaracaoRetorna.bind(this),
|
|
25570
25580
|
Se: this.traduzirDeclaracaoSe.bind(this),
|
|
@@ -25573,9 +25583,6 @@ class TradutorPython {
|
|
|
25573
25583
|
Var: this.traduzirDeclaracaoVar.bind(this),
|
|
25574
25584
|
};
|
|
25575
25585
|
}
|
|
25576
|
-
traduzirNomeVariavel(variavel) {
|
|
25577
|
-
return variavel.replace(/\.?([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '');
|
|
25578
|
-
}
|
|
25579
25586
|
traduzirSimboloOperador(operador) {
|
|
25580
25587
|
switch (operador.tipo) {
|
|
25581
25588
|
case delegua_1.default.ADICAO:
|
|
@@ -25645,6 +25652,8 @@ class TradutorPython {
|
|
|
25645
25652
|
return 'lower';
|
|
25646
25653
|
case 'substituir':
|
|
25647
25654
|
return 'replace';
|
|
25655
|
+
case 'texto':
|
|
25656
|
+
return 'str';
|
|
25648
25657
|
default:
|
|
25649
25658
|
return metodo;
|
|
25650
25659
|
}
|
|
@@ -25669,7 +25678,12 @@ class TradutorPython {
|
|
|
25669
25678
|
resultado += ' '.repeat(this.indentacao) + '\n';
|
|
25670
25679
|
return resultado;
|
|
25671
25680
|
}
|
|
25672
|
-
|
|
25681
|
+
traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
|
|
25682
|
+
const entidade = this.dicionarioConstrutos[acessoIndiceVariavel.entidadeChamada.constructor.name](acessoIndiceVariavel.entidadeChamada);
|
|
25683
|
+
const indice = this.dicionarioConstrutos[acessoIndiceVariavel.indice.constructor.name](acessoIndiceVariavel.indice);
|
|
25684
|
+
return `${entidade}[${indice}]`;
|
|
25685
|
+
}
|
|
25686
|
+
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodo) {
|
|
25673
25687
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
25674
25688
|
let objetoVariavel = acessoMetodo.objeto;
|
|
25675
25689
|
let funcaoTraduzida = this.traduzirFuncoesNativas(acessoMetodo.simbolo.lexema);
|
|
@@ -25686,6 +25700,12 @@ class TradutorPython {
|
|
|
25686
25700
|
traduzirConstrutoAgrupamento(agrupamento) {
|
|
25687
25701
|
return this.dicionarioConstrutos[agrupamento.constructor.name](agrupamento.expressao || agrupamento);
|
|
25688
25702
|
}
|
|
25703
|
+
traduzirConstrutoAtribuicaoPorIndice(atribuicaoPorIndice) {
|
|
25704
|
+
const objeto = this.dicionarioConstrutos[atribuicaoPorIndice.objeto.constructor.name](atribuicaoPorIndice.objeto);
|
|
25705
|
+
const indice = this.dicionarioConstrutos[atribuicaoPorIndice.indice.constructor.name](atribuicaoPorIndice.indice);
|
|
25706
|
+
const valor = this.dicionarioConstrutos[atribuicaoPorIndice.valor.constructor.name](atribuicaoPorIndice.valor);
|
|
25707
|
+
return `${objeto}[${indice}] = ${valor}`;
|
|
25708
|
+
}
|
|
25689
25709
|
traduzirConstrutoAtribuir(atribuir) {
|
|
25690
25710
|
let resultado = atribuir.simbolo.lexema;
|
|
25691
25711
|
resultado += ' = ' + this.dicionarioConstrutos[atribuir.valor.constructor.name](atribuir.valor);
|
|
@@ -25759,18 +25779,31 @@ class TradutorPython {
|
|
|
25759
25779
|
if (typeof literal.valor === 'boolean') {
|
|
25760
25780
|
return literal.valor ? 'True' : 'False';
|
|
25761
25781
|
}
|
|
25782
|
+
if (typeof literal.valor === 'number') {
|
|
25783
|
+
return String(literal.valor);
|
|
25784
|
+
}
|
|
25762
25785
|
if (!literal.valor)
|
|
25763
25786
|
return 'None';
|
|
25764
25787
|
return literal.valor;
|
|
25765
25788
|
}
|
|
25766
25789
|
traduzirConstrutoLogico(logico) {
|
|
25767
|
-
|
|
25768
|
-
|
|
25769
|
-
|
|
25790
|
+
const direita = this.dicionarioConstrutos[logico.direita.constructor.name](logico.direita);
|
|
25791
|
+
const operador = this.traduzirSimboloOperador(logico.operador);
|
|
25792
|
+
const esquerda = this.dicionarioConstrutos[logico.esquerda.constructor.name](logico.esquerda);
|
|
25770
25793
|
return `${esquerda} ${operador} ${direita}`;
|
|
25771
25794
|
}
|
|
25795
|
+
traduzirConstrutoUnario(unario) {
|
|
25796
|
+
const operador = this.traduzirSimboloOperador(unario.operador);
|
|
25797
|
+
const operando = this.dicionarioConstrutos[unario.operando.constructor.name](unario.operando);
|
|
25798
|
+
switch (unario.incidenciaOperador) {
|
|
25799
|
+
case 'ANTES':
|
|
25800
|
+
return `${operador}${operando}`;
|
|
25801
|
+
case 'DEPOIS':
|
|
25802
|
+
return `${operando}${operador}`;
|
|
25803
|
+
}
|
|
25804
|
+
}
|
|
25772
25805
|
traduzirConstrutoVariavel(variavel) {
|
|
25773
|
-
return variavel.simbolo.lexema;
|
|
25806
|
+
return this.traduzirFuncoesNativas(variavel.simbolo.lexema);
|
|
25774
25807
|
}
|
|
25775
25808
|
traduzirConstrutoVetor(vetor) {
|
|
25776
25809
|
if (!vetor.valores.length) {
|
|
@@ -25786,45 +25819,6 @@ class TradutorPython {
|
|
|
25786
25819
|
resultado += ']';
|
|
25787
25820
|
return resultado;
|
|
25788
25821
|
}
|
|
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
25822
|
logicaTraducaoMetodoClasse(metodoClasse) {
|
|
25829
25823
|
this.indentacao += 4;
|
|
25830
25824
|
let resultado = ' '.repeat(this.indentacao);
|
|
@@ -25867,9 +25861,7 @@ class TradutorPython {
|
|
|
25867
25861
|
return resultado;
|
|
25868
25862
|
}
|
|
25869
25863
|
traduzirDeclaracaoConst(declaracaoConst) {
|
|
25870
|
-
let resultado = '';
|
|
25871
|
-
resultado += this.traduzirNomeVariavel(declaracaoConst.simbolo.lexema);
|
|
25872
|
-
resultado += ' = ';
|
|
25864
|
+
let resultado = declaracaoConst.simbolo.lexema + ' = ';
|
|
25873
25865
|
const inicializador = declaracaoConst.inicializador;
|
|
25874
25866
|
if (inicializador) {
|
|
25875
25867
|
if (this.dicionarioConstrutos[inicializador.constructor.name]) {
|
|
@@ -25884,6 +25876,13 @@ class TradutorPython {
|
|
|
25884
25876
|
}
|
|
25885
25877
|
return resultado;
|
|
25886
25878
|
}
|
|
25879
|
+
traduzirDeclaracaoEnquanto(declaracaoEnquanto) {
|
|
25880
|
+
let resultado = ' '.repeat(this.indentacao) + 'while ';
|
|
25881
|
+
const condicao = this.dicionarioConstrutos[declaracaoEnquanto.condicao.constructor.name](declaracaoEnquanto.condicao);
|
|
25882
|
+
resultado += condicao + ':\n';
|
|
25883
|
+
resultado += this.dicionarioDeclaracoes[declaracaoEnquanto.corpo.constructor.name](declaracaoEnquanto.corpo);
|
|
25884
|
+
return resultado;
|
|
25885
|
+
}
|
|
25887
25886
|
traduzirDeclaracaoEscreva(declaracaoEscreva) {
|
|
25888
25887
|
let resultado = 'print(';
|
|
25889
25888
|
for (const argumento of declaracaoEscreva.argumentos) {
|
|
@@ -25906,7 +25905,7 @@ class TradutorPython {
|
|
|
25906
25905
|
if (declaracaoFuncao.funcao.parametros.length > 0) {
|
|
25907
25906
|
resultado = resultado.slice(0, -2);
|
|
25908
25907
|
}
|
|
25909
|
-
resultado += ')
|
|
25908
|
+
resultado += '):\n';
|
|
25910
25909
|
resultado += this.logicaComumBlocoEscopo(declaracaoFuncao.funcao.corpo);
|
|
25911
25910
|
return resultado;
|
|
25912
25911
|
}
|
|
@@ -25920,6 +25919,32 @@ class TradutorPython {
|
|
|
25920
25919
|
resultado += ')';
|
|
25921
25920
|
return resultado;
|
|
25922
25921
|
}
|
|
25922
|
+
/**
|
|
25923
|
+
* Como não existe declaração `para` com variáveis de controle em Python, o
|
|
25924
|
+
* que tentamos aqui é criar a mesma coisa usando `while()`.
|
|
25925
|
+
* @param declaracaoPara A declaração `Para`.
|
|
25926
|
+
* @returns Um bloco equivalente ao que seria um bloco `for` com variáveis de controle em Python.
|
|
25927
|
+
*/
|
|
25928
|
+
traduzirDeclaracaoPara(declaracaoPara) {
|
|
25929
|
+
let resultado = '';
|
|
25930
|
+
// Em uma declaração `Para` em Delégua, são obrigatórios a condição e o incremento.
|
|
25931
|
+
if (declaracaoPara.inicializador) {
|
|
25932
|
+
if (Array.isArray(declaracaoPara.inicializador)) {
|
|
25933
|
+
for (const declaracaoInicializador of declaracaoPara.inicializador) {
|
|
25934
|
+
resultado += this.dicionarioDeclaracoes[declaracaoInicializador.constructor.name](declaracaoInicializador) + `\n`;
|
|
25935
|
+
}
|
|
25936
|
+
}
|
|
25937
|
+
else {
|
|
25938
|
+
resultado += this.dicionarioDeclaracoes[declaracaoPara.inicializador.constructor.name](declaracaoPara.inicializador) + `\n`;
|
|
25939
|
+
}
|
|
25940
|
+
}
|
|
25941
|
+
const condicao = this.dicionarioConstrutos[declaracaoPara.condicao.constructor.name](declaracaoPara.condicao);
|
|
25942
|
+
resultado += ' '.repeat(this.indentacao) + `while ${condicao}:\n`;
|
|
25943
|
+
// O incremento passa a ser a última instrução do bloco.
|
|
25944
|
+
declaracaoPara.corpo.declaracoes.push(new declaracoes_1.Expressao(declaracaoPara.incrementar));
|
|
25945
|
+
resultado += this.dicionarioDeclaracoes[declaracaoPara.corpo.constructor.name](declaracaoPara.corpo);
|
|
25946
|
+
return resultado;
|
|
25947
|
+
}
|
|
25923
25948
|
traduzirDeclaracaoParaCada(declaracaoParaCada) {
|
|
25924
25949
|
let resultado = `for ${declaracaoParaCada.nomeVariavelIteracao} in `;
|
|
25925
25950
|
resultado +=
|
|
@@ -25932,6 +25957,42 @@ class TradutorPython {
|
|
|
25932
25957
|
const nomeConstrutor = declaracaoRetorna.valor.constructor.name;
|
|
25933
25958
|
return (resultado += this.dicionarioConstrutos[nomeConstrutor](declaracaoRetorna === null || declaracaoRetorna === void 0 ? void 0 : declaracaoRetorna.valor));
|
|
25934
25959
|
}
|
|
25960
|
+
traduzirDeclaracaoSe(declaracaoSe, iniciarComIf = true) {
|
|
25961
|
+
let resultado = '';
|
|
25962
|
+
if (iniciarComIf) {
|
|
25963
|
+
resultado += 'if ';
|
|
25964
|
+
}
|
|
25965
|
+
else {
|
|
25966
|
+
resultado += 'elif ';
|
|
25967
|
+
}
|
|
25968
|
+
const condicao = this.dicionarioConstrutos[declaracaoSe.condicao.constructor.name](declaracaoSe.condicao);
|
|
25969
|
+
resultado += condicao;
|
|
25970
|
+
resultado += ':\n';
|
|
25971
|
+
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoEntao.constructor.name](declaracaoSe.caminhoEntao);
|
|
25972
|
+
if (declaracaoSe.caminhoSenao) {
|
|
25973
|
+
resultado += ' '.repeat(this.indentacao);
|
|
25974
|
+
const senao = declaracaoSe.caminhoSenao;
|
|
25975
|
+
if (senao === null || senao === void 0 ? void 0 : senao.caminhoEntao) {
|
|
25976
|
+
resultado += 'elif ';
|
|
25977
|
+
resultado += this.dicionarioConstrutos[senao.condicao.constructor.name](senao.condicao, false);
|
|
25978
|
+
resultado += ':\n';
|
|
25979
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoEntao.constructor.name](senao.caminhoEntao);
|
|
25980
|
+
resultado += ' '.repeat(this.indentacao);
|
|
25981
|
+
if (senao === null || senao === void 0 ? void 0 : senao.caminhoSenao) {
|
|
25982
|
+
if (senao.caminhoSenao instanceof declaracoes_1.Bloco) {
|
|
25983
|
+
resultado += 'else:\n';
|
|
25984
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
|
|
25985
|
+
return resultado;
|
|
25986
|
+
}
|
|
25987
|
+
resultado += this.dicionarioDeclaracoes[senao.caminhoSenao.constructor.name](senao.caminhoSenao, false);
|
|
25988
|
+
return resultado;
|
|
25989
|
+
}
|
|
25990
|
+
}
|
|
25991
|
+
resultado += 'else:\n';
|
|
25992
|
+
resultado += this.dicionarioDeclaracoes[declaracaoSe.caminhoSenao.constructor.name](declaracaoSe.caminhoSenao);
|
|
25993
|
+
}
|
|
25994
|
+
return resultado;
|
|
25995
|
+
}
|
|
25935
25996
|
traduzirDeclaracaoTente(declaracaoTente) {
|
|
25936
25997
|
let resultado = 'try:\n';
|
|
25937
25998
|
this.indentacao += 4;
|
|
@@ -25965,9 +26026,7 @@ class TradutorPython {
|
|
|
25965
26026
|
return resultado;
|
|
25966
26027
|
}
|
|
25967
26028
|
traduzirDeclaracaoVar(declaracaoVar) {
|
|
25968
|
-
let resultado = '';
|
|
25969
|
-
resultado += this.traduzirNomeVariavel(declaracaoVar.simbolo.lexema);
|
|
25970
|
-
resultado += ' = ';
|
|
26029
|
+
let resultado = declaracaoVar.simbolo.lexema + ' = ';
|
|
25971
26030
|
const inicializador = declaracaoVar.inicializador;
|
|
25972
26031
|
if (inicializador) {
|
|
25973
26032
|
if (this.dicionarioConstrutos[inicializador.constructor.name]) {
|