@designliquido/delegua 1.15.0 → 1.15.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/dialetos/analisador-semantico-pitugues.d.ts +1 -0
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +18 -0
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +13 -3
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +10 -3
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +279 -57
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/bibliotecas/dialetos/prisma/biblioteca-global.d.ts +10 -0
- package/bibliotecas/dialetos/prisma/biblioteca-global.d.ts.map +1 -0
- package/bibliotecas/dialetos/prisma/biblioteca-global.js +224 -0
- package/bibliotecas/dialetos/prisma/biblioteca-global.js.map +1 -0
- package/bin/package.json +1 -1
- package/interpretador/dialetos/index.d.ts +1 -0
- package/interpretador/dialetos/index.d.ts.map +1 -1
- package/interpretador/dialetos/index.js +1 -0
- package/interpretador/dialetos/index.js.map +1 -1
- package/interpretador/dialetos/prisma/index.d.ts +2 -0
- package/interpretador/dialetos/prisma/index.d.ts.map +1 -0
- package/interpretador/dialetos/prisma/index.js +18 -0
- package/interpretador/dialetos/prisma/index.js.map +1 -0
- package/interpretador/dialetos/prisma/interpretador-prisma.d.ts +13 -0
- package/interpretador/dialetos/prisma/interpretador-prisma.d.ts.map +1 -0
- package/interpretador/dialetos/prisma/interpretador-prisma.js +49 -0
- package/interpretador/dialetos/prisma/interpretador-prisma.js.map +1 -0
- package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
- package/lexador/dialetos/lexador-prisma.js +24 -6
- package/lexador/dialetos/lexador-prisma.js.map +1 -1
- package/lexador/dialetos/palavras-reservadas/prisma.d.ts +3 -0
- package/lexador/dialetos/palavras-reservadas/prisma.d.ts.map +1 -1
- package/lexador/dialetos/palavras-reservadas/prisma.js +3 -0
- package/lexador/dialetos/palavras-reservadas/prisma.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js +55 -4
- package/lexador/lexador.js.map +1 -1
- package/package.json +1 -1
- package/tipos-de-simbolos/prisma.d.ts +4 -0
- package/tipos-de-simbolos/prisma.d.ts.map +1 -1
- package/tipos-de-simbolos/prisma.js +4 -0
- package/tipos-de-simbolos/prisma.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.d.ts +2 -0
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +63 -0
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/umd/delegua.js +442 -71
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Chamada, Construto, FuncaoConstruto, Leia, ImportarComoConstruto } from '../../construtos';
|
|
2
|
-
import { Escreva, Se, Enquanto, Para, Continua, Retorna, Importar, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar } from '../../declaracoes';
|
|
2
|
+
import { Escreva, Escolha, ParaCada, Se, Tente, Enquanto, Para, Continua, Retorna, Importar, Var, FuncaoDeclaracao, Classe, Declaracao, Expressao, Sustar } from '../../declaracoes';
|
|
3
3
|
import { ParametroInterface, SimboloInterface } from '../../interfaces';
|
|
4
4
|
import { AvaliadorSintaticoBase } from '../avaliador-sintatico-base';
|
|
5
5
|
import { RetornoLexador } from '../../interfaces/retornos/retorno-lexador';
|
|
@@ -38,7 +38,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
|
|
|
38
38
|
avancarEDevolverAnterior(): SimboloInterface<string>;
|
|
39
39
|
verificarSeSimboloAtualEIgualA(...argumentos: string[]): boolean;
|
|
40
40
|
primario(): Promise<Construto>;
|
|
41
|
-
expressaoImportar(): ImportarComoConstruto
|
|
41
|
+
expressaoImportar(): Promise<ImportarComoConstruto>;
|
|
42
42
|
/**
|
|
43
43
|
* Construto para texto multilinhas.
|
|
44
44
|
* @returns
|
|
@@ -51,6 +51,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
|
|
|
51
51
|
exponenciacao(): Promise<Construto>;
|
|
52
52
|
multiplicar(): Promise<Construto>;
|
|
53
53
|
adicaoOuSubtracao(): Promise<Construto>;
|
|
54
|
+
concatenacao(): Promise<Construto>;
|
|
54
55
|
bitShift(): Promise<Construto>;
|
|
55
56
|
bitE(): Promise<Construto>;
|
|
56
57
|
bitOu(): Promise<Construto>;
|
|
@@ -59,6 +60,7 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
|
|
|
59
60
|
em(): Promise<Construto>;
|
|
60
61
|
e(): Promise<Construto>;
|
|
61
62
|
ou(): Promise<Construto>;
|
|
63
|
+
ternario(): Promise<Construto>;
|
|
62
64
|
atribuir(): Promise<Construto>;
|
|
63
65
|
expressao(): Promise<Construto>;
|
|
64
66
|
declaracaoEscreva(): Promise<Escreva>;
|
|
@@ -66,7 +68,9 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
|
|
|
66
68
|
protected blocoEscopo(): Promise<any[]>;
|
|
67
69
|
declaracaoDeLocal(): Promise<Var>;
|
|
68
70
|
declaracaoEnquanto(): Promise<Enquanto>;
|
|
71
|
+
declaracaoEscolha(): Promise<Escolha>;
|
|
69
72
|
declaracaoSe(): Promise<Se>;
|
|
73
|
+
declaracaoTente(): Promise<Tente>;
|
|
70
74
|
declaracaoQuebre(): Promise<Sustar>;
|
|
71
75
|
declaracaoContinua(): Continua;
|
|
72
76
|
declaracaoRetorna(): Promise<Retorna>;
|
|
@@ -85,8 +89,11 @@ export declare class AvaliadorSintaticoPrisma extends AvaliadorSintaticoBase {
|
|
|
85
89
|
* @returns O tipo inferido.
|
|
86
90
|
*/
|
|
87
91
|
protected logicaComumInferenciaTiposVariaveisEConstantes(inicializador: Construto, tipoPrevio: string): string;
|
|
88
|
-
|
|
92
|
+
declaracaoParaCada(simboloPara: SimboloInterface): Promise<ParaCada>;
|
|
93
|
+
declaracaoPara(): Promise<Para | ParaCada>;
|
|
89
94
|
resolverDeclaracaoForaDeBloco(): Promise<Declaracao | null>;
|
|
95
|
+
metodoClassePrisma(construtor: boolean): Promise<FuncaoDeclaracao>;
|
|
96
|
+
private propriedadesDeclaradasEmMetodo;
|
|
90
97
|
declaracaoDeClasse(): Promise<Classe>;
|
|
91
98
|
protected inicializarPilhaEscopos(): void;
|
|
92
99
|
analisar(retornoLexador: RetornoLexador<SimboloInterface>, hashArquivo: number): Promise<RetornoAvaliadorSintatico<Declaracao>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico-prisma.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.ts"],"names":[],"mappings":"AAEA,OAAO,EAOH,OAAO,EAEP,SAAS,EAET,eAAe,
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-prisma.d.ts","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ const browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime
|
|
|
8
8
|
const construtos_1 = require("../../construtos");
|
|
9
9
|
const declaracoes_1 = require("../../declaracoes");
|
|
10
10
|
const avaliador_sintatico_base_1 = require("../avaliador-sintatico-base");
|
|
11
|
+
const erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
|
|
11
12
|
const inferenciador_1 = require("../../inferenciador");
|
|
12
13
|
const pilha_escopos_1 = require("../pilha-escopos");
|
|
13
14
|
const informacao_escopo_1 = require("../informacao-escopo");
|
|
@@ -92,6 +93,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
92
93
|
return false;
|
|
93
94
|
}
|
|
94
95
|
async primario() {
|
|
96
|
+
var _a;
|
|
95
97
|
const simboloAtual = this.simbolos[this.atual];
|
|
96
98
|
let valores = [];
|
|
97
99
|
switch (simboloAtual.tipo) {
|
|
@@ -113,10 +115,16 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
113
115
|
}
|
|
114
116
|
let indice = 1;
|
|
115
117
|
do {
|
|
116
|
-
let chave
|
|
117
|
-
if (this.
|
|
118
|
-
|
|
119
|
-
//
|
|
118
|
+
let chave;
|
|
119
|
+
if (this.verificarTipoSimboloAtual(prisma_1.default.IDENTIFICADOR) &&
|
|
120
|
+
((_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo) === prisma_1.default.IGUAL) {
|
|
121
|
+
// Chave nomeada: {nome = "João"}
|
|
122
|
+
const chaveIdentificador = this.avancarEDevolverAnterior();
|
|
123
|
+
this.avancarEDevolverAnterior(); // consume IGUAL
|
|
124
|
+
chave = new construtos_1.Literal(this.hashArquivo, simboloAtual.linha, chaveIdentificador.lexema);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
chave = new construtos_1.Literal(this.hashArquivo, simboloAtual.linha, String(indice));
|
|
120
128
|
}
|
|
121
129
|
const valor = await this.ou();
|
|
122
130
|
chaves.push(chave);
|
|
@@ -176,8 +184,12 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
176
184
|
}
|
|
177
185
|
throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
|
|
178
186
|
}
|
|
179
|
-
expressaoImportar() {
|
|
180
|
-
|
|
187
|
+
async expressaoImportar() {
|
|
188
|
+
this.avancarEDevolverAnterior();
|
|
189
|
+
this.consumir(prisma_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
|
|
190
|
+
const caminho = await this.expressao();
|
|
191
|
+
this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
|
|
192
|
+
return new construtos_1.ImportarComoConstruto(caminho);
|
|
181
193
|
}
|
|
182
194
|
/**
|
|
183
195
|
* Construto para texto multilinhas.
|
|
@@ -245,7 +257,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
245
257
|
return expressao;
|
|
246
258
|
}
|
|
247
259
|
async unario() {
|
|
248
|
-
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.NEGACAO, prisma_1.default.SUBTRACAO, prisma_1.default.BIT_NOT)) {
|
|
260
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.NEGACAO, prisma_1.default.SUBTRACAO, prisma_1.default.BIT_NOT, prisma_1.default.NAO, prisma_1.default.COMPRIMENTO)) {
|
|
249
261
|
const operador = this.simboloAnterior();
|
|
250
262
|
const direito = await this.unario();
|
|
251
263
|
return new construtos_1.Unario(this.hashArquivo, operador, direito);
|
|
@@ -279,8 +291,17 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
279
291
|
}
|
|
280
292
|
return expressao;
|
|
281
293
|
}
|
|
282
|
-
async
|
|
294
|
+
async concatenacao() {
|
|
283
295
|
let expressao = await this.adicaoOuSubtracao();
|
|
296
|
+
while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CONCATENACAO)) {
|
|
297
|
+
const operador = this.simboloAnterior();
|
|
298
|
+
const direito = await this.adicaoOuSubtracao();
|
|
299
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
300
|
+
}
|
|
301
|
+
return expressao;
|
|
302
|
+
}
|
|
303
|
+
async bitShift() {
|
|
304
|
+
let expressao = await this.concatenacao();
|
|
284
305
|
while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.MENOR_MENOR, prisma_1.default.MAIOR_MAIOR)) {
|
|
285
306
|
const operador = this.simboloAnterior();
|
|
286
307
|
const direito = await this.adicaoOuSubtracao();
|
|
@@ -351,8 +372,19 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
351
372
|
}
|
|
352
373
|
return expressao;
|
|
353
374
|
}
|
|
375
|
+
async ternario() {
|
|
376
|
+
let expressaoOuCondicao = await this.ou();
|
|
377
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.INTERROGACAO)) {
|
|
378
|
+
const operador = this.simboloAnterior();
|
|
379
|
+
const caminhoEntao = await this.e();
|
|
380
|
+
this.consumir(prisma_1.default.OU, "Esperado palavra reservada 'ou' após caminho positivo em operador ternário.");
|
|
381
|
+
const caminhoSenao = await this.ternario();
|
|
382
|
+
expressaoOuCondicao = new construtos_1.SeTernario(this.hashArquivo, expressaoOuCondicao, caminhoEntao, operador, caminhoSenao);
|
|
383
|
+
}
|
|
384
|
+
return expressaoOuCondicao;
|
|
385
|
+
}
|
|
354
386
|
async atribuir() {
|
|
355
|
-
const expressao = await this.
|
|
387
|
+
const expressao = await this.ternario();
|
|
356
388
|
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.IGUAL) ||
|
|
357
389
|
this.verificarSeSimboloAtualEIgualA(prisma_1.default.MAIS_IGUAL)) {
|
|
358
390
|
const igual = this.simboloAnterior();
|
|
@@ -404,7 +436,7 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
404
436
|
}
|
|
405
437
|
this.consumir(prisma_1.default.FIM, "Esperado 'fim' após o bloco.");
|
|
406
438
|
this.pilhaEscopos.removerUltimo();
|
|
407
|
-
return declaracoes;
|
|
439
|
+
return declaracoes.filter((d) => d);
|
|
408
440
|
}
|
|
409
441
|
async declaracaoDeLocal() {
|
|
410
442
|
const identificador = this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
|
|
@@ -429,6 +461,65 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
429
461
|
this.blocos -= 1;
|
|
430
462
|
}
|
|
431
463
|
}
|
|
464
|
+
async declaracaoEscolha() {
|
|
465
|
+
try {
|
|
466
|
+
this.blocos += 1;
|
|
467
|
+
const condicao = await this.expressao();
|
|
468
|
+
const caminhos = [];
|
|
469
|
+
let caminhoPadrao = null;
|
|
470
|
+
while (!this.verificarTipoSimboloAtual(prisma_1.default.FIM) && !this.estaNoFinal()) {
|
|
471
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CASO)) {
|
|
472
|
+
const caminhoCondicoes = [await this.expressao()];
|
|
473
|
+
while (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CASO)) {
|
|
474
|
+
caminhoCondicoes.push(await this.expressao());
|
|
475
|
+
}
|
|
476
|
+
this.consumir(prisma_1.default.ENTAO, "Esperado palavra reservada 'entao' ou 'então' após valor do 'caso'.");
|
|
477
|
+
const declaracoes = [];
|
|
478
|
+
while (!this.estaNoFinal() &&
|
|
479
|
+
![
|
|
480
|
+
prisma_1.default.CASO,
|
|
481
|
+
prisma_1.default.PADRAO,
|
|
482
|
+
prisma_1.default.FIM,
|
|
483
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
484
|
+
declaracoes.push(await this.resolverDeclaracaoForaDeBloco());
|
|
485
|
+
}
|
|
486
|
+
caminhos.push({
|
|
487
|
+
condicoes: caminhoCondicoes,
|
|
488
|
+
declaracoes: declaracoes.filter((d) => d),
|
|
489
|
+
});
|
|
490
|
+
}
|
|
491
|
+
else if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.PADRAO)) {
|
|
492
|
+
if (caminhoPadrao !== null) {
|
|
493
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simbolos[this.atual], "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
|
|
494
|
+
this.erros.push(excecao);
|
|
495
|
+
throw excecao;
|
|
496
|
+
}
|
|
497
|
+
this.consumir(prisma_1.default.ENTAO, "Esperado palavra reservada 'entao' ou 'então' após declaração do 'padrao'.");
|
|
498
|
+
const declaracoes = [];
|
|
499
|
+
while (!this.estaNoFinal() &&
|
|
500
|
+
![
|
|
501
|
+
prisma_1.default.CASO,
|
|
502
|
+
prisma_1.default.PADRAO,
|
|
503
|
+
prisma_1.default.FIM,
|
|
504
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
505
|
+
declaracoes.push(await this.resolverDeclaracaoForaDeBloco());
|
|
506
|
+
}
|
|
507
|
+
caminhoPadrao = {
|
|
508
|
+
condicoes: [],
|
|
509
|
+
declaracoes: declaracoes.filter((d) => d),
|
|
510
|
+
};
|
|
511
|
+
}
|
|
512
|
+
else {
|
|
513
|
+
throw this.erro(this.simbolos[this.atual], "Esperado 'caso', 'padrao' ou 'fim' em declaração 'escolha'.");
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'escolha'.");
|
|
517
|
+
return new declaracoes_1.Escolha(condicao, caminhos, caminhoPadrao);
|
|
518
|
+
}
|
|
519
|
+
finally {
|
|
520
|
+
this.blocos -= 1;
|
|
521
|
+
}
|
|
522
|
+
}
|
|
432
523
|
async declaracaoSe() {
|
|
433
524
|
const simboloSe = this.simbolos[this.atual];
|
|
434
525
|
const condicao = await this.expressao();
|
|
@@ -439,17 +530,57 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
439
530
|
} while (!this.estaNoFinal() &&
|
|
440
531
|
![prisma_1.default.SENAO, prisma_1.default.SENÃO, prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo));
|
|
441
532
|
let caminhoSenao = null;
|
|
533
|
+
let fimConsumidoNoCaminhoSenao = false;
|
|
442
534
|
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.SENAO, prisma_1.default.SENÃO)) {
|
|
443
535
|
const simboloSenao = this.simbolos[this.atual - 1];
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
}
|
|
448
|
-
|
|
536
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.SE)) {
|
|
537
|
+
caminhoSenao = await this.declaracaoSe();
|
|
538
|
+
fimConsumidoNoCaminhoSenao = true;
|
|
539
|
+
}
|
|
540
|
+
else {
|
|
541
|
+
const declaracoesSenao = [];
|
|
542
|
+
do {
|
|
543
|
+
declaracoesSenao.push(await this.resolverDeclaracaoForaDeBloco());
|
|
544
|
+
} while (![prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo));
|
|
545
|
+
caminhoSenao = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloSenao.linha), declaracoesSenao.filter((d) => d));
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
if (!fimConsumidoNoCaminhoSenao) {
|
|
549
|
+
this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'se'.");
|
|
449
550
|
}
|
|
450
|
-
this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fimse' para fechamento de declaração 'se'.");
|
|
451
551
|
return new declaracoes_1.Se(condicao, new declaracoes_1.Bloco(this.hashArquivo, Number(simboloSe.linha), declaracoes.filter((d) => d)), [], caminhoSenao);
|
|
452
552
|
}
|
|
553
|
+
async declaracaoTente() {
|
|
554
|
+
const simboloTente = this.simboloAnterior();
|
|
555
|
+
const blocoTente = [];
|
|
556
|
+
while (!this.estaNoFinal() &&
|
|
557
|
+
![
|
|
558
|
+
prisma_1.default.PEGUE,
|
|
559
|
+
prisma_1.default.FINALMENTE,
|
|
560
|
+
prisma_1.default.FIM,
|
|
561
|
+
].includes(this.simbolos[this.atual].tipo)) {
|
|
562
|
+
blocoTente.push(await this.resolverDeclaracaoForaDeBloco());
|
|
563
|
+
}
|
|
564
|
+
let blocoPegue = null;
|
|
565
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.PEGUE)) {
|
|
566
|
+
const declaracoesPegue = [];
|
|
567
|
+
while (!this.estaNoFinal() &&
|
|
568
|
+
![prisma_1.default.FINALMENTE, prisma_1.default.FIM].includes(this.simbolos[this.atual].tipo)) {
|
|
569
|
+
declaracoesPegue.push(await this.resolverDeclaracaoForaDeBloco());
|
|
570
|
+
}
|
|
571
|
+
blocoPegue = declaracoesPegue.filter((d) => d);
|
|
572
|
+
}
|
|
573
|
+
let blocoFinalmente = null;
|
|
574
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.FINALMENTE)) {
|
|
575
|
+
const declaracoesFinalmente = [];
|
|
576
|
+
while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.FIM)) {
|
|
577
|
+
declaracoesFinalmente.push(await this.resolverDeclaracaoForaDeBloco());
|
|
578
|
+
}
|
|
579
|
+
blocoFinalmente = declaracoesFinalmente.filter((d) => d);
|
|
580
|
+
}
|
|
581
|
+
this.consumir(prisma_1.default.FIM, "Esperado palavra-chave 'fim' para fechamento de declaração 'tente'.");
|
|
582
|
+
return new declaracoes_1.Tente(simboloTente.hashArquivo, Number(simboloTente.linha), blocoTente.filter((d) => d), blocoPegue, null, blocoFinalmente);
|
|
583
|
+
}
|
|
453
584
|
async declaracaoQuebre() {
|
|
454
585
|
if (this.blocos < 1) {
|
|
455
586
|
throw this.erro(this.simboloAnterior(), "'quebre' deve estar dentro de um laço de repetição.");
|
|
@@ -533,11 +664,15 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
533
664
|
return null;
|
|
534
665
|
case prisma_1.default.ENTAO:
|
|
535
666
|
case prisma_1.default.INICIO:
|
|
667
|
+
case prisma_1.default.FAZER:
|
|
536
668
|
const simboloInicioBloco = this.avancarEDevolverAnterior();
|
|
537
669
|
return new declaracoes_1.Bloco(simboloInicioBloco.hashArquivo, Number(simboloInicioBloco.linha), await this.blocoEscopo());
|
|
538
670
|
case prisma_1.default.ENQUANTO:
|
|
539
671
|
this.avancarEDevolverAnterior();
|
|
540
672
|
return await this.declaracaoEnquanto();
|
|
673
|
+
case prisma_1.default.ESCOLHA:
|
|
674
|
+
this.avancarEDevolverAnterior();
|
|
675
|
+
return await this.declaracaoEscolha();
|
|
541
676
|
case prisma_1.default.IDENTIFICADOR:
|
|
542
677
|
const proximoSimbolo = this.simbolos[this.atual + 1];
|
|
543
678
|
if (proximoSimbolo && proximoSimbolo.tipo === prisma_1.default.IGUAL) {
|
|
@@ -559,6 +694,9 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
559
694
|
case prisma_1.default.RETORNE:
|
|
560
695
|
this.avancarEDevolverAnterior();
|
|
561
696
|
return await this.declaracaoRetorna();
|
|
697
|
+
case prisma_1.default.TENTE:
|
|
698
|
+
this.avancarEDevolverAnterior();
|
|
699
|
+
return await this.declaracaoTente();
|
|
562
700
|
case prisma_1.default.LOCAL:
|
|
563
701
|
this.avancarEDevolverAnterior();
|
|
564
702
|
return await this.declaracaoDeLocal();
|
|
@@ -601,20 +739,40 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
601
739
|
console.log(inicializador.constructor.name);
|
|
602
740
|
}
|
|
603
741
|
}
|
|
742
|
+
async declaracaoParaCada(simboloPara) {
|
|
743
|
+
const variavelIteracao = this.consumir(prisma_1.default.IDENTIFICADOR, "Esperado identificador de variável após 'para cada'.");
|
|
744
|
+
this.consumir(prisma_1.default.EM, "Esperado palavra reservada 'em' após variável de iteração.");
|
|
745
|
+
const vetorOuDicionario = await this.expressao();
|
|
746
|
+
this.consumir(prisma_1.default.INICIO, `espera-se 'inicio' proximo a '${this.simbolos[this.atual].lexema}'.`);
|
|
747
|
+
this.pilhaEscopos.definirInformacoesVariavel(variavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelIteracao.lexema, 'qualquer'));
|
|
748
|
+
const declaracoesBlocoParaCada = [];
|
|
749
|
+
while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.FIM)) {
|
|
750
|
+
declaracoesBlocoParaCada.push(await this.resolverDeclaracaoForaDeBloco());
|
|
751
|
+
}
|
|
752
|
+
this.consumir(prisma_1.default.FIM, "Esperado 'fim' após bloco do para cada.");
|
|
753
|
+
const corpo = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloPara.linha) + 1, declaracoesBlocoParaCada.filter((d) => d));
|
|
754
|
+
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'qualquer'), vetorOuDicionario, corpo);
|
|
755
|
+
}
|
|
604
756
|
async declaracaoPara() {
|
|
605
757
|
try {
|
|
606
758
|
this.blocos += 1;
|
|
607
759
|
const simboloPara = this.avancarEDevolverAnterior();
|
|
760
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CADA)) {
|
|
761
|
+
return await this.declaracaoParaCada(simboloPara);
|
|
762
|
+
}
|
|
608
763
|
const variavelIteracao = this.consumir(prisma_1.default.IDENTIFICADOR, "Esperado identificador de variável após 'para'.");
|
|
609
764
|
this.consumir(prisma_1.default.IGUAL, `'=' or 'em' esperado próximo a '${this.simbolos[this.atual].lexema}'.`);
|
|
610
765
|
const literalOuVariavelInicio = await this.adicaoOuSubtracao();
|
|
611
766
|
this.consumir(prisma_1.default.VIRGULA, `Espera-se '=' próximo a '${this.simbolos[this.atual].lexema}'.`);
|
|
612
767
|
const literalOuVariavelFim = await this.adicaoOuSubtracao();
|
|
613
768
|
let operadorCondicao = new lexador_1.Simbolo(prisma_1.default.MENOR_IGUAL, '<=', null, Number(simboloPara.linha), this.hashArquivo);
|
|
614
|
-
let operadorCondicaoIncremento = new lexador_1.Simbolo(prisma_1.default.MENOR, '<', null, Number(simboloPara.linha), this.hashArquivo);
|
|
615
769
|
let passo = new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), 1);
|
|
616
|
-
|
|
617
|
-
|
|
770
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.VIRGULA)) {
|
|
771
|
+
passo = await this.adicaoOuSubtracao();
|
|
772
|
+
}
|
|
773
|
+
if (!this.verificarSeSimboloAtualEIgualA(prisma_1.default.INICIO, prisma_1.default.FAZER)) {
|
|
774
|
+
throw this.erro(this.simbolos[this.atual], `espera-se 'inicio' ou 'fazer' proximo a '${this.simbolos[this.atual].lexema}'.`);
|
|
775
|
+
}
|
|
618
776
|
// Aqui já é seguro inicializar a variável.
|
|
619
777
|
this.pilhaEscopos.definirInformacoesVariavel(variavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelIteracao.lexema, 'inteiro'));
|
|
620
778
|
const declaracoesBlocoPara = [];
|
|
@@ -626,14 +784,12 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
626
784
|
this.avancarEDevolverAnterior(); // fim
|
|
627
785
|
const corpo = new declaracoes_1.Bloco(this.hashArquivo, Number(simboloPara.linha) + 1, declaracoesBlocoPara.filter((d) => d));
|
|
628
786
|
const para = new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha),
|
|
629
|
-
// Inicialização.
|
|
630
|
-
new declaracoes_1.
|
|
787
|
+
// Inicialização: declara a variável de iteração.
|
|
788
|
+
new declaracoes_1.Var(variavelIteracao, literalOuVariavelInicio, 'inteiro'),
|
|
631
789
|
// Condição.
|
|
632
790
|
new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), operadorCondicao, literalOuVariavelFim),
|
|
633
|
-
// Incremento
|
|
634
|
-
new construtos_1.
|
|
635
|
-
para.blocoPosExecucao = corpo;
|
|
636
|
-
para.resolverIncrementoEmExecucao = resolverIncrementoEmExecucao;
|
|
791
|
+
// Incremento simples.
|
|
792
|
+
new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, variavelIteracao, 'inteiro'), new lexador_1.Simbolo(prisma_1.default.ADICAO, '+', null, Number(simboloPara.linha), this.hashArquivo), passo)), corpo);
|
|
637
793
|
return para;
|
|
638
794
|
}
|
|
639
795
|
finally {
|
|
@@ -658,6 +814,48 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
658
814
|
return null;
|
|
659
815
|
}
|
|
660
816
|
}
|
|
817
|
+
async metodoClassePrisma(construtor) {
|
|
818
|
+
const simbolo = construtor
|
|
819
|
+
? new lexador_1.Simbolo(prisma_1.default.CONSTRUTOR, 'construtor', null, Number(this.simboloAnterior().linha), this.hashArquivo)
|
|
820
|
+
: this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome do método.');
|
|
821
|
+
this.consumir(prisma_1.default.PARENTESE_ESQUERDO, "Esperado '(' após nome do método.");
|
|
822
|
+
let parametros = [];
|
|
823
|
+
if (!this.verificarTipoSimboloAtual(prisma_1.default.PARENTESE_DIREITO)) {
|
|
824
|
+
parametros = await this.logicaComumParametros();
|
|
825
|
+
}
|
|
826
|
+
this.consumir(prisma_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
827
|
+
this.consumir(prisma_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo do método.");
|
|
828
|
+
const declaracoesCorpo = [];
|
|
829
|
+
while (!this.estaNoFinal() && !this.verificarTipoSimboloAtual(prisma_1.default.CHAVE_DIREITA)) {
|
|
830
|
+
declaracoesCorpo.push(await this.resolverDeclaracaoForaDeBloco());
|
|
831
|
+
}
|
|
832
|
+
this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após o corpo do método.");
|
|
833
|
+
const corpoDaFuncao = new construtos_1.FuncaoConstruto(this.hashArquivo, Number(simbolo.linha), parametros, declaracoesCorpo.filter((d) => d), 'qualquer', false);
|
|
834
|
+
const tipoDaFuncao = `função<${corpoDaFuncao.tipo}>`;
|
|
835
|
+
return new declaracoes_1.FuncaoDeclaracao(simbolo, corpoDaFuncao, tipoDaFuncao);
|
|
836
|
+
}
|
|
837
|
+
propriedadesDeclaradasEmMetodo(metodo) {
|
|
838
|
+
const propriedades = [];
|
|
839
|
+
const nomesPropriedades = new Set();
|
|
840
|
+
for (const declaracao of metodo.funcao.corpo) {
|
|
841
|
+
if (!(declaracao instanceof declaracoes_1.Expressao)) {
|
|
842
|
+
continue;
|
|
843
|
+
}
|
|
844
|
+
if (!(declaracao.expressao instanceof construtos_1.DefinirValor)) {
|
|
845
|
+
continue;
|
|
846
|
+
}
|
|
847
|
+
if (!(declaracao.expressao.objeto instanceof construtos_1.Isto)) {
|
|
848
|
+
continue;
|
|
849
|
+
}
|
|
850
|
+
const nomePropriedade = declaracao.expressao.nome.lexema;
|
|
851
|
+
if (nomesPropriedades.has(nomePropriedade)) {
|
|
852
|
+
continue;
|
|
853
|
+
}
|
|
854
|
+
nomesPropriedades.add(nomePropriedade);
|
|
855
|
+
propriedades.push(new declaracoes_1.PropriedadeClasse(declaracao.expressao.nome, 'qualquer'));
|
|
856
|
+
}
|
|
857
|
+
return propriedades;
|
|
858
|
+
}
|
|
661
859
|
async declaracaoDeClasse() {
|
|
662
860
|
const simbolo = this.consumir(prisma_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
|
|
663
861
|
let superClasse = null;
|
|
@@ -673,47 +871,71 @@ class AvaliadorSintaticoPrisma extends avaliador_sintatico_base_1.AvaliadorSinta
|
|
|
673
871
|
(this.verificarTipoSimboloAtual(prisma_1.default.CONSTRUTOR) ||
|
|
674
872
|
this.verificarTipoSimboloAtual(prisma_1.default.FUNCAO) ||
|
|
675
873
|
this.verificarTipoSimboloAtual(prisma_1.default.FUNÇÃO))) {
|
|
676
|
-
|
|
677
|
-
|
|
874
|
+
if (this.verificarSeSimboloAtualEIgualA(prisma_1.default.CONSTRUTOR)) {
|
|
875
|
+
metodos.push(await this.metodoClassePrisma(true));
|
|
876
|
+
continue;
|
|
877
|
+
}
|
|
878
|
+
this.verificarSeSimboloAtualEIgualA(prisma_1.default.FUNCAO, prisma_1.default.FUNÇÃO);
|
|
879
|
+
metodos.push(await this.metodoClassePrisma(false));
|
|
678
880
|
}
|
|
679
881
|
this.consumir(prisma_1.default.CHAVE_DIREITA, "Esperado '}' após métodos da classe.");
|
|
882
|
+
const propriedades = [];
|
|
883
|
+
const nomesPropriedades = new Set();
|
|
884
|
+
for (const metodo of metodos) {
|
|
885
|
+
const propriedadesDoMetodo = this.propriedadesDeclaradasEmMetodo(metodo);
|
|
886
|
+
for (const propriedade of propriedadesDoMetodo) {
|
|
887
|
+
if (nomesPropriedades.has(propriedade.nome.lexema)) {
|
|
888
|
+
continue;
|
|
889
|
+
}
|
|
890
|
+
nomesPropriedades.add(propriedade.nome.lexema);
|
|
891
|
+
propriedades.push(propriedade);
|
|
892
|
+
}
|
|
893
|
+
}
|
|
680
894
|
this.superclasseAtual = undefined;
|
|
681
|
-
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos);
|
|
895
|
+
const definicaoClasse = new declaracoes_1.Classe(simbolo, superClasse ? [superClasse] : [], metodos, propriedades);
|
|
682
896
|
this.tiposDefinidosEmCodigo[definicaoClasse.simbolo.lexema] = definicaoClasse;
|
|
683
897
|
return definicaoClasse;
|
|
684
898
|
}
|
|
685
899
|
inicializarPilhaEscopos() {
|
|
686
900
|
this.pilhaEscopos = new pilha_escopos_1.PilhaEscopos();
|
|
687
901
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
688
|
-
//
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
new InformacaoElementoSintatico('
|
|
692
|
-
);
|
|
693
|
-
this.pilhaEscopos.definirInformacoesVariavel(
|
|
694
|
-
'
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
);
|
|
699
|
-
this.pilhaEscopos.definirInformacoesVariavel(
|
|
700
|
-
'
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
);
|
|
705
|
-
this.pilhaEscopos.definirInformacoesVariavel(
|
|
706
|
-
'
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
);
|
|
711
|
-
this.pilhaEscopos.definirInformacoesVariavel(
|
|
712
|
-
|
|
713
|
-
new InformacaoElementoSintatico('
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
902
|
+
// Registrar funções nativas (built-ins) do Prisma no escopo do parser
|
|
903
|
+
// para evitar erros de variável não definida durante análise semântica
|
|
904
|
+
this.pilhaEscopos.definirInformacoesVariavel('tipo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tipo', 'função', true, [
|
|
905
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
906
|
+
]));
|
|
907
|
+
this.pilhaEscopos.definirInformacoesVariavel('poe', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('poe', 'função', true, [
|
|
908
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valores', 'qualquer'),
|
|
909
|
+
]));
|
|
910
|
+
this.pilhaEscopos.definirInformacoesVariavel('tamanho', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tamanho', 'número', true, [
|
|
911
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('objeto', 'qualquer'),
|
|
912
|
+
]));
|
|
913
|
+
this.pilhaEscopos.definirInformacoesVariavel('pares', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('pares', 'tabela', true, [
|
|
914
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tabela', 'tabela'),
|
|
915
|
+
]));
|
|
916
|
+
this.pilhaEscopos.definirInformacoesVariavel('ipares', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('ipares', 'tabela', true, [
|
|
917
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tabela', 'tabela'),
|
|
918
|
+
]));
|
|
919
|
+
this.pilhaEscopos.definirInformacoesVariavel('convnumero', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('convnumero', 'número', true, [
|
|
920
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
921
|
+
]));
|
|
922
|
+
this.pilhaEscopos.definirInformacoesVariavel('convstring', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('convstring', 'texto', true, [
|
|
923
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valor', 'qualquer'),
|
|
924
|
+
]));
|
|
925
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatorio', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio', 'função', true, []));
|
|
926
|
+
this.pilhaEscopos.definirInformacoesVariavel('aleatorio_entre', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('aleatorio_entre', 'número', true, [
|
|
927
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('minimo', 'número'),
|
|
928
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('maximo', 'número'),
|
|
929
|
+
]));
|
|
930
|
+
this.pilhaEscopos.definirInformacoesVariavel('coletelixo', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('coletelixo', 'número', true, [
|
|
931
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('acao', 'texto'),
|
|
932
|
+
]));
|
|
933
|
+
this.pilhaEscopos.definirInformacoesVariavel('piso', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('piso', 'número', true, [
|
|
934
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('n', 'número'),
|
|
935
|
+
]));
|
|
936
|
+
this.pilhaEscopos.definirInformacoesVariavel('teto', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('teto', 'número', true, [
|
|
937
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('n', 'número'),
|
|
938
|
+
]));
|
|
717
939
|
}
|
|
718
940
|
async analisar(retornoLexador, hashArquivo) {
|
|
719
941
|
const inicioAnalise = (0, browser_process_hrtime_1.default)();
|