@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
|
@@ -17,6 +17,7 @@ const informacao_elemento_sintatico_1 = require("../informacao-elemento-sintatic
|
|
|
17
17
|
const comum_1 = require("./comum");
|
|
18
18
|
const montao_tipos_1 = require("./montao-tipos");
|
|
19
19
|
const elemento_montao_tipos_1 = require("./elemento-montao-tipos");
|
|
20
|
+
const simbolo_1 = require("../lexador/simbolo");
|
|
20
21
|
const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
|
|
21
22
|
const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
22
23
|
const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
|
|
@@ -74,7 +75,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
74
75
|
verificarDefinicaoTipoAtual() {
|
|
75
76
|
const tipos = [...Object.values(delegua_1.default)];
|
|
76
77
|
if (this.simbolos[this.atual].lexema in this.tiposDefinidosEmCodigo) {
|
|
77
|
-
|
|
78
|
+
const nomeBase = this.simbolos[this.atual].lexema;
|
|
79
|
+
if (this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_ESQUERDO)) {
|
|
80
|
+
this.avancarEDevolverAnterior(); // avança do tipo para '['
|
|
81
|
+
if (!this.verificarTipoProximoSimbolo(delegua_2.default.COLCHETE_DIREITO)) {
|
|
82
|
+
throw this.erro(this.simbolos[this.atual], `Esperado símbolo de fechamento do vetor: ']'. Atual: ${this.simbolos[this.atual].lexema}`);
|
|
83
|
+
}
|
|
84
|
+
this.avancarEDevolverAnterior(); // avança de '[' para ']'
|
|
85
|
+
return `${nomeBase}[]`;
|
|
86
|
+
}
|
|
87
|
+
return nomeBase;
|
|
78
88
|
}
|
|
79
89
|
if (this.simbolos[this.atual].lexema in this.interfacesDeclaradas) {
|
|
80
90
|
return this.simbolos[this.atual].lexema;
|
|
@@ -175,6 +185,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
175
185
|
case delegua_2.default.EXTENSAO:
|
|
176
186
|
this.avancarEDevolverAnterior();
|
|
177
187
|
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'extensao', 'texto');
|
|
188
|
+
case delegua_2.default.ASSERCAO:
|
|
189
|
+
this.avancarEDevolverAnterior();
|
|
190
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), 'assercao', 'texto');
|
|
178
191
|
default:
|
|
179
192
|
return undefined;
|
|
180
193
|
}
|
|
@@ -1326,6 +1339,38 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1326
1339
|
const expressaoFalha = await this.expressao();
|
|
1327
1340
|
return new declaracoes_1.Falhar(simboloFalha, expressaoFalha);
|
|
1328
1341
|
}
|
|
1342
|
+
async declaracaoAssercao() {
|
|
1343
|
+
const simboloAssercao = this.simbolos[this.atual - 1];
|
|
1344
|
+
let condicao;
|
|
1345
|
+
let mensagemFalha;
|
|
1346
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO)) {
|
|
1347
|
+
condicao = await this.expressao();
|
|
1348
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
1349
|
+
this.avancarEDevolverAnterior();
|
|
1350
|
+
mensagemFalha = await this.expressao();
|
|
1351
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
1352
|
+
throw this.erro(this.simbolos[this.atual], "'asserção' aceita apenas condição obrigatória e mensagem opcional.");
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
else {
|
|
1356
|
+
mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
|
|
1357
|
+
}
|
|
1358
|
+
this.consumir(delegua_2.default.PARENTESE_DIREITO, "Esperado ')' após argumentos de 'asserção'.");
|
|
1359
|
+
}
|
|
1360
|
+
else {
|
|
1361
|
+
condicao = await this.expressao();
|
|
1362
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.VIRGULA)) {
|
|
1363
|
+
throw this.erro(this.simbolos[this.atual], "Mensagem em 'asserção' exige uso de parênteses.");
|
|
1364
|
+
}
|
|
1365
|
+
mensagemFalha = new construtos_1.Literal(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), 'A asserção falhou.', 'texto', "'");
|
|
1366
|
+
}
|
|
1367
|
+
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
1368
|
+
const simboloNao = new simbolo_1.Simbolo(delegua_2.default.NEGACAO, 'nao', null, Number(simboloAssercao.linha), simboloAssercao.hashArquivo, simboloAssercao.colunaInicio, simboloAssercao.colunaFim);
|
|
1369
|
+
const condicaoNegada = new construtos_1.Unario(simboloAssercao.hashArquivo, simboloNao, condicao, 'ANTES');
|
|
1370
|
+
const declaracaoFalhar = new declaracoes_1.Falhar(simboloAssercao, mensagemFalha);
|
|
1371
|
+
const blocoFalha = new declaracoes_1.Bloco(simboloAssercao.hashArquivo, Number(simboloAssercao.linha), [declaracaoFalhar]);
|
|
1372
|
+
return new declaracoes_1.Se(condicaoNegada, blocoFalha);
|
|
1373
|
+
}
|
|
1329
1374
|
async logicaComumFazer() {
|
|
1330
1375
|
const caminhoFazer = await this.declaracaoBloco();
|
|
1331
1376
|
this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
@@ -2599,14 +2644,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2599
2644
|
}
|
|
2600
2645
|
/**
|
|
2601
2646
|
* Usado quando há erros na avaliação sintática.
|
|
2602
|
-
* Garante que o
|
|
2647
|
+
* Garante que o avaliador sintático não entre em _loop_ infinito.
|
|
2603
2648
|
* @returns Sempre retorna `void`.
|
|
2604
2649
|
*/
|
|
2605
2650
|
sincronizar() {
|
|
2606
2651
|
this.avancarEDevolverAnterior(); // avança além do token com erro
|
|
2607
2652
|
while (!this.estaNoFinal()) {
|
|
2608
2653
|
// Um ponto-e-vírgula já consumido indica fronteira limpa entre declarações.
|
|
2609
|
-
if (this.simbolos[this.atual
|
|
2654
|
+
if (this.simbolos[this.atual].tipo === delegua_2.default.PONTO_E_VIRGULA)
|
|
2610
2655
|
return;
|
|
2611
2656
|
// Uma palavra-chave de início de declaração ou fecha-chave à frente:
|
|
2612
2657
|
// retorna SEM consumir o token, para que o chamador o analise normalmente.
|
|
@@ -2638,6 +2683,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2638
2683
|
switch (this.simbolos[this.atual].tipo) {
|
|
2639
2684
|
case delegua_2.default.AJUDA:
|
|
2640
2685
|
return await this.declaracaoAjuda();
|
|
2686
|
+
case delegua_2.default.ASSERCAO:
|
|
2687
|
+
this.avancarEDevolverAnterior();
|
|
2688
|
+
return await this.declaracaoAssercao();
|
|
2641
2689
|
case delegua_2.default.CHAVE_ESQUERDA:
|
|
2642
2690
|
return await this.declaracaoBloco();
|
|
2643
2691
|
case delegua_2.default.COMENTARIO:
|