@designliquido/delegua 0.9.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/package.json +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +145 -145
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +1 -0
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +10 -5
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
- package/fontes/delegua.js +8 -2
- package/fontes/delegua.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico.js +26 -26
- package/fontes/interpretador/dialetos/egua-classico.js.map +1 -1
- package/fontes/interpretador/interpretador.js +21 -8
- package/fontes/interpretador/interpretador.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-egua-classico.js +38 -38
- package/fontes/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +36 -0
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +42 -0
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js.map +1 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.d.ts +2 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.js +19 -0
- package/fontes/lexador/dialetos/palavras-reservadas/index.js.map +1 -0
- package/fontes/tipos-de-simbolos/egua-classico.d.ts +77 -0
- package/fontes/tipos-de-simbolos/egua-classico.js +79 -0
- package/fontes/tipos-de-simbolos/egua-classico.js.map +1 -0
- package/package.json +1 -1
- package/testes/egua-classico/interpretador.test.js +1 -1
- package/testes/egua-classico/interpretador.test.js.map +1 -1
- package/testes/interpretador.test.js +1 -1
- package/testes/interpretador.test.js.map +1 -1
- package/testes/visualg/interpretador.test.d.ts +1 -0
- package/testes/visualg/interpretador.test.js +69 -0
- package/testes/visualg/interpretador.test.js.map +1 -0
|
@@ -4,10 +4,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AvaliadorSintaticoEguaClassico = void 0;
|
|
7
|
-
var delegua_1 = __importDefault(require("../../tipos-de-simbolos/delegua"));
|
|
8
7
|
var construtos_1 = require("../../construtos");
|
|
9
8
|
var erro_avaliador_sintatico_1 = require("../erro-avaliador-sintatico");
|
|
10
9
|
var declaracoes_1 = require("../../declaracoes");
|
|
10
|
+
var 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.
|
|
@@ -24,17 +24,17 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
24
24
|
AvaliadorSintaticoEguaClassico.prototype.sincronizar = function () {
|
|
25
25
|
this.avancarEDevolverAnterior();
|
|
26
26
|
while (!this.estaNoFinal()) {
|
|
27
|
-
if (this.simboloAnterior().tipo ===
|
|
27
|
+
if (this.simboloAnterior().tipo === egua_classico_1.default.PONTO_E_VIRGULA)
|
|
28
28
|
return;
|
|
29
29
|
switch (this.simboloAtual().tipo) {
|
|
30
|
-
case
|
|
31
|
-
case
|
|
32
|
-
case
|
|
33
|
-
case
|
|
34
|
-
case
|
|
35
|
-
case
|
|
36
|
-
case
|
|
37
|
-
case
|
|
30
|
+
case egua_classico_1.default.CLASSE:
|
|
31
|
+
case egua_classico_1.default.FUNÇÃO:
|
|
32
|
+
case egua_classico_1.default.VARIAVEL:
|
|
33
|
+
case egua_classico_1.default.PARA:
|
|
34
|
+
case egua_classico_1.default.SE:
|
|
35
|
+
case egua_classico_1.default.ENQUANTO:
|
|
36
|
+
case egua_classico_1.default.ESCREVA:
|
|
37
|
+
case egua_classico_1.default.RETORNA:
|
|
38
38
|
return;
|
|
39
39
|
}
|
|
40
40
|
this.avancarEDevolverAnterior();
|
|
@@ -71,7 +71,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
71
71
|
return this.simbolos[this.atual + posicao];
|
|
72
72
|
};
|
|
73
73
|
AvaliadorSintaticoEguaClassico.prototype.estaNoFinal = function () {
|
|
74
|
-
return this.simboloAtual().tipo ===
|
|
74
|
+
return this.simboloAtual().tipo === egua_classico_1.default.EOF;
|
|
75
75
|
};
|
|
76
76
|
AvaliadorSintaticoEguaClassico.prototype.avancarEDevolverAnterior = function () {
|
|
77
77
|
if (!this.estaNoFinal())
|
|
@@ -93,96 +93,96 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
93
93
|
return false;
|
|
94
94
|
};
|
|
95
95
|
AvaliadorSintaticoEguaClassico.prototype.primario = function () {
|
|
96
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
96
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SUPER)) {
|
|
97
97
|
var simboloChave = this.simboloAnterior();
|
|
98
|
-
this.consumir(
|
|
99
|
-
var metodo = this.consumir(
|
|
98
|
+
this.consumir(egua_classico_1.default.PONTO, "Esperado '.' após 'super'.");
|
|
99
|
+
var metodo = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome do método da SuperClasse.');
|
|
100
100
|
return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
|
|
101
101
|
}
|
|
102
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
102
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_ESQUERDO)) {
|
|
103
103
|
var valores = [];
|
|
104
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
104
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_DIREITO)) {
|
|
105
105
|
return new construtos_1.Vetor(this.hashArquivo, 0, []);
|
|
106
106
|
}
|
|
107
|
-
while (!this.verificarSeSimboloAtualEIgualA(
|
|
107
|
+
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_DIREITO)) {
|
|
108
108
|
var valor = this.atribuir();
|
|
109
109
|
valores.push(valor);
|
|
110
110
|
if (this.simboloAtual().tipo !==
|
|
111
|
-
|
|
112
|
-
this.consumir(
|
|
111
|
+
egua_classico_1.default.COLCHETE_DIREITO) {
|
|
112
|
+
this.consumir(egua_classico_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
return new construtos_1.Vetor(this.hashArquivo, 0, valores);
|
|
116
116
|
}
|
|
117
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
117
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_ESQUERDA)) {
|
|
118
118
|
var chaves = [];
|
|
119
119
|
var valores = [];
|
|
120
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
120
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA)) {
|
|
121
121
|
return new construtos_1.Dicionario(this.hashArquivo, 0, [], []);
|
|
122
122
|
}
|
|
123
|
-
while (!this.verificarSeSimboloAtualEIgualA(
|
|
123
|
+
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA)) {
|
|
124
124
|
var chave = this.atribuir();
|
|
125
|
-
this.consumir(
|
|
125
|
+
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
|
|
126
126
|
var valor = this.atribuir();
|
|
127
127
|
chaves.push(chave);
|
|
128
128
|
valores.push(valor);
|
|
129
|
-
if (this.simboloAtual().tipo !==
|
|
130
|
-
this.consumir(
|
|
129
|
+
if (this.simboloAtual().tipo !== egua_classico_1.default.CHAVE_DIREITA) {
|
|
130
|
+
this.consumir(egua_classico_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
return new construtos_1.Dicionario(this.hashArquivo, 0, chaves, valores);
|
|
134
134
|
}
|
|
135
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
135
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FUNÇÃO))
|
|
136
136
|
return this.corpoDaFuncao('função');
|
|
137
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
137
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FALSO))
|
|
138
138
|
return new construtos_1.Literal(this.hashArquivo, 0, false);
|
|
139
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
139
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VERDADEIRO))
|
|
140
140
|
return new construtos_1.Literal(this.hashArquivo, 0, true);
|
|
141
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
141
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NULO))
|
|
142
142
|
return new construtos_1.Literal(this.hashArquivo, 0, null);
|
|
143
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
143
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ISTO))
|
|
144
144
|
return new construtos_1.Isto(this.hashArquivo, Number(this.simboloAnterior()));
|
|
145
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
145
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NUMERO, egua_classico_1.default.TEXTO)) {
|
|
146
146
|
return new construtos_1.Literal(this.hashArquivo, 0, this.simboloAnterior().literal);
|
|
147
147
|
}
|
|
148
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
148
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IDENTIFICADOR)) {
|
|
149
149
|
return new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
|
|
150
150
|
}
|
|
151
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
151
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PARENTESE_ESQUERDO)) {
|
|
152
152
|
var expressao = this.expressao();
|
|
153
|
-
this.consumir(
|
|
153
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
154
154
|
return new construtos_1.Agrupamento(this.hashArquivo, 0, expressao);
|
|
155
155
|
}
|
|
156
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
156
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IMPORTAR))
|
|
157
157
|
return this.declaracaoImportar();
|
|
158
158
|
throw this.erro(this.simboloAtual(), 'Esperado expressão.');
|
|
159
159
|
};
|
|
160
160
|
AvaliadorSintaticoEguaClassico.prototype.finalizarChamada = function (entidadeChamada) {
|
|
161
161
|
var argumentos = [];
|
|
162
|
-
if (!this.verificarTipoSimboloAtual(
|
|
162
|
+
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
163
163
|
do {
|
|
164
164
|
if (argumentos.length >= 255) {
|
|
165
165
|
throw this.erro(this.simboloAtual(), 'Não pode haver mais de 255 argumentos.');
|
|
166
166
|
}
|
|
167
167
|
argumentos.push(this.expressao());
|
|
168
|
-
} while (this.verificarSeSimboloAtualEIgualA(
|
|
168
|
+
} while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VIRGULA));
|
|
169
169
|
}
|
|
170
|
-
var parenteseDireito = this.consumir(
|
|
170
|
+
var parenteseDireito = this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
|
|
171
171
|
return new construtos_1.Chamada(this.hashArquivo, entidadeChamada, parenteseDireito, argumentos);
|
|
172
172
|
};
|
|
173
173
|
AvaliadorSintaticoEguaClassico.prototype.chamar = function () {
|
|
174
174
|
var expressao = this.primario();
|
|
175
175
|
while (true) {
|
|
176
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
176
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PARENTESE_ESQUERDO)) {
|
|
177
177
|
expressao = this.finalizarChamada(expressao);
|
|
178
178
|
}
|
|
179
|
-
else if (this.verificarSeSimboloAtualEIgualA(
|
|
180
|
-
var nome = this.consumir(
|
|
179
|
+
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PONTO)) {
|
|
180
|
+
var nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, "Esperado nome do método após '.'.");
|
|
181
181
|
expressao = new construtos_1.AcessoMetodo(this.hashArquivo, expressao, nome);
|
|
182
182
|
}
|
|
183
|
-
else if (this.verificarSeSimboloAtualEIgualA(
|
|
183
|
+
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.COLCHETE_ESQUERDO)) {
|
|
184
184
|
var indice = this.expressao();
|
|
185
|
-
var simboloFechamento = this.consumir(
|
|
185
|
+
var simboloFechamento = this.consumir(egua_classico_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
186
186
|
expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
|
|
187
187
|
}
|
|
188
188
|
else {
|
|
@@ -192,7 +192,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
192
192
|
return expressao;
|
|
193
193
|
};
|
|
194
194
|
AvaliadorSintaticoEguaClassico.prototype.unario = function () {
|
|
195
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
195
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.NEGACAO, egua_classico_1.default.SUBTRACAO, egua_classico_1.default.BIT_NOT)) {
|
|
196
196
|
var operador = this.simboloAnterior();
|
|
197
197
|
var direito = this.unario();
|
|
198
198
|
return new construtos_1.Unario(this.hashArquivo, operador, direito);
|
|
@@ -201,7 +201,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
201
201
|
};
|
|
202
202
|
AvaliadorSintaticoEguaClassico.prototype.exponenciacao = function () {
|
|
203
203
|
var expressao = this.unario();
|
|
204
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
204
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.EXPONENCIACAO)) {
|
|
205
205
|
var operador = this.simboloAnterior();
|
|
206
206
|
var direito = this.unario();
|
|
207
207
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -210,7 +210,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
210
210
|
};
|
|
211
211
|
AvaliadorSintaticoEguaClassico.prototype.multiplicar = function () {
|
|
212
212
|
var expressao = this.exponenciacao();
|
|
213
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
213
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.DIVISAO, egua_classico_1.default.MULTIPLICACAO, egua_classico_1.default.MODULO)) {
|
|
214
214
|
var operador = this.simboloAnterior();
|
|
215
215
|
var direito = this.exponenciacao();
|
|
216
216
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -219,7 +219,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
219
219
|
};
|
|
220
220
|
AvaliadorSintaticoEguaClassico.prototype.adicionar = function () {
|
|
221
221
|
var expressao = this.multiplicar();
|
|
222
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
222
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SUBTRACAO, egua_classico_1.default.ADICAO)) {
|
|
223
223
|
var operador = this.simboloAnterior();
|
|
224
224
|
var direito = this.multiplicar();
|
|
225
225
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -228,7 +228,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
228
228
|
};
|
|
229
229
|
AvaliadorSintaticoEguaClassico.prototype.bitFill = function () {
|
|
230
230
|
var expressao = this.adicionar();
|
|
231
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
231
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.MENOR_MENOR, egua_classico_1.default.MAIOR_MAIOR)) {
|
|
232
232
|
var operador = this.simboloAnterior();
|
|
233
233
|
var direito = this.adicionar();
|
|
234
234
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -237,7 +237,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
237
237
|
};
|
|
238
238
|
AvaliadorSintaticoEguaClassico.prototype.bitE = function () {
|
|
239
239
|
var expressao = this.bitFill();
|
|
240
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
240
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.BIT_AND)) {
|
|
241
241
|
var operador = this.simboloAnterior();
|
|
242
242
|
var direito = this.bitFill();
|
|
243
243
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -246,7 +246,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
246
246
|
};
|
|
247
247
|
AvaliadorSintaticoEguaClassico.prototype.bitOu = function () {
|
|
248
248
|
var expressao = this.bitE();
|
|
249
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
249
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.BIT_OR, egua_classico_1.default.BIT_XOR)) {
|
|
250
250
|
var operador = this.simboloAnterior();
|
|
251
251
|
var direito = this.bitE();
|
|
252
252
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -255,7 +255,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
255
255
|
};
|
|
256
256
|
AvaliadorSintaticoEguaClassico.prototype.comparar = function () {
|
|
257
257
|
var expressao = this.bitOu();
|
|
258
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
258
|
+
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
259
|
var operador = this.simboloAnterior();
|
|
260
260
|
var direito = this.bitOu();
|
|
261
261
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -264,7 +264,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
264
264
|
};
|
|
265
265
|
AvaliadorSintaticoEguaClassico.prototype.comparacaoIgualdade = function () {
|
|
266
266
|
var expressao = this.comparar();
|
|
267
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
267
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.DIFERENTE, egua_classico_1.default.IGUAL_IGUAL)) {
|
|
268
268
|
var operador = this.simboloAnterior();
|
|
269
269
|
var direito = this.comparar();
|
|
270
270
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
@@ -273,7 +273,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
273
273
|
};
|
|
274
274
|
AvaliadorSintaticoEguaClassico.prototype.em = function () {
|
|
275
275
|
var expressao = this.comparacaoIgualdade();
|
|
276
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
276
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.EM)) {
|
|
277
277
|
var operador = this.simboloAnterior();
|
|
278
278
|
var direito = this.comparacaoIgualdade();
|
|
279
279
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
@@ -282,7 +282,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
282
282
|
};
|
|
283
283
|
AvaliadorSintaticoEguaClassico.prototype.e = function () {
|
|
284
284
|
var expressao = this.em();
|
|
285
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
285
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.E)) {
|
|
286
286
|
var operador = this.simboloAnterior();
|
|
287
287
|
var direito = this.em();
|
|
288
288
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
@@ -291,7 +291,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
291
291
|
};
|
|
292
292
|
AvaliadorSintaticoEguaClassico.prototype.ou = function () {
|
|
293
293
|
var expressao = this.e();
|
|
294
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
294
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.OU)) {
|
|
295
295
|
var operador = this.simboloAnterior();
|
|
296
296
|
var direito = this.e();
|
|
297
297
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
@@ -300,7 +300,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
300
300
|
};
|
|
301
301
|
AvaliadorSintaticoEguaClassico.prototype.atribuir = function () {
|
|
302
302
|
var expressao = this.ou();
|
|
303
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
303
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IGUAL)) {
|
|
304
304
|
var igual = this.simboloAnterior();
|
|
305
305
|
var valor = this.atribuir();
|
|
306
306
|
if (expressao instanceof construtos_1.Variavel) {
|
|
@@ -323,36 +323,36 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
323
323
|
};
|
|
324
324
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoEscreva = function () {
|
|
325
325
|
var simboloAtual = this.simboloAtual();
|
|
326
|
-
this.consumir(
|
|
326
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
327
327
|
var valor = this.expressao();
|
|
328
|
-
this.consumir(
|
|
329
|
-
this.consumir(
|
|
328
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
|
|
329
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após o valor.");
|
|
330
330
|
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, [valor]);
|
|
331
331
|
};
|
|
332
332
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoExpressao = function () {
|
|
333
333
|
var expressao = this.expressao();
|
|
334
|
-
this.consumir(
|
|
334
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após expressão.");
|
|
335
335
|
return new declaracoes_1.Expressao(expressao);
|
|
336
336
|
};
|
|
337
337
|
AvaliadorSintaticoEguaClassico.prototype.blocoEscopo = function () {
|
|
338
338
|
var declaracoes = [];
|
|
339
|
-
while (!this.verificarTipoSimboloAtual(
|
|
339
|
+
while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) &&
|
|
340
340
|
!this.estaNoFinal()) {
|
|
341
341
|
declaracoes.push(this.declaracao());
|
|
342
342
|
}
|
|
343
|
-
this.consumir(
|
|
343
|
+
this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
|
|
344
344
|
return declaracoes;
|
|
345
345
|
};
|
|
346
346
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoSe = function () {
|
|
347
|
-
this.consumir(
|
|
347
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'se'.");
|
|
348
348
|
var condicao = this.expressao();
|
|
349
|
-
this.consumir(
|
|
349
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após condição do se.");
|
|
350
350
|
var caminhoEntao = this.resolverDeclaracao();
|
|
351
351
|
var caminhosSeSenao = [];
|
|
352
|
-
while (this.verificarSeSimboloAtualEIgualA(
|
|
353
|
-
this.consumir(
|
|
352
|
+
while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃOSE)) {
|
|
353
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'senãose'.");
|
|
354
354
|
var condicaoSeSenao = this.expressao();
|
|
355
|
-
this.consumir(
|
|
355
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' apóes codição do 'senãose.");
|
|
356
356
|
var caminho = this.resolverDeclaracao();
|
|
357
357
|
caminhosSeSenao.push({
|
|
358
358
|
condicao: condicaoSeSenao,
|
|
@@ -360,7 +360,7 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
360
360
|
});
|
|
361
361
|
}
|
|
362
362
|
var caminhoSenao = null;
|
|
363
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
363
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃO)) {
|
|
364
364
|
caminhoSenao = this.resolverDeclaracao();
|
|
365
365
|
}
|
|
366
366
|
return new declaracoes_1.Se(condicao, caminhoEntao, caminhosSeSenao, caminhoSenao);
|
|
@@ -368,9 +368,9 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
368
368
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoEnquanto = function () {
|
|
369
369
|
try {
|
|
370
370
|
this.ciclos += 1;
|
|
371
|
-
this.consumir(
|
|
371
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'enquanto'.");
|
|
372
372
|
var condicao = this.expressao();
|
|
373
|
-
this.consumir(
|
|
373
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após condicional.");
|
|
374
374
|
var corpo = this.resolverDeclaracao();
|
|
375
375
|
return new declaracoes_1.Enquanto(condicao, corpo);
|
|
376
376
|
}
|
|
@@ -382,27 +382,27 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
382
382
|
try {
|
|
383
383
|
var simboloPara = this.simboloAnterior();
|
|
384
384
|
this.ciclos += 1;
|
|
385
|
-
this.consumir(
|
|
385
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'para'.");
|
|
386
386
|
var inicializador = void 0;
|
|
387
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
387
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
388
388
|
inicializador = null;
|
|
389
389
|
}
|
|
390
|
-
else if (this.verificarSeSimboloAtualEIgualA(
|
|
390
|
+
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VARIAVEL)) {
|
|
391
391
|
inicializador = this.declaracaoDeVariavel();
|
|
392
392
|
}
|
|
393
393
|
else {
|
|
394
394
|
inicializador = this.declaracaoExpressao();
|
|
395
395
|
}
|
|
396
396
|
var condicao = null;
|
|
397
|
-
if (!this.verificarTipoSimboloAtual(
|
|
397
|
+
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
398
398
|
condicao = this.expressao();
|
|
399
399
|
}
|
|
400
|
-
this.consumir(
|
|
400
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após valores da condicional");
|
|
401
401
|
var incrementar = null;
|
|
402
|
-
if (!this.verificarTipoSimboloAtual(
|
|
402
|
+
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
403
403
|
incrementar = this.expressao();
|
|
404
404
|
}
|
|
405
|
-
this.consumir(
|
|
405
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após cláusulas");
|
|
406
406
|
var corpo = this.resolverDeclaracao();
|
|
407
407
|
return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
|
|
408
408
|
}
|
|
@@ -414,68 +414,68 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
414
414
|
if (this.ciclos < 1) {
|
|
415
415
|
this.erro(this.simboloAnterior(), "'pausa' deve estar dentro de um loop.");
|
|
416
416
|
}
|
|
417
|
-
this.consumir(
|
|
417
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após 'pausa'.");
|
|
418
418
|
return new declaracoes_1.Sustar(this.simboloAtual());
|
|
419
419
|
};
|
|
420
420
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoContinua = function () {
|
|
421
421
|
if (this.ciclos < 1) {
|
|
422
422
|
this.erro(this.simboloAnterior(), "'continua' precisa estar em um laço de repetição.");
|
|
423
423
|
}
|
|
424
|
-
this.consumir(
|
|
424
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após 'continua'.");
|
|
425
425
|
return new declaracoes_1.Continua(this.simboloAtual());
|
|
426
426
|
};
|
|
427
427
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoRetorna = function () {
|
|
428
428
|
var palavraChave = this.simboloAnterior();
|
|
429
429
|
var valor = null;
|
|
430
|
-
if (!this.verificarTipoSimboloAtual(
|
|
430
|
+
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PONTO_E_VIRGULA)) {
|
|
431
431
|
valor = this.expressao();
|
|
432
432
|
}
|
|
433
|
-
this.consumir(
|
|
433
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após o retorno.");
|
|
434
434
|
return new declaracoes_1.Retorna(palavraChave, valor);
|
|
435
435
|
};
|
|
436
436
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoEscolha = function () {
|
|
437
437
|
try {
|
|
438
438
|
this.ciclos += 1;
|
|
439
|
-
this.consumir(
|
|
439
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '{' após 'escolha'.");
|
|
440
440
|
var condicao = this.expressao();
|
|
441
|
-
this.consumir(
|
|
442
|
-
this.consumir(
|
|
441
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado '}' após a condição de 'escolha'.");
|
|
442
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
|
|
443
443
|
var caminhos = [];
|
|
444
444
|
var caminhoPadrao = null;
|
|
445
|
-
while (!this.verificarSeSimboloAtualEIgualA(
|
|
445
|
+
while (!this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_DIREITA) &&
|
|
446
446
|
!this.estaNoFinal()) {
|
|
447
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
447
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CASO)) {
|
|
448
448
|
var caminhoCondicoes = [this.expressao()];
|
|
449
|
-
this.consumir(
|
|
450
|
-
while (this.verificarTipoSimboloAtual(
|
|
451
|
-
this.consumir(
|
|
449
|
+
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
|
|
450
|
+
while (this.verificarTipoSimboloAtual(egua_classico_1.default.CASO)) {
|
|
451
|
+
this.consumir(egua_classico_1.default.CASO, null);
|
|
452
452
|
caminhoCondicoes.push(this.expressao());
|
|
453
|
-
this.consumir(
|
|
453
|
+
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'caso'.");
|
|
454
454
|
}
|
|
455
455
|
var declaracoes = [];
|
|
456
456
|
do {
|
|
457
457
|
declaracoes.push(this.resolverDeclaracao());
|
|
458
|
-
} while (!this.verificarTipoSimboloAtual(
|
|
459
|
-
!this.verificarTipoSimboloAtual(
|
|
460
|
-
!this.verificarTipoSimboloAtual(
|
|
458
|
+
} while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CASO) &&
|
|
459
|
+
!this.verificarTipoSimboloAtual(egua_classico_1.default.PADRAO) &&
|
|
460
|
+
!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA));
|
|
461
461
|
caminhos.push({
|
|
462
462
|
condicoes: caminhoCondicoes,
|
|
463
463
|
declaracoes: declaracoes,
|
|
464
464
|
});
|
|
465
465
|
}
|
|
466
|
-
else if (this.verificarSeSimboloAtualEIgualA(
|
|
466
|
+
else if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PADRAO)) {
|
|
467
467
|
if (caminhoPadrao !== null) {
|
|
468
468
|
var excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simboloAtual(), "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
|
|
469
469
|
this.erros.push(excecao);
|
|
470
470
|
throw excecao;
|
|
471
471
|
}
|
|
472
|
-
this.consumir(
|
|
472
|
+
this.consumir(egua_classico_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'padrao'.");
|
|
473
473
|
var declaracoes = [];
|
|
474
474
|
do {
|
|
475
475
|
declaracoes.push(this.resolverDeclaracao());
|
|
476
|
-
} while (!this.verificarTipoSimboloAtual(
|
|
477
|
-
!this.verificarTipoSimboloAtual(
|
|
478
|
-
!this.verificarTipoSimboloAtual(
|
|
476
|
+
} while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CASO) &&
|
|
477
|
+
!this.verificarTipoSimboloAtual(egua_classico_1.default.PADRAO) &&
|
|
478
|
+
!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA));
|
|
479
479
|
caminhoPadrao = {
|
|
480
480
|
declaracoes: declaracoes,
|
|
481
481
|
};
|
|
@@ -488,9 +488,9 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
488
488
|
}
|
|
489
489
|
};
|
|
490
490
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoImportar = function () {
|
|
491
|
-
this.consumir(
|
|
491
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
|
|
492
492
|
var caminho = this.expressao();
|
|
493
|
-
var simboloFechamento = this.consumir(
|
|
493
|
+
var simboloFechamento = this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
|
|
494
494
|
// tive que fazer isso para poder tipar a func expressão
|
|
495
495
|
// não sei isso e certo provavelmente não.
|
|
496
496
|
// o parametro valor no tipo literal esta como any
|
|
@@ -500,21 +500,21 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
500
500
|
return new declaracoes_1.Importar(caminho, simboloFechamento);
|
|
501
501
|
};
|
|
502
502
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoTente = function () {
|
|
503
|
-
this.consumir(
|
|
503
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'tente'.");
|
|
504
504
|
var tryBlock = this.blocoEscopo();
|
|
505
505
|
var catchBlock = null;
|
|
506
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
507
|
-
this.consumir(
|
|
506
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PEGUE)) {
|
|
507
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
508
508
|
catchBlock = this.blocoEscopo();
|
|
509
509
|
}
|
|
510
510
|
var elseBlock = null;
|
|
511
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
512
|
-
this.consumir(
|
|
511
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SENÃO)) {
|
|
512
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
513
513
|
elseBlock = this.blocoEscopo();
|
|
514
514
|
}
|
|
515
515
|
var finallyBlock = null;
|
|
516
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
517
|
-
this.consumir(
|
|
516
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FINALMENTE)) {
|
|
517
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
518
518
|
finallyBlock = this.blocoEscopo();
|
|
519
519
|
}
|
|
520
520
|
return new declaracoes_1.Tente(0, 0, tryBlock, catchBlock, elseBlock, finallyBlock);
|
|
@@ -523,10 +523,10 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
523
523
|
try {
|
|
524
524
|
this.ciclos += 1;
|
|
525
525
|
var caminhoFazer = this.resolverDeclaracao();
|
|
526
|
-
this.consumir(
|
|
527
|
-
this.consumir(
|
|
526
|
+
this.consumir(egua_classico_1.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
527
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração 'enquanto'.");
|
|
528
528
|
var condicaoEnquanto = this.expressao();
|
|
529
|
-
this.consumir(
|
|
529
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração do 'enquanto'.");
|
|
530
530
|
return new declaracoes_1.Fazer(0, 0, caminhoFazer, condicaoEnquanto);
|
|
531
531
|
}
|
|
532
532
|
finally {
|
|
@@ -534,99 +534,99 @@ var AvaliadorSintaticoEguaClassico = /** @class */ (function () {
|
|
|
534
534
|
}
|
|
535
535
|
};
|
|
536
536
|
AvaliadorSintaticoEguaClassico.prototype.resolverDeclaracao = function () {
|
|
537
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
537
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.FAZER))
|
|
538
538
|
return this.declaracaoFazer();
|
|
539
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
539
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.TENTE))
|
|
540
540
|
return this.declaracaoTente();
|
|
541
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
541
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ESCOLHA))
|
|
542
542
|
return this.declaracaoEscolha();
|
|
543
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
543
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.RETORNA))
|
|
544
544
|
return this.declaracaoRetorna();
|
|
545
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
545
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CONTINUA))
|
|
546
546
|
return this.declaracaoContinua();
|
|
547
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
547
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PAUSA))
|
|
548
548
|
return this.declaracaoSustar();
|
|
549
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
549
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.PARA))
|
|
550
550
|
return this.declaracaoPara();
|
|
551
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
551
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ENQUANTO))
|
|
552
552
|
return this.declaracaoEnquanto();
|
|
553
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
553
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.SE))
|
|
554
554
|
return this.declaracaoSe();
|
|
555
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
555
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.ESCREVA))
|
|
556
556
|
return this.declaracaoEscreva();
|
|
557
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
557
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CHAVE_ESQUERDA))
|
|
558
558
|
return new declaracoes_1.Bloco(0, 0, this.blocoEscopo());
|
|
559
559
|
return this.declaracaoExpressao();
|
|
560
560
|
};
|
|
561
561
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoDeVariavel = function () {
|
|
562
|
-
var nome = this.consumir(
|
|
562
|
+
var nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
|
|
563
563
|
var inicializador = null;
|
|
564
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
564
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IGUAL)) {
|
|
565
565
|
inicializador = this.expressao();
|
|
566
566
|
}
|
|
567
|
-
this.consumir(
|
|
567
|
+
this.consumir(egua_classico_1.default.PONTO_E_VIRGULA, "Esperado ';' após a declaração da variável.");
|
|
568
568
|
return new declaracoes_1.Var(nome, inicializador);
|
|
569
569
|
};
|
|
570
570
|
AvaliadorSintaticoEguaClassico.prototype.funcao = function (kind) {
|
|
571
|
-
var nome = this.consumir(
|
|
571
|
+
var nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, "Esperado nome ".concat(kind, "."));
|
|
572
572
|
return new declaracoes_1.FuncaoDeclaracao(nome, this.corpoDaFuncao(kind));
|
|
573
573
|
};
|
|
574
574
|
AvaliadorSintaticoEguaClassico.prototype.corpoDaFuncao = function (kind) {
|
|
575
|
-
this.consumir(
|
|
575
|
+
this.consumir(egua_classico_1.default.PARENTESE_ESQUERDO, "Esperado '(' ap\u00F3s o nome ".concat(kind, "."));
|
|
576
576
|
var parametros = [];
|
|
577
|
-
if (!this.verificarTipoSimboloAtual(
|
|
577
|
+
if (!this.verificarTipoSimboloAtual(egua_classico_1.default.PARENTESE_DIREITO)) {
|
|
578
578
|
do {
|
|
579
579
|
if (parametros.length >= 255) {
|
|
580
580
|
this.erro(this.simboloAtual(), 'Não pode haver mais de 255 parâmetros');
|
|
581
581
|
}
|
|
582
582
|
var parametro = {};
|
|
583
|
-
if (this.simboloAtual().tipo ===
|
|
584
|
-
this.consumir(
|
|
583
|
+
if (this.simboloAtual().tipo === egua_classico_1.default.MULTIPLICACAO) {
|
|
584
|
+
this.consumir(egua_classico_1.default.MULTIPLICACAO, null);
|
|
585
585
|
parametro['tipo'] = 'estrela';
|
|
586
586
|
}
|
|
587
587
|
else {
|
|
588
588
|
parametro['tipo'] = 'padrao';
|
|
589
589
|
}
|
|
590
|
-
parametro['nome'] = this.consumir(
|
|
591
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
590
|
+
parametro['nome'] = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
|
|
591
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.IGUAL)) {
|
|
592
592
|
parametro['padrao'] = this.primario();
|
|
593
593
|
}
|
|
594
594
|
parametros.push(parametro);
|
|
595
595
|
if (parametro['tipo'] === 'estrela')
|
|
596
596
|
break;
|
|
597
|
-
} while (this.verificarSeSimboloAtualEIgualA(
|
|
597
|
+
} while (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VIRGULA));
|
|
598
598
|
}
|
|
599
|
-
this.consumir(
|
|
600
|
-
this.consumir(
|
|
599
|
+
this.consumir(egua_classico_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
600
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do ".concat(kind, "."));
|
|
601
601
|
var corpo = this.blocoEscopo();
|
|
602
602
|
return new construtos_1.FuncaoConstruto(this.hashArquivo, 0, parametros, corpo);
|
|
603
603
|
};
|
|
604
604
|
AvaliadorSintaticoEguaClassico.prototype.declaracaoDeClasse = function () {
|
|
605
|
-
var nome = this.consumir(
|
|
605
|
+
var nome = this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
|
|
606
606
|
var superClasse = null;
|
|
607
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
608
|
-
this.consumir(
|
|
607
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.HERDA)) {
|
|
608
|
+
this.consumir(egua_classico_1.default.IDENTIFICADOR, 'Esperado nome da SuperClasse.');
|
|
609
609
|
superClasse = new construtos_1.Variavel(this.hashArquivo, this.simboloAnterior());
|
|
610
610
|
}
|
|
611
|
-
this.consumir(
|
|
611
|
+
this.consumir(egua_classico_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
|
|
612
612
|
var metodos = [];
|
|
613
|
-
while (!this.verificarTipoSimboloAtual(
|
|
613
|
+
while (!this.verificarTipoSimboloAtual(egua_classico_1.default.CHAVE_DIREITA) &&
|
|
614
614
|
!this.estaNoFinal()) {
|
|
615
615
|
metodos.push(this.funcao('método'));
|
|
616
616
|
}
|
|
617
|
-
this.consumir(
|
|
617
|
+
this.consumir(egua_classico_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
618
618
|
return new declaracoes_1.Classe(nome, superClasse, metodos);
|
|
619
619
|
};
|
|
620
620
|
AvaliadorSintaticoEguaClassico.prototype.declaracao = function () {
|
|
621
621
|
try {
|
|
622
|
-
if (this.verificarTipoSimboloAtual(
|
|
623
|
-
this.verificarTipoProximoSimbolo(
|
|
624
|
-
this.consumir(
|
|
622
|
+
if (this.verificarTipoSimboloAtual(egua_classico_1.default.FUNÇÃO) &&
|
|
623
|
+
this.verificarTipoProximoSimbolo(egua_classico_1.default.IDENTIFICADOR)) {
|
|
624
|
+
this.consumir(egua_classico_1.default.FUNÇÃO, null);
|
|
625
625
|
return this.funcao('função');
|
|
626
626
|
}
|
|
627
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
627
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.VARIAVEL))
|
|
628
628
|
return this.declaracaoDeVariavel();
|
|
629
|
-
if (this.verificarSeSimboloAtualEIgualA(
|
|
629
|
+
if (this.verificarSeSimboloAtualEIgualA(egua_classico_1.default.CLASSE))
|
|
630
630
|
return this.declaracaoDeClasse();
|
|
631
631
|
return this.resolverDeclaracao();
|
|
632
632
|
}
|