@designliquido/delegua 1.18.0 → 1.18.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/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +43 -6
- 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 +38 -12
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +19 -2
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +8 -8
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +19 -19
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bin/package.json +2 -2
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -2
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +78 -158
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +1 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +9 -0
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/package.json +2 -2
- package/tradutores/tradutor-assembly-risc-v.d.ts +3 -2
- package/tradutores/tradutor-assembly-risc-v.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-risc-v.js +18 -5
- package/tradutores/tradutor-assembly-risc-v.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.d.ts +3 -2
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +13 -4
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/umd/delegua.js +102 -26
package/umd/delegua.js
CHANGED
|
@@ -822,6 +822,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
822
822
|
visitarDeclaracaoEscolha(declaracao) {
|
|
823
823
|
const identificadorOuLiteral = declaracao.identificadorOuLiteral;
|
|
824
824
|
const tipo = identificadorOuLiteral.tipo || 'qualquer';
|
|
825
|
+
const tiposLiteraisCasos = [];
|
|
825
826
|
for (let caminho of declaracao.caminhos) {
|
|
826
827
|
for (let condicao of caminho.condicoes) {
|
|
827
828
|
switch (condicao.constructor) {
|
|
@@ -830,7 +831,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
830
831
|
const tiposNumericos = ['inteiro', 'número', 'real'];
|
|
831
832
|
const ambosSaoNumericos = tiposNumericos.includes(condicaoLiteral.tipo) &&
|
|
832
833
|
tiposNumericos.includes(tipo);
|
|
833
|
-
if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos) {
|
|
834
|
+
if (condicaoLiteral.tipo !== tipo && !ambosSaoNumericos && tipo !== 'qualquer') {
|
|
834
835
|
this.erro({
|
|
835
836
|
lexema: condicaoLiteral.valor,
|
|
836
837
|
tipo: condicaoLiteral.tipo,
|
|
@@ -838,6 +839,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
838
839
|
hashArquivo: condicaoLiteral.hashArquivo,
|
|
839
840
|
}, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
|
|
840
841
|
}
|
|
842
|
+
tiposLiteraisCasos.push(condicaoLiteral.tipo);
|
|
841
843
|
break;
|
|
842
844
|
case construtos_1.Variavel:
|
|
843
845
|
const condicaoVariavel = condicao;
|
|
@@ -850,6 +852,23 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
850
852
|
}
|
|
851
853
|
}
|
|
852
854
|
}
|
|
855
|
+
if (tipo === 'qualquer' && tiposLiteraisCasos.length > 0 && identificadorOuLiteral instanceof construtos_1.Variavel) {
|
|
856
|
+
const tiposUnicos = [...new Set(tiposLiteraisCasos)];
|
|
857
|
+
if (tiposUnicos.length === 1) {
|
|
858
|
+
const tipoInferido = tiposUnicos[0];
|
|
859
|
+
const variavelEscopo = this.gerenciadorEscopos.buscar(identificadorOuLiteral.simbolo.lexema);
|
|
860
|
+
if (variavelEscopo) {
|
|
861
|
+
this.sugestao(identificadorOuLiteral.simbolo, `Um tipo melhor pode ser inferido para '${identificadorOuLiteral.simbolo.lexema}': '${tipoInferido}'`, [{
|
|
862
|
+
titulo: `Alterar tipo de '${identificadorOuLiteral.simbolo.lexema}' para '${tipoInferido}'`,
|
|
863
|
+
textoOriginal: 'qualquer',
|
|
864
|
+
textoSubstituto: tipoInferido,
|
|
865
|
+
linha: variavelEscopo.linha,
|
|
866
|
+
colunaInicio: 0,
|
|
867
|
+
colunaFim: 0,
|
|
868
|
+
}]);
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
}
|
|
853
872
|
return Promise.resolve();
|
|
854
873
|
}
|
|
855
874
|
async visitarDeclaracaoEnquanto(declaracao) {
|
|
@@ -1194,9 +1213,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1194
1213
|
];
|
|
1195
1214
|
// Classes/construtores geralmente começam com letra maiúscula
|
|
1196
1215
|
const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
|
|
1216
|
+
if (pareceSerClasse) {
|
|
1217
|
+
this.gerenciadorEscopos.marcarComoUsada(nomeFuncao);
|
|
1218
|
+
break;
|
|
1219
|
+
}
|
|
1197
1220
|
// Só verifica se a função existe se não for embutidas e não parecer ser classe
|
|
1198
1221
|
if (!funcoesEmbutidas.includes(nomeFuncao) &&
|
|
1199
|
-
!pareceSerClasse &&
|
|
1200
1222
|
!this.funcoes[nomeFuncao] &&
|
|
1201
1223
|
!this.gerenciadorEscopos.buscar(nomeFuncao)) {
|
|
1202
1224
|
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
|
|
@@ -1274,7 +1296,7 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1274
1296
|
this.erro(argumento.simbolo, `Variável ou função '${argumento.simbolo.lexema}' não existe.`);
|
|
1275
1297
|
continue;
|
|
1276
1298
|
}
|
|
1277
|
-
if (possivelVariavel && possivelVariavel.
|
|
1299
|
+
if (possivelVariavel && !possivelVariavel.inicializada) {
|
|
1278
1300
|
this.aviso(argumento.simbolo, `Variável '${argumento.simbolo.lexema}' não foi inicializada.`);
|
|
1279
1301
|
}
|
|
1280
1302
|
}
|
|
@@ -1508,6 +1530,9 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1508
1530
|
this.gerenciadorEscopos.marcarComoUsada(tipoBase);
|
|
1509
1531
|
}
|
|
1510
1532
|
for (const metodo of declaracao.metodos) {
|
|
1533
|
+
const tipoRetorno = metodo.funcao.tipo?.replace('[]', '');
|
|
1534
|
+
if (tipoRetorno)
|
|
1535
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoRetorno);
|
|
1511
1536
|
for (const parametro of metodo.funcao.parametros) {
|
|
1512
1537
|
const tipoBase = parametro.tipoDado?.replace('[]', '');
|
|
1513
1538
|
if (tipoBase)
|
|
@@ -1523,6 +1548,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1523
1548
|
for (const metodo of declaracao.metodos) {
|
|
1524
1549
|
if (metodo.abstrato)
|
|
1525
1550
|
continue;
|
|
1551
|
+
const tipoRetornoMetodo = metodo.funcao.tipo;
|
|
1552
|
+
if (tipoRetornoMetodo &&
|
|
1553
|
+
!['vazio', 'qualquer'].includes(tipoRetornoMetodo) &&
|
|
1554
|
+
metodo.funcao.corpo.length === 0) {
|
|
1555
|
+
this.aviso(metodo.simbolo, `Método especifica tipo de retorno '${tipoRetornoMetodo}', mas não há qualquer retorno correspondente no corpo do método.`);
|
|
1556
|
+
}
|
|
1526
1557
|
for (const stmt of metodo.funcao.corpo) {
|
|
1527
1558
|
await stmt.aceitar(this);
|
|
1528
1559
|
}
|
|
@@ -1539,10 +1570,16 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1539
1570
|
}
|
|
1540
1571
|
let tipoRetornoFuncao = declaracao.funcao.tipo;
|
|
1541
1572
|
if (tipoRetornoFuncao) {
|
|
1573
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoRetornoFuncao);
|
|
1542
1574
|
if (!['vazio', 'qualquer'].includes(tipoRetornoFuncao)) {
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1575
|
+
if (declaracao.funcao.corpo.length === 0) {
|
|
1576
|
+
this.aviso(declaracao.simbolo, `Método especifica tipo de retorno '${tipoRetornoFuncao}', mas não há qualquer retorno correspondente no corpo do método.`);
|
|
1577
|
+
}
|
|
1578
|
+
else {
|
|
1579
|
+
const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
|
|
1580
|
+
if (!todosOsCaminhosRetornam) {
|
|
1581
|
+
this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
|
|
1582
|
+
}
|
|
1546
1583
|
}
|
|
1547
1584
|
}
|
|
1548
1585
|
let retornos = [];
|
|
@@ -3805,9 +3842,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3805
3842
|
// Isso ocorre quando a importação é feita de uma biblioteca Node.js.
|
|
3806
3843
|
// Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
|
|
3807
3844
|
if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
3808
|
-
const
|
|
3845
|
+
const tipoObjeto = entidadeChamada.objeto.tipo;
|
|
3846
|
+
// Classe definida em código (local ou importada de arquivo .delegua) tem precedência.
|
|
3847
|
+
if (tipoObjeto in this.tiposDefinidosEmCodigo) {
|
|
3848
|
+
const classeDefinida = this.tiposDefinidosEmCodigo[tipoObjeto];
|
|
3849
|
+
if (classeDefinida instanceof declaracoes_1.Classe) {
|
|
3850
|
+
const nomeMembro = entidadeChamada.simbolo.lexema;
|
|
3851
|
+
const metodo = classeDefinida.metodos?.find(m => m.simbolo.lexema === nomeMembro);
|
|
3852
|
+
if (metodo) {
|
|
3853
|
+
return metodo.tipo || 'qualquer';
|
|
3854
|
+
}
|
|
3855
|
+
const propriedade = classeDefinida.propriedades?.find(p => p.nome.lexema === nomeMembro);
|
|
3856
|
+
if (propriedade) {
|
|
3857
|
+
return propriedade.tipo || 'qualquer';
|
|
3858
|
+
}
|
|
3859
|
+
return 'qualquer';
|
|
3860
|
+
}
|
|
3861
|
+
}
|
|
3862
|
+
const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[tipoObjeto];
|
|
3809
3863
|
if (!tipoCorrespondente) {
|
|
3810
|
-
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${
|
|
3864
|
+
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${tipoObjeto}' não foi encontrado entre os tipos definidos por bibliotecas.`);
|
|
3811
3865
|
}
|
|
3812
3866
|
if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
|
|
3813
3867
|
!(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
|
|
@@ -5312,7 +5366,7 @@ class AvaliadorSintaticoEguaClassico {
|
|
|
5312
5366
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NULO))
|
|
5313
5367
|
return new construtos_1.Literal(this.hashArquivo, 0, null);
|
|
5314
5368
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ISTO))
|
|
5315
|
-
return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior()));
|
|
5369
|
+
return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior().linha), this.simboloAnterior());
|
|
5316
5370
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NUMERO, egua_classico_1.default.TEXTO)) {
|
|
5317
5371
|
return new construtos_1.Literal(this.hashArquivo, 0, this.simboloAnterior().literal);
|
|
5318
5372
|
}
|
|
@@ -7396,7 +7450,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7396
7450
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
7397
7451
|
// Funções nativas de Delégua (e de Pituguês também, por enquanto)
|
|
7398
7452
|
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'número'));
|
|
7399
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7453
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
|
|
7400
7454
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
7401
7455
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
7402
7456
|
]));
|
|
@@ -7412,19 +7466,19 @@ class AvaliadorSintaticoPitugues {
|
|
|
7412
7466
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7413
7467
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7414
7468
|
]));
|
|
7415
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7469
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_indice', 'inteiro', true, [
|
|
7416
7470
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7417
7471
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7418
7472
|
]));
|
|
7419
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7473
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo', 'inteiro', true, [
|
|
7420
7474
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7421
7475
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7422
7476
|
]));
|
|
7423
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7477
|
+
this.pilhaEscopos.definirInformacoesVariavel('encontrar_ultimo_indice', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('encontrar_ultimo_indice', 'inteiro', true, [
|
|
7424
7478
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7425
7479
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoPesquisa', 'função'),
|
|
7426
7480
|
]));
|
|
7427
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7481
|
+
this.pilhaEscopos.definirInformacoesVariavel('filtrar_por', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('filtrar_por', 'qualquer[]', true, [
|
|
7428
7482
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7429
7483
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7430
7484
|
]));
|
|
@@ -7463,11 +7517,11 @@ class AvaliadorSintaticoPitugues {
|
|
|
7463
7517
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7464
7518
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoOrdenacao', 'função'),
|
|
7465
7519
|
]));
|
|
7466
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7520
|
+
this.pilhaEscopos.definirInformacoesVariavel('para_cada', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('para_cada', 'qualquer[]', true, [
|
|
7467
7521
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7468
7522
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7469
7523
|
]));
|
|
7470
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7524
|
+
this.pilhaEscopos.definirInformacoesVariavel('primeiro_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('primeiro_em_condicao', 'qualquer', true, [
|
|
7471
7525
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
7472
7526
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoFiltragem', 'função'),
|
|
7473
7527
|
]));
|
|
@@ -7494,7 +7548,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
7494
7548
|
this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
|
|
7495
7549
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7496
7550
|
]));
|
|
7497
|
-
this.pilhaEscopos.definirInformacoesVariavel('
|
|
7551
|
+
this.pilhaEscopos.definirInformacoesVariavel('todos_em_condicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos_em_condicao', 'lógico', true, [
|
|
7498
7552
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
7499
7553
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('funcaoCondicional', 'função'),
|
|
7500
7554
|
]));
|
|
@@ -43392,7 +43446,12 @@ ${labelFuncao}:
|
|
|
43392
43446
|
}
|
|
43393
43447
|
traduzirConstrutoLiteral(construto) {
|
|
43394
43448
|
if (typeof construto.valor === 'string') {
|
|
43395
|
-
return this.
|
|
43449
|
+
return this.criarStringLiteral(construto);
|
|
43450
|
+
}
|
|
43451
|
+
if (typeof construto.valor === 'number' &&
|
|
43452
|
+
Number.isFinite(construto.valor) &&
|
|
43453
|
+
!Number.isInteger(construto.valor)) {
|
|
43454
|
+
return this.criarLiteralPontoFlutuante(construto.valor);
|
|
43396
43455
|
}
|
|
43397
43456
|
return String(construto.valor);
|
|
43398
43457
|
}
|
|
@@ -43524,7 +43583,10 @@ ${labelProximo}:`;
|
|
|
43524
43583
|
traduzirDeclaracaoExpressao(declaracao) {
|
|
43525
43584
|
if (declaracao.expressao &&
|
|
43526
43585
|
this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
|
|
43527
|
-
this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
|
|
43586
|
+
const resultado = this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
|
|
43587
|
+
if (typeof resultado === 'string' && resultado && resultado !== 'a0') {
|
|
43588
|
+
this.emitirCarga('a0', resultado);
|
|
43589
|
+
}
|
|
43528
43590
|
}
|
|
43529
43591
|
}
|
|
43530
43592
|
traduzirDeclaracaoFazer(declaracao) {
|
|
@@ -43738,19 +43800,24 @@ ${labelSenao}:`;
|
|
|
43738
43800
|
}
|
|
43739
43801
|
}
|
|
43740
43802
|
}
|
|
43741
|
-
|
|
43803
|
+
criarStringLiteral(literal) {
|
|
43742
43804
|
const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
|
|
43743
43805
|
this.data += ` ${varLiteral}: .asciz "${literal.valor}"\n`;
|
|
43744
43806
|
return varLiteral;
|
|
43745
43807
|
}
|
|
43746
|
-
|
|
43808
|
+
criarLiteralPontoFlutuante(valor) {
|
|
43809
|
+
const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
|
|
43810
|
+
this.data += ` ${varLiteral}: .double ${valor}\n`;
|
|
43811
|
+
return varLiteral;
|
|
43812
|
+
}
|
|
43813
|
+
criarTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
|
|
43747
43814
|
return `tam_${nomeStringLiteral}`;
|
|
43748
43815
|
}
|
|
43749
43816
|
traduzirDeclaracaoEscreva(declaracaoEscreva) {
|
|
43750
43817
|
let nomeStringLiteral = '';
|
|
43751
43818
|
let tamanhoString = '';
|
|
43752
43819
|
if (declaracaoEscreva.argumentos[0] instanceof construtos_1.Literal) {
|
|
43753
|
-
nomeStringLiteral = this.
|
|
43820
|
+
nomeStringLiteral = this.criarStringLiteral(declaracaoEscreva.argumentos[0]);
|
|
43754
43821
|
const stringValue = declaracaoEscreva.argumentos[0].valor;
|
|
43755
43822
|
tamanhoString = String(stringValue.length);
|
|
43756
43823
|
}
|
|
@@ -44572,7 +44639,7 @@ class TradutorAssemblyScript {
|
|
|
44572
44639
|
this.dicionarioConstrutos = {
|
|
44573
44640
|
AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
|
|
44574
44641
|
AcessoMetodo: this.traduzirConstrutoAcessoMetodo.bind(this),
|
|
44575
|
-
AcessoMetodoOuPropriedade: this.
|
|
44642
|
+
AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
|
|
44576
44643
|
AcessoPropriedade: this.traduzirConstrutoAcessoPropriedade.bind(this),
|
|
44577
44644
|
Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
|
|
44578
44645
|
ArgumentoReferenciaFuncao: this.traduzirConstrutoArgumentoReferenciaFuncao.bind(this),
|
|
@@ -44775,7 +44842,7 @@ class TradutorAssemblyScript {
|
|
|
44775
44842
|
case 'aleatorio':
|
|
44776
44843
|
return `Math.random()`;
|
|
44777
44844
|
case 'aleatorioEntre':
|
|
44778
|
-
case '
|
|
44845
|
+
case 'aleatorioentre':
|
|
44779
44846
|
if (argumentos.length >= 2) {
|
|
44780
44847
|
return `(Math.random() * (${argumentos[1]} - ${argumentos[0]}) + ${argumentos[0]})`;
|
|
44781
44848
|
}
|
|
@@ -45673,11 +45740,20 @@ class TradutorAssemblyScript {
|
|
|
45673
45740
|
return resultado;
|
|
45674
45741
|
}
|
|
45675
45742
|
traduzirConstrutoAcessoMetodo(acessoMetodo) {
|
|
45743
|
+
const nomeMetodo = acessoMetodo.nomeMetodo;
|
|
45676
45744
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
45677
45745
|
let objetoVariavel = acessoMetodo.objeto;
|
|
45678
|
-
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(
|
|
45746
|
+
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
|
|
45679
45747
|
}
|
|
45680
|
-
return `this.${
|
|
45748
|
+
return `this.${nomeMetodo}`;
|
|
45749
|
+
}
|
|
45750
|
+
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodoOuPropriedade) {
|
|
45751
|
+
const nomeMetodo = acessoMetodoOuPropriedade.simbolo?.lexema;
|
|
45752
|
+
if (acessoMetodoOuPropriedade.objeto instanceof construtos_1.Variavel) {
|
|
45753
|
+
let objetoVariavel = acessoMetodoOuPropriedade.objeto;
|
|
45754
|
+
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
|
|
45755
|
+
}
|
|
45756
|
+
return `this.${nomeMetodo}`;
|
|
45681
45757
|
}
|
|
45682
45758
|
traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
|
|
45683
45759
|
let resultado = '';
|