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