@designliquido/delegua 1.17.2 → 1.18.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/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +35 -4
- 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 +37 -11
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +2 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +51 -3
- 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/bin/package.json +1 -1
- package/interpretador/comum.js +13 -0
- package/interpretador/comum.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +2 -2
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/lexador/palavras-reservadas.d.ts.map +1 -1
- package/lexador/palavras-reservadas.js +2 -0
- package/lexador/palavras-reservadas.js.map +1 -1
- package/package.json +1 -1
- package/tipos-de-simbolos/delegua.d.ts +1 -0
- package/tipos-de-simbolos/delegua.d.ts.map +1 -1
- package/tipos-de-simbolos/delegua.js +1 -0
- package/tipos-de-simbolos/delegua.js.map +1 -1
- 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 +135 -18
package/umd/delegua.js
CHANGED
|
@@ -1194,9 +1194,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1194
1194
|
];
|
|
1195
1195
|
// Classes/construtores geralmente começam com letra maiúscula
|
|
1196
1196
|
const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
|
|
1197
|
+
if (pareceSerClasse) {
|
|
1198
|
+
this.gerenciadorEscopos.marcarComoUsada(nomeFuncao);
|
|
1199
|
+
break;
|
|
1200
|
+
}
|
|
1197
1201
|
// Só verifica se a função existe se não for embutidas e não parecer ser classe
|
|
1198
1202
|
if (!funcoesEmbutidas.includes(nomeFuncao) &&
|
|
1199
|
-
!pareceSerClasse &&
|
|
1200
1203
|
!this.funcoes[nomeFuncao] &&
|
|
1201
1204
|
!this.gerenciadorEscopos.buscar(nomeFuncao)) {
|
|
1202
1205
|
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
|
|
@@ -1501,6 +1504,22 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1501
1504
|
}
|
|
1502
1505
|
this.classesDeclaradas.add(declaracao.simbolo.lexema);
|
|
1503
1506
|
this.classesRegistradas.set(declaracao.simbolo.lexema, declaracao);
|
|
1507
|
+
// Marca tipos usados em anotações de propriedades e parâmetros de métodos como usados.
|
|
1508
|
+
for (const propriedade of declaracao.propriedades) {
|
|
1509
|
+
const tipoBase = propriedade.tipo?.replace('[]', '');
|
|
1510
|
+
if (tipoBase)
|
|
1511
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoBase);
|
|
1512
|
+
}
|
|
1513
|
+
for (const metodo of declaracao.metodos) {
|
|
1514
|
+
const tipoRetorno = metodo.funcao.tipo?.replace('[]', '');
|
|
1515
|
+
if (tipoRetorno)
|
|
1516
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoRetorno);
|
|
1517
|
+
for (const parametro of metodo.funcao.parametros) {
|
|
1518
|
+
const tipoBase = parametro.tipoDado?.replace('[]', '');
|
|
1519
|
+
if (tipoBase)
|
|
1520
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoBase);
|
|
1521
|
+
}
|
|
1522
|
+
}
|
|
1504
1523
|
// Visita corpos dos métodos com contexto de classe ativo.
|
|
1505
1524
|
// Métodos abstratos implícitos e métodos de classes estrangeiras têm corpo vazio —
|
|
1506
1525
|
// não há declarações para visitar.
|
|
@@ -1510,6 +1529,12 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1510
1529
|
for (const metodo of declaracao.metodos) {
|
|
1511
1530
|
if (metodo.abstrato)
|
|
1512
1531
|
continue;
|
|
1532
|
+
const tipoRetornoMetodo = metodo.funcao.tipo;
|
|
1533
|
+
if (tipoRetornoMetodo &&
|
|
1534
|
+
!['vazio', 'qualquer'].includes(tipoRetornoMetodo) &&
|
|
1535
|
+
metodo.funcao.corpo.length === 0) {
|
|
1536
|
+
this.aviso(metodo.simbolo, `Método especifica tipo de retorno '${tipoRetornoMetodo}', mas não há qualquer retorno correspondente no corpo do método.`);
|
|
1537
|
+
}
|
|
1513
1538
|
for (const stmt of metodo.funcao.corpo) {
|
|
1514
1539
|
await stmt.aceitar(this);
|
|
1515
1540
|
}
|
|
@@ -1526,10 +1551,16 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
1526
1551
|
}
|
|
1527
1552
|
let tipoRetornoFuncao = declaracao.funcao.tipo;
|
|
1528
1553
|
if (tipoRetornoFuncao) {
|
|
1554
|
+
this.gerenciadorEscopos.marcarComoUsada(tipoRetornoFuncao);
|
|
1529
1555
|
if (!['vazio', 'qualquer'].includes(tipoRetornoFuncao)) {
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1556
|
+
if (declaracao.funcao.corpo.length === 0) {
|
|
1557
|
+
this.aviso(declaracao.simbolo, `Método especifica tipo de retorno '${tipoRetornoFuncao}', mas não há qualquer retorno correspondente no corpo do método.`);
|
|
1558
|
+
}
|
|
1559
|
+
else {
|
|
1560
|
+
const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
|
|
1561
|
+
if (!todosOsCaminhosRetornam) {
|
|
1562
|
+
this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
|
|
1563
|
+
}
|
|
1533
1564
|
}
|
|
1534
1565
|
}
|
|
1535
1566
|
let retornos = [];
|
|
@@ -2079,6 +2110,7 @@ const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatic
|
|
|
2079
2110
|
const comum_1 = require("./comum");
|
|
2080
2111
|
const montao_tipos_1 = require("./montao-tipos");
|
|
2081
2112
|
const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
|
|
2113
|
+
const simbolo_1 = require("../lexador/simbolo");
|
|
2082
2114
|
const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
|
|
2083
2115
|
const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
2084
2116
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
@@ -2136,7 +2168,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2136
2168
|
verificarDefinicaoTipoAtual() {
|
|
2137
2169
|
const tipos = [...Object.values(delegua_1.default)];
|
|
2138
2170
|
if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
|
|
2139
|
-
|
|
2171
|
+
const nomeBase = this.simbolos[this.atual].lexema;
|
|
2172
|
+
if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
|
|
2173
|
+
this.avancarEDevolverAnterior(); // avança do tipo para '['
|
|
2174
|
+
if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
|
|
2175
|
+
throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
|
|
2176
|
+
}
|
|
2177
|
+
this.avancarEDevolverAnterior(); // avança de '[' para ']'
|
|
2178
|
+
return `${nomeBase}[]`;
|
|
2179
|
+
}
|
|
2180
|
+
return nomeBase;
|
|
2140
2181
|
}
|
|
2141
2182
|
if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
|
|
2142
2183
|
return this.simbolos[this.atual].lexema;
|
|
@@ -2237,6 +2278,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2237
2278
|
case delegua_2.default.EXTENSAO:
|
|
2238
2279
|
this.avancarEDevolverAnterior();
|
|
2239
2280
|
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'extensao', 'texto');
|
|
2281
|
+
case delegua_2.default.ASSERCAO:
|
|
2282
|
+
this.avancarEDevolverAnterior();
|
|
2283
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'assercao', 'texto');
|
|
2240
2284
|
default:
|
|
2241
2285
|
return undefined;
|
|
2242
2286
|
}
|
|
@@ -3388,6 +3432,38 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3388
3432
|
const expressaoFalha = await this.expressao();
|
|
3389
3433
|
return new declaracoes_1.Falhar(simboloFalha, expressaoFalha);
|
|
3390
3434
|
}
|
|
3435
|
+
async declaracaoAssercao() {
|
|
3436
|
+
const simboloAssercao = this.simbolos[this.atual - 1];
|
|
3437
|
+
let condicao;
|
|
3438
|
+
let mensagemFalha;
|
|
3439
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
|
|
3440
|
+
condicao = await this.expressao();
|
|
3441
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
3442
|
+
this.avancarEDevolverAnterior();
|
|
3443
|
+
mensagemFalha = await this.expressao();
|
|
3444
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
3445
|
+
throw this.erro(this.simbolos[this.atual], "'asserção' aceita apenas condição obrigatória e mensagem opcional.");
|
|
3446
|
+
}
|
|
3447
|
+
}
|
|
3448
|
+
else {
|
|
3449
|
+
mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
|
|
3450
|
+
}
|
|
3451
|
+
this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após argumentos de 'asserção'.");
|
|
3452
|
+
}
|
|
3453
|
+
else {
|
|
3454
|
+
condicao = await this.expressao();
|
|
3455
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
3456
|
+
throw this.erro(this.simbolos[this.atual], "Mensagem em 'asserção' exige uso de parênteses.");
|
|
3457
|
+
}
|
|
3458
|
+
mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
|
|
3459
|
+
}
|
|
3460
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
3461
|
+
const simboloNao = new simbolo_1.Simbolo(delegua_2.default.NEGACAO, 'nao', null, Number(simboloAssercao.linha), simboloAssercao.hashArquivo, simboloAssercao.colunaInicio, simboloAssercao.colunaFim);
|
|
3462
|
+
const condicaoNegada = new construtos_1.Unario(simboloAssercao.hashArquivo, simboloNao, condicao, 'ANTES');
|
|
3463
|
+
const declaracaoFalhar = new declaracoes_1.Falhar(simboloAssercao, mensagemFalha);
|
|
3464
|
+
const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [declaracaoFalhar]);
|
|
3465
|
+
return new declaracoes_1.Se(condicaoNegada, blocoFalha);
|
|
3466
|
+
}
|
|
3391
3467
|
async logicaComumFazer() {
|
|
3392
3468
|
const caminhoFazer = await this.declaracaoBloco();
|
|
3393
3469
|
this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
@@ -4661,14 +4737,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4661
4737
|
}
|
|
4662
4738
|
/**
|
|
4663
4739
|
* Usado quando há erros na avaliação sintática.
|
|
4664
|
-
* Garante que o
|
|
4740
|
+
* Garante que o avaliador sintático não entre em _loop_ infinito.
|
|
4665
4741
|
* @returns Sempre retorna `void`.
|
|
4666
4742
|
*/
|
|
4667
4743
|
sincronizar() {
|
|
4668
4744
|
this.avancarEDevolverAnterior(); // avança além do token com erro
|
|
4669
4745
|
while (!this.estaNoFinal()) {
|
|
4670
4746
|
// Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
|
|
4671
|
-
if (this.simbolos[this.atual
|
|
4747
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.PONTO_E_VIRGULA)
|
|
4672
4748
|
return;
|
|
4673
4749
|
// Uma palavra-chave de início de declaração ou fecha-chave à frente:
|
|
4674
4750
|
// retorna SEM consumir o token, para que o chamador o analise normalmente.
|
|
@@ -4700,6 +4776,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4700
4776
|
switch (this.simbolos[this.atual].tipo) {
|
|
4701
4777
|
case delegua_2.default.AJUDA:
|
|
4702
4778
|
return await this.declaracaoAjuda();
|
|
4779
|
+
case delegua_2.default.ASSERCAO:
|
|
4780
|
+
this.avancarEDevolverAnterior();
|
|
4781
|
+
return await this.declaracaoAssercao();
|
|
4703
4782
|
case delegua_2.default.CHAVE_ESQUERDA:
|
|
4704
4783
|
return await this.declaracaoBloco();
|
|
4705
4784
|
case delegua_2.default.COMENTARIO:
|
|
@@ -4988,7 +5067,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
4988
5067
|
}
|
|
4989
5068
|
exports.AvaliadorSintatico = AvaliadorSintatico;
|
|
4990
5069
|
|
|
4991
|
-
},{"../bibliotecas/primitivas-dicionario":29,"../bibliotecas/primitivas-numero":30,"../bibliotecas/primitivas-texto":31,"../bibliotecas/primitivas-vetor":32,"../construtos":62,"../construtos/tuplas":80,"../declaracoes":110,"../inferenciador":139,"../informacao-elemento-sintatico":140,"../tipos-de-dados/delegua":220,"../tipos-de-simbolos/delegua":225,"./avaliador-sintatico-base":9,"./comum":11,"./elemento-montao-tipos":19,"./erro-avaliador-sintatico":20,"./informacao-escopo":22,"./montao-tipos":25,"./pilha-escopos":26,"browser-process-hrtime":418}],11:[function(require,module,exports){
|
|
5070
|
+
},{"../bibliotecas/primitivas-dicionario":29,"../bibliotecas/primitivas-numero":30,"../bibliotecas/primitivas-texto":31,"../bibliotecas/primitivas-vetor":32,"../construtos":62,"../construtos/tuplas":80,"../declaracoes":110,"../inferenciador":139,"../informacao-elemento-sintatico":140,"../lexador/simbolo":218,"../tipos-de-dados/delegua":220,"../tipos-de-simbolos/delegua":225,"./avaliador-sintatico-base":9,"./comum":11,"./elemento-montao-tipos":19,"./erro-avaliador-sintatico":20,"./informacao-escopo":22,"./montao-tipos":25,"./pilha-escopos":26,"browser-process-hrtime":418}],11:[function(require,module,exports){
|
|
4992
5071
|
"use strict";
|
|
4993
5072
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4994
5073
|
exports.buscarRetornos = buscarRetornos;
|
|
@@ -5251,7 +5330,7 @@ class AvaliadorSintaticoEguaClassico {
|
|
|
5251
5330
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NULO))
|
|
5252
5331
|
return new construtos_1.Literal(this.hashArquivo, 0, null);
|
|
5253
5332
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ISTO))
|
|
5254
|
-
return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior()));
|
|
5333
|
+
return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior().linha), this.simboloAnterior());
|
|
5255
5334
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NUMERO, egua_classico_1.default.TEXTO)) {
|
|
5256
5335
|
return new construtos_1.Literal(this.hashArquivo, 0, this.simboloAnterior().literal);
|
|
5257
5336
|
}
|
|
@@ -18679,6 +18758,19 @@ function obterAjudaTemaClasse(chave) {
|
|
|
18679
18758
|
`\tvar s = "olá"\n` +
|
|
18680
18759
|
`\tescreva(s.gritarMaiusculas()) // OLÁ!!!\n\n` +
|
|
18681
18760
|
`Ver também: 'classe'.`);
|
|
18761
|
+
case 'assercao':
|
|
18762
|
+
return (`A instrução 'asserção' valida uma condição em tempo de execução.\n` +
|
|
18763
|
+
`Se condição for falsa, execução falha com erro.\n\n` +
|
|
18764
|
+
`Sintaxe:\n` +
|
|
18765
|
+
`\tasserção condicao\n` +
|
|
18766
|
+
`\tasserção(condicao)\n` +
|
|
18767
|
+
`\tasserção(condicao, "mensagem de erro")\n\n` +
|
|
18768
|
+
`Exemplo:\n` +
|
|
18769
|
+
`\tvar idade = 20\n` +
|
|
18770
|
+
`\tasserção idade >= 18\n` +
|
|
18771
|
+
`\tasserção(idade >= 18, "idade precisa ser maior de idade")\n\n` +
|
|
18772
|
+
`Internamente, primeira implementação usa fluxo equivalente a 'se' + 'falhar'.\n\n` +
|
|
18773
|
+
`Ver também: 'falhar'.`);
|
|
18682
18774
|
default:
|
|
18683
18775
|
return `Desculpe, não há documentação disponível para o tópico '${chave}' no momento.`;
|
|
18684
18776
|
}
|
|
@@ -28737,6 +28829,8 @@ const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
|
28737
28829
|
exports.palavrasReservadasDelegua = {
|
|
28738
28830
|
abstrata: delegua_1.default.ABSTRATO,
|
|
28739
28831
|
abstrato: delegua_1.default.ABSTRATO,
|
|
28832
|
+
assercao: delegua_1.default.ASSERCAO,
|
|
28833
|
+
asserção: delegua_1.default.ASSERCAO,
|
|
28740
28834
|
ajuda: delegua_1.default.AJUDA,
|
|
28741
28835
|
cada: delegua_1.default.CADA,
|
|
28742
28836
|
caso: delegua_1.default.CASO,
|
|
@@ -29058,6 +29152,7 @@ exports.default = {
|
|
|
29058
29152
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29059
29153
|
exports.default = {
|
|
29060
29154
|
ADICAO: 'ADICAO',
|
|
29155
|
+
ASSERCAO: 'ASSERCAO',
|
|
29061
29156
|
ABSTRATO: 'ABSTRATO',
|
|
29062
29157
|
AJUDA: 'AJUDA',
|
|
29063
29158
|
ARROBA: 'ARROBA',
|
|
@@ -43315,7 +43410,12 @@ ${labelFuncao}:
|
|
|
43315
43410
|
}
|
|
43316
43411
|
traduzirConstrutoLiteral(construto) {
|
|
43317
43412
|
if (typeof construto.valor === 'string') {
|
|
43318
|
-
return this.
|
|
43413
|
+
return this.criarStringLiteral(construto);
|
|
43414
|
+
}
|
|
43415
|
+
if (typeof construto.valor === 'number' &&
|
|
43416
|
+
Number.isFinite(construto.valor) &&
|
|
43417
|
+
!Number.isInteger(construto.valor)) {
|
|
43418
|
+
return this.criarLiteralPontoFlutuante(construto.valor);
|
|
43319
43419
|
}
|
|
43320
43420
|
return String(construto.valor);
|
|
43321
43421
|
}
|
|
@@ -43447,7 +43547,10 @@ ${labelProximo}:`;
|
|
|
43447
43547
|
traduzirDeclaracaoExpressao(declaracao) {
|
|
43448
43548
|
if (declaracao.expressao &&
|
|
43449
43549
|
this.dicionarioConstrutos[declaracao.expressao.constructor.name]) {
|
|
43450
|
-
this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
|
|
43550
|
+
const resultado = this.dicionarioConstrutos[declaracao.expressao.constructor.name](declaracao.expressao);
|
|
43551
|
+
if (typeof resultado === 'string' && resultado && resultado !== 'a0') {
|
|
43552
|
+
this.emitirCarga('a0', resultado);
|
|
43553
|
+
}
|
|
43451
43554
|
}
|
|
43452
43555
|
}
|
|
43453
43556
|
traduzirDeclaracaoFazer(declaracao) {
|
|
@@ -43661,19 +43764,24 @@ ${labelSenao}:`;
|
|
|
43661
43764
|
}
|
|
43662
43765
|
}
|
|
43663
43766
|
}
|
|
43664
|
-
|
|
43767
|
+
criarStringLiteral(literal) {
|
|
43665
43768
|
const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
|
|
43666
43769
|
this.data += ` ${varLiteral}: .asciz "${literal.valor}"\n`;
|
|
43667
43770
|
return varLiteral;
|
|
43668
43771
|
}
|
|
43669
|
-
|
|
43772
|
+
criarLiteralPontoFlutuante(valor) {
|
|
43773
|
+
const varLiteral = `Delegua_${this.gerarDigitoAleatorio()}`;
|
|
43774
|
+
this.data += ` ${varLiteral}: .double ${valor}\n`;
|
|
43775
|
+
return varLiteral;
|
|
43776
|
+
}
|
|
43777
|
+
criarTamanhoNaMemoriaReferenteAVar(nomeStringLiteral) {
|
|
43670
43778
|
return `tam_${nomeStringLiteral}`;
|
|
43671
43779
|
}
|
|
43672
43780
|
traduzirDeclaracaoEscreva(declaracaoEscreva) {
|
|
43673
43781
|
let nomeStringLiteral = '';
|
|
43674
43782
|
let tamanhoString = '';
|
|
43675
43783
|
if (declaracaoEscreva.argumentos[0] instanceof construtos_1.Literal) {
|
|
43676
|
-
nomeStringLiteral = this.
|
|
43784
|
+
nomeStringLiteral = this.criarStringLiteral(declaracaoEscreva.argumentos[0]);
|
|
43677
43785
|
const stringValue = declaracaoEscreva.argumentos[0].valor;
|
|
43678
43786
|
tamanhoString = String(stringValue.length);
|
|
43679
43787
|
}
|
|
@@ -44495,7 +44603,7 @@ class TradutorAssemblyScript {
|
|
|
44495
44603
|
this.dicionarioConstrutos = {
|
|
44496
44604
|
AcessoIndiceVariavel: this.traduzirConstrutoAcessoIndiceVariavel.bind(this),
|
|
44497
44605
|
AcessoMetodo: this.traduzirConstrutoAcessoMetodo.bind(this),
|
|
44498
|
-
AcessoMetodoOuPropriedade: this.
|
|
44606
|
+
AcessoMetodoOuPropriedade: this.traduzirConstrutoAcessoMetodoOuPropriedade.bind(this),
|
|
44499
44607
|
AcessoPropriedade: this.traduzirConstrutoAcessoPropriedade.bind(this),
|
|
44500
44608
|
Agrupamento: this.traduzirConstrutoAgrupamento.bind(this),
|
|
44501
44609
|
ArgumentoReferenciaFuncao: this.traduzirConstrutoArgumentoReferenciaFuncao.bind(this),
|
|
@@ -44698,7 +44806,7 @@ class TradutorAssemblyScript {
|
|
|
44698
44806
|
case 'aleatorio':
|
|
44699
44807
|
return `Math.random()`;
|
|
44700
44808
|
case 'aleatorioEntre':
|
|
44701
|
-
case '
|
|
44809
|
+
case 'aleatorioentre':
|
|
44702
44810
|
if (argumentos.length >= 2) {
|
|
44703
44811
|
return `(Math.random() * (${argumentos[1]} - ${argumentos[0]}) + ${argumentos[0]})`;
|
|
44704
44812
|
}
|
|
@@ -45596,11 +45704,20 @@ class TradutorAssemblyScript {
|
|
|
45596
45704
|
return resultado;
|
|
45597
45705
|
}
|
|
45598
45706
|
traduzirConstrutoAcessoMetodo(acessoMetodo) {
|
|
45707
|
+
const nomeMetodo = acessoMetodo.nomeMetodo;
|
|
45599
45708
|
if (acessoMetodo.objeto instanceof construtos_1.Variavel) {
|
|
45600
45709
|
let objetoVariavel = acessoMetodo.objeto;
|
|
45601
|
-
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(
|
|
45710
|
+
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
|
|
45602
45711
|
}
|
|
45603
|
-
return `this.${
|
|
45712
|
+
return `this.${nomeMetodo}`;
|
|
45713
|
+
}
|
|
45714
|
+
traduzirConstrutoAcessoMetodoOuPropriedade(acessoMetodoOuPropriedade) {
|
|
45715
|
+
const nomeMetodo = acessoMetodoOuPropriedade.simbolo?.lexema;
|
|
45716
|
+
if (acessoMetodoOuPropriedade.objeto instanceof construtos_1.Variavel) {
|
|
45717
|
+
let objetoVariavel = acessoMetodoOuPropriedade.objeto;
|
|
45718
|
+
return `${objetoVariavel.simbolo.lexema}.${this.traduzirFuncoesNativas(nomeMetodo)}`;
|
|
45719
|
+
}
|
|
45720
|
+
return `this.${nomeMetodo}`;
|
|
45604
45721
|
}
|
|
45605
45722
|
traduzirConstrutoAcessoIndiceVariavel(acessoIndiceVariavel) {
|
|
45606
45723
|
let resultado = '';
|