@designliquido/delegua 1.17.1 → 1.17.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 +9 -3
- 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 +9 -3
- 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 +1 -0
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +7 -0
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +33 -13
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js +112 -16
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
- package/bin/package.json +2 -2
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +1 -1
- package/package.json +2 -2
- package/umd/delegua.js +43 -16
|
@@ -54,7 +54,7 @@ export declare class InterpretadorEguaClassico implements InterpretadorInterface
|
|
|
54
54
|
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): never;
|
|
55
55
|
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): never;
|
|
56
56
|
visitarExpressaoLeia(expressao: Leia): Promise<any>;
|
|
57
|
-
visitarExpressaoLiteral(expressao: Literal): Promise<import("
|
|
57
|
+
visitarExpressaoLiteral(expressao: Literal): Promise<import("../../..").ValorLiteral>;
|
|
58
58
|
avaliar(expressao: Construto | Declaracao): VariavelInterface | any;
|
|
59
59
|
visitarExpressaoAgrupamento(expressao: any): any;
|
|
60
60
|
eVerdadeiro(objeto: any): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/delegua",
|
|
3
|
-
"version": "1.17.
|
|
3
|
+
"version": "1.17.2",
|
|
4
4
|
"description": "Linguagem de programação simples e moderna usando português estruturado.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"ts-jest": "^29.3.0",
|
|
108
108
|
"ts-node": "^10.9.2",
|
|
109
109
|
"typedoc": "^0.28.1",
|
|
110
|
-
"typescript": "^
|
|
110
|
+
"typescript": "^6.0.2"
|
|
111
111
|
},
|
|
112
112
|
"dependencies": {
|
|
113
113
|
"antlr4ts": "^0.5.0-alpha.4",
|
package/umd/delegua.js
CHANGED
|
@@ -641,10 +641,16 @@ class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemantic
|
|
|
641
641
|
}
|
|
642
642
|
visitarChamadaPorVariavel(entidadeChamadaVariavel, argumentos) {
|
|
643
643
|
const variavel = entidadeChamadaVariavel;
|
|
644
|
-
const
|
|
645
|
-
|
|
644
|
+
const nomeFuncao = variavel.simbolo.lexema;
|
|
645
|
+
const funcoesNativas = ['inteiro', 'real', 'numero', 'número', 'texto', 'leia', 'escreva', 'tipo'];
|
|
646
|
+
const pareceSerClasse = nomeFuncao[0] === nomeFuncao[0].toUpperCase();
|
|
647
|
+
if (funcoesNativas.includes(nomeFuncao) || pareceSerClasse) {
|
|
648
|
+
return Promise.resolve();
|
|
649
|
+
}
|
|
650
|
+
const funcaoChamada = this.gerenciadorEscopos.buscar(nomeFuncao) ||
|
|
651
|
+
this.funcoes[nomeFuncao];
|
|
646
652
|
if (!funcaoChamada) {
|
|
647
|
-
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${
|
|
653
|
+
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${nomeFuncao}' não existe.`);
|
|
648
654
|
return Promise.resolve();
|
|
649
655
|
}
|
|
650
656
|
const funcao = funcaoChamada.valor;
|
|
@@ -3386,6 +3392,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
3386
3392
|
const caminhoFazer = await this.declaracaoBloco();
|
|
3387
3393
|
this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
3388
3394
|
const condicaoEnquanto = await this.expressao();
|
|
3395
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
3389
3396
|
return {
|
|
3390
3397
|
caminhoFazer,
|
|
3391
3398
|
condicaoEnquanto,
|
|
@@ -6188,6 +6195,37 @@ class AvaliadorSintaticoPitugues {
|
|
|
6188
6195
|
}
|
|
6189
6196
|
return false;
|
|
6190
6197
|
}
|
|
6198
|
+
/**
|
|
6199
|
+
* Transforma uma string com interpolações (f-string) em código equivalente usando o método formatar.
|
|
6200
|
+
* Exemplo: f"Olá {nome}, você tem {idade} anos" -> "Olá " + nome + " você tem " + idade + " anos"
|
|
6201
|
+
* Com formatadores: f"{valor:.2f}" -> "" + "{:.2f}".formatar(valor) + ""
|
|
6202
|
+
* Com depuração: f"{usuario=}" -> "" + "{usuario=}".formatar(usuario) + ""
|
|
6203
|
+
*/
|
|
6204
|
+
transformarInterpolacaoEmFormatacao(conteudoOriginal) {
|
|
6205
|
+
const ehDepuracao = (mioloLimpo) => {
|
|
6206
|
+
return mioloLimpo.endsWith('=') && !/^(?:[!=<>]=|[<>])$/.test(mioloLimpo.slice(-2));
|
|
6207
|
+
};
|
|
6208
|
+
const processarParte = (_, miolo) => {
|
|
6209
|
+
const mioloLimpo = miolo.trimEnd();
|
|
6210
|
+
// Modo depuração: {expressao=}
|
|
6211
|
+
if (ehDepuracao(mioloLimpo)) {
|
|
6212
|
+
const expressao = mioloLimpo.slice(0, -1).trim();
|
|
6213
|
+
return `" + "{${miolo}}".formatar(${expressao}) + "`;
|
|
6214
|
+
}
|
|
6215
|
+
// Modo formatação: {expressao:formato}
|
|
6216
|
+
if (mioloLimpo.includes(':')) {
|
|
6217
|
+
const [variavel, formato] = mioloLimpo
|
|
6218
|
+
.split(':')
|
|
6219
|
+
.map(s => s.trim());
|
|
6220
|
+
if (variavel) {
|
|
6221
|
+
return `" + "{:${formato}}".formatar(${variavel}) + "`;
|
|
6222
|
+
}
|
|
6223
|
+
}
|
|
6224
|
+
// Interpolação simples: {expressao}
|
|
6225
|
+
return `" + (${miolo}) + "`;
|
|
6226
|
+
};
|
|
6227
|
+
return '"' + conteudoOriginal.replace(/\{(.*?)\}/g, processarParte) + '"';
|
|
6228
|
+
}
|
|
6191
6229
|
async primario() {
|
|
6192
6230
|
const simboloAtual = this.simbolos[this.atual];
|
|
6193
6231
|
switch (simboloAtual.tipo) {
|
|
@@ -6302,19 +6340,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
6302
6340
|
case pitugues_2.default.INTERPOLACAO:
|
|
6303
6341
|
const simboloInterpolacao = this.avancarEDevolverAnterior();
|
|
6304
6342
|
const conteudoOriginal = simboloInterpolacao.literal;
|
|
6305
|
-
const codigoTransformado =
|
|
6306
|
-
|
|
6307
|
-
// 'miolo' é o texto que estava dentro das chaves. Ex: "valor" ou "valor:.2f"
|
|
6308
|
-
if (miolo.includes(':')) {
|
|
6309
|
-
const [variavel, formato] = miolo.split(':').map((s) => s.trim());
|
|
6310
|
-
if (variavel !== '') {
|
|
6311
|
-
// Transforma {valor:.2f} em "{:.2f}".formatar(valor)
|
|
6312
|
-
return '" + "{:' + formato + '}".formatar(' + variavel + ') + "';
|
|
6313
|
-
}
|
|
6314
|
-
}
|
|
6315
|
-
return '" + (' + miolo.trim() + ') + "';
|
|
6316
|
-
}) +
|
|
6317
|
-
'"';
|
|
6343
|
+
const codigoTransformado = this
|
|
6344
|
+
.transformarInterpolacaoEmFormatacao(conteudoOriginal);
|
|
6318
6345
|
const microLexador = new micro_lexador_pitugues_1.MicroLexadorPitugues();
|
|
6319
6346
|
const retornoMicroLexador = microLexador.mapear(codigoTransformado);
|
|
6320
6347
|
const microAvaliadorSintatico = new micro_avaliador_sintatico_pitugues_1.MicroAvaliadorSintaticoPitugues();
|