@designliquido/delegua 0.9.3 → 0.9.5
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/README.md +25 -3
- package/bin/delegua +1 -1
- package/bin/delegua.cmd +1 -1
- package/bin/package.json +7 -5
- package/coverage/lcov-report/sorter.js +4 -4
- package/coverage/lcov-report/sorter.js.map +1 -1
- package/execucao.d.ts +1 -0
- package/execucao.js +29 -0
- package/execucao.js.map +1 -0
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +108 -105
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.js +226 -232
- package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +35 -55
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +211 -216
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js +231 -237
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +3 -0
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +188 -121
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
- package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +6 -24
- package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
- package/fontes/bibliotecas/biblioteca-global.js +206 -367
- package/fontes/bibliotecas/biblioteca-global.js.map +1 -1
- package/fontes/bibliotecas/importar-biblioteca.js +28 -29
- package/fontes/bibliotecas/importar-biblioteca.js.map +1 -1
- package/fontes/bibliotecas/primitivas-texto.js +9 -22
- package/fontes/bibliotecas/primitivas-texto.js.map +1 -1
- package/fontes/bibliotecas/primitivas-vetor.js +12 -14
- package/fontes/bibliotecas/primitivas-vetor.js.map +1 -1
- package/fontes/construtos/acesso-indice-variavel.js +6 -50
- package/fontes/construtos/acesso-indice-variavel.js.map +1 -1
- package/fontes/construtos/acesso-metodo.js +6 -50
- package/fontes/construtos/acesso-metodo.js.map +1 -1
- package/fontes/construtos/agrupamento.js +6 -50
- package/fontes/construtos/agrupamento.js.map +1 -1
- package/fontes/construtos/atribuicao-sobrescrita.js +6 -50
- package/fontes/construtos/atribuicao-sobrescrita.js.map +1 -1
- package/fontes/construtos/atribuir.js +6 -50
- package/fontes/construtos/atribuir.js.map +1 -1
- package/fontes/construtos/binario.js +6 -50
- package/fontes/construtos/binario.js.map +1 -1
- package/fontes/construtos/chamada.js +6 -50
- package/fontes/construtos/chamada.js.map +1 -1
- package/fontes/construtos/definir-valor.js +6 -50
- package/fontes/construtos/definir-valor.js.map +1 -1
- package/fontes/construtos/dicionario.js +6 -50
- package/fontes/construtos/dicionario.js.map +1 -1
- package/fontes/construtos/funcao.d.ts +2 -2
- package/fontes/construtos/funcao.js +6 -47
- package/fontes/construtos/funcao.js.map +1 -1
- package/fontes/construtos/isto.js +6 -47
- package/fontes/construtos/isto.js.map +1 -1
- package/fontes/construtos/literal.js +6 -47
- package/fontes/construtos/literal.js.map +1 -1
- package/fontes/construtos/logico.js +6 -50
- package/fontes/construtos/logico.js.map +1 -1
- package/fontes/construtos/super.js +6 -47
- package/fontes/construtos/super.js.map +1 -1
- package/fontes/construtos/unario.js +6 -50
- package/fontes/construtos/unario.js.map +1 -1
- package/fontes/construtos/variavel.js +6 -47
- package/fontes/construtos/variavel.js.map +1 -1
- package/fontes/construtos/vetor.js +6 -50
- package/fontes/construtos/vetor.js.map +1 -1
- package/fontes/declaracoes/bloco.js +9 -70
- package/fontes/declaracoes/bloco.js.map +1 -1
- package/fontes/declaracoes/classe.js +11 -72
- package/fontes/declaracoes/classe.js.map +1 -1
- package/fontes/declaracoes/continua.js +8 -65
- package/fontes/declaracoes/continua.js.map +1 -1
- package/fontes/declaracoes/declaracao.js +6 -47
- package/fontes/declaracoes/declaracao.js.map +1 -1
- package/fontes/declaracoes/enquanto.js +10 -71
- package/fontes/declaracoes/enquanto.js.map +1 -1
- package/fontes/declaracoes/escolha.js +11 -72
- package/fontes/declaracoes/escolha.js.map +1 -1
- package/fontes/declaracoes/escreva.js +9 -70
- package/fontes/declaracoes/escreva.js.map +1 -1
- package/fontes/declaracoes/expressao.js +9 -70
- package/fontes/declaracoes/expressao.js.map +1 -1
- package/fontes/declaracoes/fazer.js +10 -71
- package/fontes/declaracoes/fazer.js.map +1 -1
- package/fontes/declaracoes/funcao.js +10 -68
- package/fontes/declaracoes/funcao.js.map +1 -1
- package/fontes/declaracoes/importar.js +10 -71
- package/fontes/declaracoes/importar.js.map +1 -1
- package/fontes/declaracoes/leia.js +9 -70
- package/fontes/declaracoes/leia.js.map +1 -1
- package/fontes/declaracoes/para.js +12 -73
- package/fontes/declaracoes/para.js.map +1 -1
- package/fontes/declaracoes/retorna.js +10 -71
- package/fontes/declaracoes/retorna.js.map +1 -1
- package/fontes/declaracoes/se.js +12 -73
- package/fontes/declaracoes/se.js.map +1 -1
- package/fontes/declaracoes/sustar.js +8 -65
- package/fontes/declaracoes/sustar.js.map +1 -1
- package/fontes/declaracoes/tente.js +12 -73
- package/fontes/declaracoes/tente.js.map +1 -1
- package/fontes/declaracoes/var.js +10 -71
- package/fontes/declaracoes/var.js.map +1 -1
- package/fontes/delegua.js +117 -200
- package/fontes/delegua.js.map +1 -1
- package/fontes/depuracao/cyrb53.js +3 -4
- package/fontes/depuracao/cyrb53.js.map +1 -1
- package/fontes/depuracao/servidor-depuracao.js +125 -209
- package/fontes/depuracao/servidor-depuracao.js.map +1 -1
- package/fontes/espaco-variaveis.js +3 -4
- package/fontes/espaco-variaveis.js.map +1 -1
- package/fontes/estruturas/chamavel.js +6 -9
- package/fontes/estruturas/chamavel.js.map +1 -1
- package/fontes/estruturas/classe-padrao.js +17 -35
- package/fontes/estruturas/classe-padrao.js.map +1 -1
- package/fontes/estruturas/delegua-classe.d.ts +2 -2
- package/fontes/estruturas/delegua-classe.js +21 -39
- package/fontes/estruturas/delegua-classe.js.map +1 -1
- package/fontes/estruturas/delegua-funcao.js +48 -114
- package/fontes/estruturas/delegua-funcao.js.map +1 -1
- package/fontes/estruturas/funcao-padrao.js +13 -75
- package/fontes/estruturas/funcao-padrao.js.map +1 -1
- package/fontes/estruturas/metodo-primitiva.js +11 -39
- package/fontes/estruturas/metodo-primitiva.js.map +1 -1
- package/fontes/estruturas/modulo.js +6 -7
- package/fontes/estruturas/modulo.js.map +1 -1
- package/fontes/estruturas/objeto-delegua-classe.d.ts +3 -3
- package/fontes/estruturas/objeto-delegua-classe.js +12 -13
- package/fontes/estruturas/objeto-delegua-classe.js.map +1 -1
- package/fontes/estruturas/objeto-padrao.js +9 -11
- package/fontes/estruturas/objeto-padrao.js.map +1 -1
- package/fontes/excecoes/erro-em-tempo-de-execucao.js +8 -26
- package/fontes/excecoes/erro-em-tempo-de-execucao.js.map +1 -1
- package/fontes/importador/importador.js +21 -22
- package/fontes/importador/importador.js.map +1 -1
- package/fontes/interfaces/parametro-interface.d.ts +1 -1
- package/fontes/interpretador/dialetos/egua-classico.js +592 -1019
- package/fontes/interpretador/dialetos/egua-classico.js.map +1 -1
- package/fontes/interpretador/inferenciador.js +1 -1
- package/fontes/interpretador/inferenciador.js.map +1 -1
- package/fontes/interpretador/interpretador-com-depuracao.js +186 -336
- package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
- package/fontes/interpretador/interpretador.js +706 -1175
- package/fontes/interpretador/interpretador.js.map +1 -1
- package/fontes/interpretador/pilha-escopos-execucao.js +52 -57
- package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-birl.d.ts +1 -0
- package/fontes/lexador/dialetos/lexador-birl.js +55 -64
- package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-egua-classico.js +43 -46
- package/fontes/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-eguap.js +59 -63
- package/fontes/lexador/dialetos/lexador-eguap.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-visualg.js +45 -54
- package/fontes/lexador/dialetos/lexador-visualg.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/birl.js +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/birl.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/visualg.d.ts +24 -0
- package/fontes/lexador/dialetos/palavras-reservadas/visualg.js +25 -1
- package/fontes/lexador/dialetos/palavras-reservadas/visualg.js.map +1 -1
- package/fontes/lexador/lexador-base-linha-unica.js +28 -29
- package/fontes/lexador/lexador-base-linha-unica.js.map +1 -1
- package/fontes/lexador/lexador.js +53 -57
- package/fontes/lexador/lexador.js.map +1 -1
- package/fontes/lexador/palavras-reservadas.js +1 -1
- package/fontes/lexador/palavras-reservadas.js.map +1 -1
- package/fontes/lexador/simbolo.js +5 -6
- package/fontes/lexador/simbolo.js.map +1 -1
- package/fontes/quebras/index.js +11 -42
- package/fontes/quebras/index.js.map +1 -1
- package/fontes/resolvedor/dialetos/egua-classico.js +143 -144
- package/fontes/resolvedor/dialetos/egua-classico.js.map +1 -1
- package/fontes/resolvedor/erro-resolvedor.js +6 -24
- package/fontes/resolvedor/erro-resolvedor.js.map +1 -1
- package/fontes/resolvedor/pilha-escopos.js +11 -12
- package/fontes/resolvedor/pilha-escopos.js.map +1 -1
- package/fontes/tipos-de-simbolos/birl.d.ts +1 -0
- package/fontes/tipos-de-simbolos/birl.js +1 -0
- package/fontes/tipos-de-simbolos/birl.js.map +1 -1
- package/fontes/tipos-de-simbolos/comum.d.ts +2 -0
- package/fontes/tipos-de-simbolos/comum.js +2 -0
- package/fontes/tipos-de-simbolos/comum.js.map +1 -1
- package/fontes/tipos-de-simbolos/visualg.d.ts +9 -0
- package/fontes/tipos-de-simbolos/visualg.js +9 -0
- package/fontes/tipos-de-simbolos/visualg.js.map +1 -1
- package/index.d.ts +4 -0
- package/index.js +4 -26
- package/index.js.map +1 -1
- package/jest.config.js +9 -47
- package/jest.config.js.map +1 -1
- package/package.json +7 -5
- package/testes/__mocks__/estatistica.js +1 -1
- package/testes/__mocks__/estatistica.js.map +1 -1
- package/testes/__mocks__/fisica.js +1 -1
- package/testes/__mocks__/fisica.js.map +1 -1
- package/testes/__mocks__/matematica.js +1 -1
- package/testes/__mocks__/matematica.js.map +1 -1
- package/testes/avaliador-sintatico.test.js +27 -27
- package/testes/avaliador-sintatico.test.js.map +1 -1
- package/testes/biblioteca-global.test.js +197 -440
- package/testes/biblioteca-global.test.js.map +1 -1
- package/testes/birl/avaliador-sintatico.test.js +8 -8
- package/testes/birl/avaliador-sintatico.test.js.map +1 -1
- package/testes/birl/lexador.test.js +10 -10
- package/testes/birl/lexador.test.js.map +1 -1
- package/testes/delegua.test.js +7 -7
- package/testes/delegua.test.js.map +1 -1
- package/testes/egua-classico/avaliador-sintatico.test.js +14 -14
- package/testes/egua-classico/avaliador-sintatico.test.js.map +1 -1
- package/testes/egua-classico/delegua.test.js +5 -5
- package/testes/egua-classico/delegua.test.js.map +1 -1
- package/testes/egua-classico/interpretador.test.js +180 -396
- package/testes/egua-classico/interpretador.test.js.map +1 -1
- package/testes/egua-classico/lexador.test.js +23 -23
- package/testes/egua-classico/lexador.test.js.map +1 -1
- package/testes/egua-classico/resolvedor.test.js +12 -12
- package/testes/egua-classico/resolvedor.test.js.map +1 -1
- package/testes/eguap/avaliador-sintatico.test.js +11 -11
- package/testes/eguap/avaliador-sintatico.test.js.map +1 -1
- package/testes/eguap/interpretador.test.js +189 -405
- package/testes/eguap/interpretador.test.js.map +1 -1
- package/testes/eguap/lexador.test.js +18 -18
- package/testes/eguap/lexador.test.js.map +1 -1
- package/testes/interpretador.test.js +431 -908
- package/testes/interpretador.test.js.map +1 -1
- package/testes/lexador.test.js +42 -42
- package/testes/lexador.test.js.map +1 -1
- package/testes/visualg/avaliador-sintatico.test.js +23 -23
- package/testes/visualg/avaliador-sintatico.test.js.map +1 -1
- package/testes/visualg/interpretador.test.js +16 -61
- package/testes/visualg/interpretador.test.js.map +1 -1
- package/testes/visualg/lexador.test.js +15 -15
- package/testes/visualg/lexador.test.js.map +1 -1
|
@@ -4,24 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AvaliadorSintaticoEguaClassico = void 0;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
const construtos_1 = require("../../construtos");
|
|
8
|
+
const erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
|
|
9
|
+
const declaracoes_1 = require("../../declaracoes");
|
|
10
|
+
const egua_classico_1 = __importDefault(require("../../tipos-de-simbolos/egua-classico"));
|
|
11
11
|
/**
|
|
12
12
|
* O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
13
13
|
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
14
14
|
*/
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
class AvaliadorSintaticoEguaClassico {
|
|
16
|
+
constructor(simbolos) {
|
|
17
17
|
this.simbolos = simbolos;
|
|
18
18
|
this.atual = 0;
|
|
19
19
|
this.blocos = 0;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
declaracaoLeia() {
|
|
22
22
|
throw new Error('Método não implementado.');
|
|
23
|
-
}
|
|
24
|
-
|
|
23
|
+
}
|
|
24
|
+
sincronizar() {
|
|
25
25
|
this.avancarEDevolverAnterior();
|
|
26
26
|
while (!this.estaNoFinal()) {
|
|
27
27
|
if (this.simboloAnterior().tipo === egua_classico_1.default.PONTO_E_VIRGULA)
|
|
@@ -39,73 +39,69 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
39
39
|
}
|
|
40
40
|
this.avancarEDevolverAnterior();
|
|
41
41
|
}
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
}
|
|
43
|
+
erro(simbolo, mensagemDeErro) {
|
|
44
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
|
|
45
45
|
this.erros.push(excecao);
|
|
46
46
|
return excecao;
|
|
47
|
-
}
|
|
48
|
-
|
|
47
|
+
}
|
|
48
|
+
consumir(tipo, mensagemDeErro) {
|
|
49
49
|
if (this.verificarTipoSimboloAtual(tipo))
|
|
50
50
|
return this.avancarEDevolverAnterior();
|
|
51
51
|
else
|
|
52
52
|
throw this.erro(this.simboloAtual(), mensagemDeErro);
|
|
53
|
-
}
|
|
54
|
-
|
|
53
|
+
}
|
|
54
|
+
verificarTipoSimboloAtual(tipo) {
|
|
55
55
|
if (this.estaNoFinal())
|
|
56
56
|
return false;
|
|
57
57
|
return this.simboloAtual().tipo === tipo;
|
|
58
|
-
}
|
|
59
|
-
|
|
58
|
+
}
|
|
59
|
+
verificarTipoProximoSimbolo(tipo) {
|
|
60
60
|
if (this.estaNoFinal())
|
|
61
61
|
return false;
|
|
62
62
|
return this.simbolos[this.atual + 1].tipo === tipo;
|
|
63
|
-
}
|
|
64
|
-
|
|
63
|
+
}
|
|
64
|
+
simboloAtual() {
|
|
65
65
|
return this.simbolos[this.atual];
|
|
66
|
-
}
|
|
67
|
-
|
|
66
|
+
}
|
|
67
|
+
simboloAnterior() {
|
|
68
68
|
return this.simbolos[this.atual - 1];
|
|
69
|
-
}
|
|
70
|
-
|
|
69
|
+
}
|
|
70
|
+
simboloNaPosicao(posicao) {
|
|
71
71
|
return this.simbolos[this.atual + posicao];
|
|
72
|
-
}
|
|
73
|
-
|
|
72
|
+
}
|
|
73
|
+
estaNoFinal() {
|
|
74
74
|
return this.simboloAtual().tipo === egua_classico_1.default.EOF;
|
|
75
|
-
}
|
|
76
|
-
|
|
75
|
+
}
|
|
76
|
+
avancarEDevolverAnterior() {
|
|
77
77
|
if (!this.estaNoFinal())
|
|
78
78
|
this.atual += 1;
|
|
79
79
|
return this.simboloAnterior();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
argumentos[_i] = arguments[_i];
|
|
85
|
-
}
|
|
86
|
-
for (var i = 0; i < argumentos.length; i++) {
|
|
87
|
-
var tipoAtual = argumentos[i];
|
|
80
|
+
}
|
|
81
|
+
verificarSeSimboloAtualEIgualA(...argumentos) {
|
|
82
|
+
for (let i = 0; i < argumentos.length; i++) {
|
|
83
|
+
const tipoAtual = argumentos[i];
|
|
88
84
|
if (this.verificarTipoSimboloAtual(tipoAtual)) {
|
|
89
85
|
this.avancarEDevolverAnterior();
|
|
90
86
|
return true;
|
|
91
87
|
}
|
|
92
88
|
}
|
|
93
89
|
return false;
|
|
94
|
-
}
|
|
95
|
-
|
|
90
|
+
}
|
|
91
|
+
primario() {
|
|
96
92
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SUPER)) {
|
|
97
|
-
|
|
93
|
+
const simboloChave = this.simboloAnterior();
|
|
98
94
|
this.consumir(egua_classico_1.default.PONTO, "Esperado '.' após 'super'.");
|
|
99
|
-
|
|
95
|
+
const metodo = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome do método da SuperClasse.');
|
|
100
96
|
return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
|
|
101
97
|
}
|
|
102
98
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_ESQUERDO)) {
|
|
103
|
-
|
|
99
|
+
const valores = [];
|
|
104
100
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_DIREITO)) {
|
|
105
101
|
return new construtos_1.Vetor(this.hashArquivo, 0, []);
|
|
106
102
|
}
|
|
107
103
|
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_DIREITO)) {
|
|
108
|
-
|
|
104
|
+
const valor = this.atribuir();
|
|
109
105
|
valores.push(valor);
|
|
110
106
|
if (this.simboloAtual().tipo !== egua_classico_1.default.COLCHETE_DIREITO) {
|
|
111
107
|
this.consumir(egua_classico_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
@@ -114,15 +110,15 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
114
110
|
return new construtos_1.Vetor(this.hashArquivo, 0, valores);
|
|
115
111
|
}
|
|
116
112
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_ESQUERDA)) {
|
|
117
|
-
|
|
118
|
-
|
|
113
|
+
const chaves = [];
|
|
114
|
+
const valores = [];
|
|
119
115
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA)) {
|
|
120
116
|
return new construtos_1.Dicionario(this.hashArquivo, 0, [], []);
|
|
121
117
|
}
|
|
122
118
|
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA)) {
|
|
123
|
-
|
|
119
|
+
const chave = this.atribuir();
|
|
124
120
|
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
|
|
125
|
-
|
|
121
|
+
const valor = this.atribuir();
|
|
126
122
|
chaves.push(chave);
|
|
127
123
|
valores.push(valor);
|
|
128
124
|
if (this.simboloAtual().tipo !== egua_classico_1.default.CHAVE_DIREITA) {
|
|
@@ -148,16 +144,16 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
148
144
|
return new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
|
|
149
145
|
}
|
|
150
146
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PARENTESE_ESQUERDO)) {
|
|
151
|
-
|
|
147
|
+
const expressao = this.expressao();
|
|
152
148
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
153
149
|
return new construtos_1.Agrupamento(this.hashArquivo, 0, expressao);
|
|
154
150
|
}
|
|
155
151
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IMPORTAR))
|
|
156
152
|
return this.declaracaoImportar();
|
|
157
153
|
throw this.erro(this.simboloAtual(), 'Esperado expressão.');
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
|
|
154
|
+
}
|
|
155
|
+
finalizarChamada(entidadeChamada) {
|
|
156
|
+
const argumentos = [];
|
|
161
157
|
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
162
158
|
do {
|
|
163
159
|
if (argumentos.length >= 255) {
|
|
@@ -166,22 +162,22 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
166
162
|
argumentos.push(this.expressao());
|
|
167
163
|
} while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VIRGULA));
|
|
168
164
|
}
|
|
169
|
-
|
|
165
|
+
const parenteseDireito = this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
|
|
170
166
|
return new construtos_1.Chamada(this.hashArquivo, entidadeChamada, parenteseDireito, argumentos);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
|
|
167
|
+
}
|
|
168
|
+
chamar() {
|
|
169
|
+
let expressao = this.primario();
|
|
174
170
|
while (true) {
|
|
175
171
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PARENTESE_ESQUERDO)) {
|
|
176
172
|
expressao = this.finalizarChamada(expressao);
|
|
177
173
|
}
|
|
178
174
|
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PONTO)) {
|
|
179
|
-
|
|
175
|
+
const nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, "Esperado nome do método após '.'.");
|
|
180
176
|
expressao = new construtos_1.AcessoMetodo(this.hashArquivo, expressao, nome);
|
|
181
177
|
}
|
|
182
178
|
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_ESQUERDO)) {
|
|
183
|
-
|
|
184
|
-
|
|
179
|
+
const indice = this.expressao();
|
|
180
|
+
const simboloFechamento = this.consumir(egua_classico_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
185
181
|
expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
|
|
186
182
|
}
|
|
187
183
|
else {
|
|
@@ -189,125 +185,125 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
189
185
|
}
|
|
190
186
|
}
|
|
191
187
|
return expressao;
|
|
192
|
-
}
|
|
193
|
-
|
|
188
|
+
}
|
|
189
|
+
unario() {
|
|
194
190
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NEGACAO, egua_classico_1.default.SUBTRACAO, egua_classico_1.default.BIT_NOT)) {
|
|
195
|
-
|
|
196
|
-
|
|
191
|
+
const operador = this.simboloAnterior();
|
|
192
|
+
const direito = this.unario();
|
|
197
193
|
return new construtos_1.Unario(this.hashArquivo, operador, direito);
|
|
198
194
|
}
|
|
199
195
|
return this.chamar();
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
|
|
196
|
+
}
|
|
197
|
+
exponenciacao() {
|
|
198
|
+
let expressao = this.unario();
|
|
203
199
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.EXPONENCIACAO)) {
|
|
204
|
-
|
|
205
|
-
|
|
200
|
+
const operador = this.simboloAnterior();
|
|
201
|
+
const direito = this.unario();
|
|
206
202
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
207
203
|
}
|
|
208
204
|
return expressao;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
205
|
+
}
|
|
206
|
+
multiplicar() {
|
|
207
|
+
let expressao = this.exponenciacao();
|
|
212
208
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.DIVISAO, egua_classico_1.default.MULTIPLICACAO, egua_classico_1.default.MODULO)) {
|
|
213
|
-
|
|
214
|
-
|
|
209
|
+
const operador = this.simboloAnterior();
|
|
210
|
+
const direito = this.exponenciacao();
|
|
215
211
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
216
212
|
}
|
|
217
213
|
return expressao;
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
|
|
214
|
+
}
|
|
215
|
+
adicionar() {
|
|
216
|
+
let expressao = this.multiplicar();
|
|
221
217
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SUBTRACAO, egua_classico_1.default.ADICAO)) {
|
|
222
|
-
|
|
223
|
-
|
|
218
|
+
const operador = this.simboloAnterior();
|
|
219
|
+
const direito = this.multiplicar();
|
|
224
220
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
225
221
|
}
|
|
226
222
|
return expressao;
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
|
|
223
|
+
}
|
|
224
|
+
bitFill() {
|
|
225
|
+
let expressao = this.adicionar();
|
|
230
226
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.MENOR_MENOR, egua_classico_1.default.MAIOR_MAIOR)) {
|
|
231
|
-
|
|
232
|
-
|
|
227
|
+
const operador = this.simboloAnterior();
|
|
228
|
+
const direito = this.adicionar();
|
|
233
229
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
234
230
|
}
|
|
235
231
|
return expressao;
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
|
|
232
|
+
}
|
|
233
|
+
bitE() {
|
|
234
|
+
let expressao = this.bitFill();
|
|
239
235
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.BIT_AND)) {
|
|
240
|
-
|
|
241
|
-
|
|
236
|
+
const operador = this.simboloAnterior();
|
|
237
|
+
const direito = this.bitFill();
|
|
242
238
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
243
239
|
}
|
|
244
240
|
return expressao;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
|
|
241
|
+
}
|
|
242
|
+
bitOu() {
|
|
243
|
+
let expressao = this.bitE();
|
|
248
244
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.BIT_OR, egua_classico_1.default.BIT_XOR)) {
|
|
249
|
-
|
|
250
|
-
|
|
245
|
+
const operador = this.simboloAnterior();
|
|
246
|
+
const direito = this.bitE();
|
|
251
247
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
252
248
|
}
|
|
253
249
|
return expressao;
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
|
|
250
|
+
}
|
|
251
|
+
comparar() {
|
|
252
|
+
let expressao = this.bitOu();
|
|
257
253
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.MAIOR, egua_classico_1.default.MAIOR_IGUAL, egua_classico_1.default.MENOR, egua_classico_1.default.MENOR_IGUAL)) {
|
|
258
|
-
|
|
259
|
-
|
|
254
|
+
const operador = this.simboloAnterior();
|
|
255
|
+
const direito = this.bitOu();
|
|
260
256
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
261
257
|
}
|
|
262
258
|
return expressao;
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
|
|
259
|
+
}
|
|
260
|
+
comparacaoIgualdade() {
|
|
261
|
+
let expressao = this.comparar();
|
|
266
262
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.DIFERENTE, egua_classico_1.default.IGUAL_IGUAL)) {
|
|
267
|
-
|
|
268
|
-
|
|
263
|
+
const operador = this.simboloAnterior();
|
|
264
|
+
const direito = this.comparar();
|
|
269
265
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
270
266
|
}
|
|
271
267
|
return expressao;
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
|
|
268
|
+
}
|
|
269
|
+
em() {
|
|
270
|
+
let expressao = this.comparacaoIgualdade();
|
|
275
271
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.EM)) {
|
|
276
|
-
|
|
277
|
-
|
|
272
|
+
const operador = this.simboloAnterior();
|
|
273
|
+
const direito = this.comparacaoIgualdade();
|
|
278
274
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
279
275
|
}
|
|
280
276
|
return expressao;
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
|
|
277
|
+
}
|
|
278
|
+
e() {
|
|
279
|
+
let expressao = this.em();
|
|
284
280
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.E)) {
|
|
285
|
-
|
|
286
|
-
|
|
281
|
+
const operador = this.simboloAnterior();
|
|
282
|
+
const direito = this.em();
|
|
287
283
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
288
284
|
}
|
|
289
285
|
return expressao;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
|
|
286
|
+
}
|
|
287
|
+
ou() {
|
|
288
|
+
let expressao = this.e();
|
|
293
289
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.OU)) {
|
|
294
|
-
|
|
295
|
-
|
|
290
|
+
const operador = this.simboloAnterior();
|
|
291
|
+
const direito = this.e();
|
|
296
292
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
297
293
|
}
|
|
298
294
|
return expressao;
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
|
|
295
|
+
}
|
|
296
|
+
atribuir() {
|
|
297
|
+
const expressao = this.ou();
|
|
302
298
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IGUAL)) {
|
|
303
|
-
|
|
304
|
-
|
|
299
|
+
const igual = this.simboloAnterior();
|
|
300
|
+
const valor = this.atribuir();
|
|
305
301
|
if (expressao instanceof construtos_1.Variavel) {
|
|
306
|
-
|
|
302
|
+
const simbolo = expressao.simbolo;
|
|
307
303
|
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
308
304
|
}
|
|
309
305
|
else if (expressao instanceof construtos_1.AcessoMetodo) {
|
|
310
|
-
|
|
306
|
+
const get = expressao;
|
|
311
307
|
return new construtos_1.DefinirValor(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
|
|
312
308
|
}
|
|
313
309
|
else if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
@@ -316,72 +312,72 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
316
312
|
this.erro(igual, 'Tarefa de atribuição inválida');
|
|
317
313
|
}
|
|
318
314
|
return expressao;
|
|
319
|
-
}
|
|
320
|
-
|
|
315
|
+
}
|
|
316
|
+
expressao() {
|
|
321
317
|
return this.atribuir();
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
|
|
318
|
+
}
|
|
319
|
+
declaracaoEscreva() {
|
|
320
|
+
const simboloAtual = this.simboloAtual();
|
|
325
321
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
326
|
-
|
|
322
|
+
const valor = this.expressao();
|
|
327
323
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
|
|
328
324
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após o valor.");
|
|
329
325
|
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, [valor]);
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
|
|
326
|
+
}
|
|
327
|
+
declaracaoExpressao() {
|
|
328
|
+
const expressao = this.expressao();
|
|
333
329
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após expressão.");
|
|
334
330
|
return new declaracoes_1.Expressao(expressao);
|
|
335
|
-
}
|
|
336
|
-
|
|
337
|
-
|
|
331
|
+
}
|
|
332
|
+
blocoEscopo() {
|
|
333
|
+
const declaracoes = [];
|
|
338
334
|
while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
339
335
|
declaracoes.push(this.declaracao());
|
|
340
336
|
}
|
|
341
337
|
this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
|
|
342
338
|
return declaracoes;
|
|
343
|
-
}
|
|
344
|
-
|
|
339
|
+
}
|
|
340
|
+
declaracaoSe() {
|
|
345
341
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'se'.");
|
|
346
|
-
|
|
342
|
+
const condicao = this.expressao();
|
|
347
343
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após condição do se.");
|
|
348
|
-
|
|
349
|
-
|
|
344
|
+
const caminhoEntao = this.resolverDeclaracao();
|
|
345
|
+
const caminhosSeSenao = [];
|
|
350
346
|
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃOSE)) {
|
|
351
347
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'senãose'.");
|
|
352
|
-
|
|
348
|
+
const condicaoSeSenao = this.expressao();
|
|
353
349
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' apóes codição do 'senãose.");
|
|
354
|
-
|
|
350
|
+
const caminho = this.resolverDeclaracao();
|
|
355
351
|
caminhosSeSenao.push({
|
|
356
352
|
condicao: condicaoSeSenao,
|
|
357
353
|
caminho: caminho,
|
|
358
354
|
});
|
|
359
355
|
}
|
|
360
|
-
|
|
356
|
+
let caminhoSenao = null;
|
|
361
357
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃO)) {
|
|
362
358
|
caminhoSenao = this.resolverDeclaracao();
|
|
363
359
|
}
|
|
364
360
|
return new declaracoes_1.Se(condicao, caminhoEntao, caminhosSeSenao, caminhoSenao);
|
|
365
|
-
}
|
|
366
|
-
|
|
361
|
+
}
|
|
362
|
+
declaracaoEnquanto() {
|
|
367
363
|
try {
|
|
368
364
|
this.blocos += 1;
|
|
369
365
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'enquanto'.");
|
|
370
|
-
|
|
366
|
+
const condicao = this.expressao();
|
|
371
367
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após condicional.");
|
|
372
|
-
|
|
368
|
+
const corpo = this.resolverDeclaracao();
|
|
373
369
|
return new declaracoes_1.Enquanto(condicao, corpo);
|
|
374
370
|
}
|
|
375
371
|
finally {
|
|
376
372
|
this.blocos -= 1;
|
|
377
373
|
}
|
|
378
|
-
}
|
|
379
|
-
|
|
374
|
+
}
|
|
375
|
+
declaracaoPara() {
|
|
380
376
|
try {
|
|
381
|
-
|
|
377
|
+
const simboloPara = this.simboloAnterior();
|
|
382
378
|
this.blocos += 1;
|
|
383
379
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'para'.");
|
|
384
|
-
|
|
380
|
+
let inicializador;
|
|
385
381
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
386
382
|
inicializador = null;
|
|
387
383
|
}
|
|
@@ -391,65 +387,65 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
391
387
|
else {
|
|
392
388
|
inicializador = this.declaracaoExpressao();
|
|
393
389
|
}
|
|
394
|
-
|
|
390
|
+
let condicao = null;
|
|
395
391
|
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
396
392
|
condicao = this.expressao();
|
|
397
393
|
}
|
|
398
394
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após valores da condicional");
|
|
399
|
-
|
|
395
|
+
let incrementar = null;
|
|
400
396
|
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
401
397
|
incrementar = this.expressao();
|
|
402
398
|
}
|
|
403
399
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após cláusulas");
|
|
404
|
-
|
|
400
|
+
const corpo = this.resolverDeclaracao();
|
|
405
401
|
return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
|
|
406
402
|
}
|
|
407
403
|
finally {
|
|
408
404
|
this.blocos -= 1;
|
|
409
405
|
}
|
|
410
|
-
}
|
|
411
|
-
|
|
406
|
+
}
|
|
407
|
+
declaracaoSustar() {
|
|
412
408
|
if (this.blocos < 1) {
|
|
413
409
|
this.erro(this.simboloAnterior(), "'pausa' deve estar dentro de um loop.");
|
|
414
410
|
}
|
|
415
411
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após 'pausa'.");
|
|
416
412
|
return new declaracoes_1.Sustar(this.simboloAtual());
|
|
417
|
-
}
|
|
418
|
-
|
|
413
|
+
}
|
|
414
|
+
declaracaoContinua() {
|
|
419
415
|
if (this.blocos < 1) {
|
|
420
416
|
this.erro(this.simboloAnterior(), "'continua' precisa estar em um laço de repetição.");
|
|
421
417
|
}
|
|
422
418
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após 'continua'.");
|
|
423
419
|
return new declaracoes_1.Continua(this.simboloAtual());
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
420
|
+
}
|
|
421
|
+
declaracaoRetorna() {
|
|
422
|
+
const palavraChave = this.simboloAnterior();
|
|
423
|
+
let valor = null;
|
|
428
424
|
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
429
425
|
valor = this.expressao();
|
|
430
426
|
}
|
|
431
427
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após o retorno.");
|
|
432
428
|
return new declaracoes_1.Retorna(palavraChave, valor);
|
|
433
|
-
}
|
|
434
|
-
|
|
429
|
+
}
|
|
430
|
+
declaracaoEscolha() {
|
|
435
431
|
try {
|
|
436
432
|
this.blocos += 1;
|
|
437
433
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '{' após 'escolha'.");
|
|
438
|
-
|
|
434
|
+
const condicao = this.expressao();
|
|
439
435
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado '}' após a condição de 'escolha'.");
|
|
440
436
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
|
|
441
|
-
|
|
442
|
-
|
|
437
|
+
const caminhos = [];
|
|
438
|
+
let caminhoPadrao = null;
|
|
443
439
|
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
444
440
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CASO)) {
|
|
445
|
-
|
|
441
|
+
const caminhoCondicoes = [this.expressao()];
|
|
446
442
|
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
|
|
447
443
|
while (this.verificarTipoSimboloAtual(egua_classico_1.default.CASO)) {
|
|
448
444
|
this.consumir(egua_classico_1.default.CASO, null);
|
|
449
445
|
caminhoCondicoes.push(this.expressao());
|
|
450
446
|
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'caso'.");
|
|
451
447
|
}
|
|
452
|
-
|
|
448
|
+
const declaracoes = [];
|
|
453
449
|
do {
|
|
454
450
|
declaracoes.push(this.resolverDeclaracao());
|
|
455
451
|
} while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CASO) &&
|
|
@@ -457,24 +453,24 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
457
453
|
!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA));
|
|
458
454
|
caminhos.push({
|
|
459
455
|
condicoes: caminhoCondicoes,
|
|
460
|
-
declaracoes
|
|
456
|
+
declaracoes,
|
|
461
457
|
});
|
|
462
458
|
}
|
|
463
459
|
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PADRAO)) {
|
|
464
460
|
if (caminhoPadrao !== null) {
|
|
465
|
-
|
|
461
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simboloAtual(), "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
|
|
466
462
|
this.erros.push(excecao);
|
|
467
463
|
throw excecao;
|
|
468
464
|
}
|
|
469
465
|
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'padrao'.");
|
|
470
|
-
|
|
466
|
+
const declaracoes = [];
|
|
471
467
|
do {
|
|
472
468
|
declaracoes.push(this.resolverDeclaracao());
|
|
473
469
|
} while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CASO) &&
|
|
474
470
|
!this.verificarTipoSimboloAtual(egua_classico_1.default.PADRAO) &&
|
|
475
471
|
!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA));
|
|
476
472
|
caminhoPadrao = {
|
|
477
|
-
declaracoes
|
|
473
|
+
declaracoes,
|
|
478
474
|
};
|
|
479
475
|
}
|
|
480
476
|
}
|
|
@@ -483,11 +479,11 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
483
479
|
finally {
|
|
484
480
|
this.blocos -= 1;
|
|
485
481
|
}
|
|
486
|
-
}
|
|
487
|
-
|
|
482
|
+
}
|
|
483
|
+
declaracaoImportar() {
|
|
488
484
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
|
|
489
|
-
|
|
490
|
-
|
|
485
|
+
const caminho = this.expressao();
|
|
486
|
+
const simboloFechamento = this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
|
|
491
487
|
// tive que fazer isso para poder tipar a func expressão
|
|
492
488
|
// não sei isso e certo provavelmente não.
|
|
493
489
|
// o parametro valor no tipo literal esta como any
|
|
@@ -495,42 +491,42 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
495
491
|
// alguma ideia de qual tipo ele pode ser ?
|
|
496
492
|
caminho.valor = null;
|
|
497
493
|
return new declaracoes_1.Importar(caminho, simboloFechamento);
|
|
498
|
-
}
|
|
499
|
-
|
|
494
|
+
}
|
|
495
|
+
declaracaoTente() {
|
|
500
496
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'tente'.");
|
|
501
|
-
|
|
502
|
-
|
|
497
|
+
const tryBlock = this.blocoEscopo();
|
|
498
|
+
let catchBlock = null;
|
|
503
499
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PEGUE)) {
|
|
504
500
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
505
501
|
catchBlock = this.blocoEscopo();
|
|
506
502
|
}
|
|
507
|
-
|
|
503
|
+
let elseBlock = null;
|
|
508
504
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃO)) {
|
|
509
505
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
510
506
|
elseBlock = this.blocoEscopo();
|
|
511
507
|
}
|
|
512
|
-
|
|
508
|
+
let finallyBlock = null;
|
|
513
509
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FINALMENTE)) {
|
|
514
510
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
515
511
|
finallyBlock = this.blocoEscopo();
|
|
516
512
|
}
|
|
517
513
|
return new declaracoes_1.Tente(0, 0, tryBlock, catchBlock, elseBlock, finallyBlock);
|
|
518
|
-
}
|
|
519
|
-
|
|
514
|
+
}
|
|
515
|
+
declaracaoFazer() {
|
|
520
516
|
try {
|
|
521
517
|
this.blocos += 1;
|
|
522
|
-
|
|
518
|
+
const caminhoFazer = this.resolverDeclaracao();
|
|
523
519
|
this.consumir(egua_classico_1.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
524
520
|
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração 'enquanto'.");
|
|
525
|
-
|
|
521
|
+
const condicaoEnquanto = this.expressao();
|
|
526
522
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração do 'enquanto'.");
|
|
527
523
|
return new declaracoes_1.Fazer(0, 0, caminhoFazer, condicaoEnquanto);
|
|
528
524
|
}
|
|
529
525
|
finally {
|
|
530
526
|
this.blocos -= 1;
|
|
531
527
|
}
|
|
532
|
-
}
|
|
533
|
-
|
|
528
|
+
}
|
|
529
|
+
resolverDeclaracao() {
|
|
534
530
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FAZER))
|
|
535
531
|
return this.declaracaoFazer();
|
|
536
532
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.TENTE))
|
|
@@ -554,29 +550,29 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
554
550
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_ESQUERDA))
|
|
555
551
|
return new declaracoes_1.Bloco(0, 0, this.blocoEscopo());
|
|
556
552
|
return this.declaracaoExpressao();
|
|
557
|
-
}
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
553
|
+
}
|
|
554
|
+
declaracaoDeVariavel() {
|
|
555
|
+
const nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
|
|
556
|
+
let inicializador = null;
|
|
561
557
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IGUAL)) {
|
|
562
558
|
inicializador = this.expressao();
|
|
563
559
|
}
|
|
564
560
|
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após a declaração da variável.");
|
|
565
561
|
return new declaracoes_1.Var(nome, inicializador);
|
|
566
|
-
}
|
|
567
|
-
|
|
568
|
-
|
|
562
|
+
}
|
|
563
|
+
funcao(kind) {
|
|
564
|
+
const nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, `Esperado nome ${kind}.`);
|
|
569
565
|
return new declaracoes_1.FuncaoDeclaracao(nome, this.corpoDaFuncao(kind));
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO,
|
|
573
|
-
|
|
566
|
+
}
|
|
567
|
+
corpoDaFuncao(kind) {
|
|
568
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, `Esperado '(' após o nome ${kind}.`);
|
|
569
|
+
const parametros = [];
|
|
574
570
|
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
575
571
|
do {
|
|
576
572
|
if (parametros.length >= 255) {
|
|
577
573
|
this.erro(this.simboloAtual(), 'Não pode haver mais de 255 parâmetros');
|
|
578
574
|
}
|
|
579
|
-
|
|
575
|
+
const parametro = {};
|
|
580
576
|
if (this.simboloAtual().tipo === egua_classico_1.default.MULTIPLICACAO) {
|
|
581
577
|
this.consumir(egua_classico_1.default.MULTIPLICACAO, null);
|
|
582
578
|
parametro['tipo'] = 'estrela';
|
|
@@ -594,26 +590,26 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
594
590
|
} while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VIRGULA));
|
|
595
591
|
}
|
|
596
592
|
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
597
|
-
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA,
|
|
598
|
-
|
|
593
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, `Esperado '{' antes do escopo do ${kind}.`);
|
|
594
|
+
const corpo = this.blocoEscopo();
|
|
599
595
|
return new construtos_1.FuncaoConstruto(this.hashArquivo, 0, parametros, corpo);
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
596
|
+
}
|
|
597
|
+
declaracaoDeClasse() {
|
|
598
|
+
const nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
|
|
599
|
+
let superClasse = null;
|
|
604
600
|
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.HERDA)) {
|
|
605
601
|
this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da SuperClasse.');
|
|
606
602
|
superClasse = new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
|
|
607
603
|
}
|
|
608
604
|
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
|
|
609
|
-
|
|
605
|
+
const metodos = [];
|
|
610
606
|
while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
611
607
|
metodos.push(this.funcao('método'));
|
|
612
608
|
}
|
|
613
609
|
this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
614
610
|
return new declaracoes_1.Classe(nome, superClasse, metodos);
|
|
615
|
-
}
|
|
616
|
-
|
|
611
|
+
}
|
|
612
|
+
declaracao() {
|
|
617
613
|
try {
|
|
618
614
|
if (this.verificarTipoSimboloAtual(egua_classico_1.default.FUNÇÃO) &&
|
|
619
615
|
this.verificarTipoProximoSimbolo(egua_classico_1.default.IDENTIFICADOR)) {
|
|
@@ -630,14 +626,14 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
630
626
|
this.sincronizar();
|
|
631
627
|
return null;
|
|
632
628
|
}
|
|
633
|
-
}
|
|
634
|
-
|
|
629
|
+
}
|
|
630
|
+
analisar(retornoLexador, hashArquivo) {
|
|
635
631
|
this.erros = [];
|
|
636
632
|
this.atual = 0;
|
|
637
633
|
this.blocos = 0;
|
|
638
634
|
this.hashArquivo = hashArquivo || 0;
|
|
639
635
|
this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
|
|
640
|
-
|
|
636
|
+
const declaracoes = [];
|
|
641
637
|
while (!this.estaNoFinal()) {
|
|
642
638
|
declaracoes.push(this.declaracao());
|
|
643
639
|
}
|
|
@@ -645,8 +641,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
645
641
|
declaracoes: declaracoes,
|
|
646
642
|
erros: this.erros,
|
|
647
643
|
};
|
|
648
|
-
}
|
|
649
|
-
|
|
650
|
-
}());
|
|
644
|
+
}
|
|
645
|
+
}
|
|
651
646
|
exports.AvaliadorSintaticoEguaClassico = AvaliadorSintaticoEguaClassico;
|
|
652
647
|
//# sourceMappingURL=avaliador-sintatico-egua-classico.js.map
|