@designliquido/delegua 0.72.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analisador-semantico/analisador-semantico.js +1 -1
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +4 -4
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts +34 -34
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js +35 -34
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts +77 -73
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +266 -245
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts +14 -14
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js +29 -28
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +3 -3
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +13 -13
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +17 -17
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts +41 -40
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +208 -140
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts +13 -13
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js +25 -25
- package/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-ipt.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts +37 -38
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +105 -110
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts +35 -35
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +98 -101
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js +3 -3
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts +3 -2
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +92 -151
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts +3 -2
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +20 -25
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts +6 -0
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +23 -0
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +16 -0
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
- package/bibliotecas/primitivas-tupla.d.ts +6 -0
- package/bibliotecas/primitivas-tupla.d.ts.map +1 -0
- package/bibliotecas/primitivas-tupla.js +45 -0
- package/bibliotecas/primitivas-tupla.js.map +1 -0
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +38 -0
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/dicionario.d.ts +2 -1
- package/construtos/dicionario.d.ts.map +1 -1
- package/construtos/dicionario.js +2 -1
- package/construtos/dicionario.js.map +1 -1
- package/construtos/literal.d.ts +1 -1
- package/construtos/literal.d.ts.map +1 -1
- package/construtos/literal.js +4 -0
- package/construtos/literal.js.map +1 -1
- package/estilizador/regras/index.d.ts +1 -0
- package/estilizador/regras/index.d.ts.map +1 -1
- package/estilizador/regras/index.js +1 -0
- package/estilizador/regras/index.js.map +1 -1
- package/estilizador/regras/paradigma-consistente.d.ts +45 -0
- package/estilizador/regras/paradigma-consistente.d.ts.map +1 -0
- package/estilizador/regras/paradigma-consistente.js +89 -0
- package/estilizador/regras/paradigma-consistente.js.map +1 -0
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js +10 -3
- package/formatadores/formatador-delegua.js.map +1 -1
- package/interfaces/avaliador-sintatico-interface.d.ts +1 -1
- package/interfaces/avaliador-sintatico-interface.d.ts.map +1 -1
- package/interpretador/dialetos/calango/index.d.ts +2 -0
- package/interpretador/dialetos/calango/index.d.ts.map +1 -0
- package/interpretador/dialetos/calango/index.js +18 -0
- package/interpretador/dialetos/calango/index.js.map +1 -0
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/index.d.ts +2 -0
- package/interpretador/dialetos/index.d.ts.map +1 -1
- package/interpretador/dialetos/index.js +2 -0
- package/interpretador/dialetos/index.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +19 -0
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +2 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +42 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +3 -4
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +60 -15
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +53 -23
- package/interpretador/interpretador.js.map +1 -1
- package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
- package/lexador/dialetos/lexador-pitugues.js +8 -0
- package/lexador/dialetos/lexador-pitugues.js.map +1 -1
- package/lexador/filtro-paradigma.d.ts +15 -0
- package/lexador/filtro-paradigma.d.ts.map +1 -0
- package/lexador/filtro-paradigma.js +51 -0
- package/lexador/filtro-paradigma.js.map +1 -0
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js +4 -0
- package/lexador/lexador.js.map +1 -1
- package/lexador/mapeamento-paradigmas.d.ts +47 -0
- package/lexador/mapeamento-paradigmas.d.ts.map +1 -0
- package/lexador/mapeamento-paradigmas.js +183 -0
- package/lexador/mapeamento-paradigmas.js.map +1 -0
- package/package.json +1 -1
- package/tipos-de-simbolos/delegua.d.ts +1 -0
- package/tipos-de-simbolos/delegua.d.ts.map +1 -1
- package/tipos-de-simbolos/delegua.js +1 -0
- package/tipos-de-simbolos/delegua.js.map +1 -1
- package/tipos-de-simbolos/pitugues.d.ts +2 -0
- package/tipos-de-simbolos/pitugues.d.ts.map +1 -1
- package/tipos-de-simbolos/pitugues.js +2 -0
- package/tipos-de-simbolos/pitugues.js.map +1 -1
- package/tradutores/tradutor-assembly-x64.js +122 -122
- package/tradutores/tradutor-assemblyscript.js +1 -1
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-calango.d.ts +4 -3
- package/tradutores/tradutor-calango.d.ts.map +1 -1
- package/tradutores/tradutor-calango.js +7 -14
- package/tradutores/tradutor-calango.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +12 -5
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-mermaidjs.js +1 -1
- package/tradutores/tradutor-mermaidjs.js.map +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
- package/tradutores/tradutor-portugol-ipt.js +3 -3
- package/tradutores/tradutor-portugol-ipt.js.map +1 -1
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +12 -5
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-tenda.js +1 -1
- package/tradutores/tradutor-reverso-tenda.js.map +1 -1
- package/umd/delegua.js +1827 -1584
|
@@ -87,13 +87,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
87
87
|
}
|
|
88
88
|
return tipoElementarResolvido;
|
|
89
89
|
}
|
|
90
|
-
obterChaveDicionario() {
|
|
90
|
+
async obterChaveDicionario() {
|
|
91
91
|
switch (this.simbolos[this.atual].tipo) {
|
|
92
92
|
case tenda_1.default.NUMERO:
|
|
93
93
|
case tenda_1.default.TEXTO:
|
|
94
94
|
case tenda_1.default.FALSO:
|
|
95
95
|
case tenda_1.default.VERDADEIRO:
|
|
96
|
-
return this.primario();
|
|
96
|
+
return await this.primario();
|
|
97
97
|
case tenda_1.default.IDENTIFICADOR:
|
|
98
98
|
const simboloIdentificador = this.avancarEDevolverAnterior();
|
|
99
99
|
let tipoOperando;
|
|
@@ -117,7 +117,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
117
117
|
throw this.erro(this.simbolos[this.atual], `Símbolo ${this.simbolos[this.atual].tipo} inesperado ou inválido como chave de dicionário.`);
|
|
118
118
|
}
|
|
119
119
|
}
|
|
120
|
-
construtoDicionario(simboloChaveEsquerda) {
|
|
120
|
+
async construtoDicionario(simboloChaveEsquerda) {
|
|
121
121
|
this.avancarEDevolverAnterior();
|
|
122
122
|
const chaves = [];
|
|
123
123
|
const valores = [];
|
|
@@ -125,9 +125,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
125
125
|
return new construtos_1.Dicionario(this.hashArquivo, Number(simboloChaveEsquerda.linha), [], []);
|
|
126
126
|
}
|
|
127
127
|
while (!this.verificarSeSimboloAtualEIgualA(tenda_1.default.CHAVE_DIREITA)) {
|
|
128
|
-
const chave = this.obterChaveDicionario();
|
|
128
|
+
const chave = await this.obterChaveDicionario();
|
|
129
129
|
this.consumir(tenda_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
|
|
130
|
-
const valor = this.atribuir();
|
|
130
|
+
const valor = await this.atribuir();
|
|
131
131
|
chaves.push(chave);
|
|
132
132
|
valores.push(valor);
|
|
133
133
|
if (this.simbolos[this.atual].tipo !== tenda_1.default.CHAVE_DIREITA) {
|
|
@@ -136,23 +136,23 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
136
136
|
}
|
|
137
137
|
return new construtos_1.Dicionario(this.hashArquivo, Number(simboloChaveEsquerda.linha), chaves, valores);
|
|
138
138
|
}
|
|
139
|
-
construtoTupla() {
|
|
140
|
-
const expressao = this.expressao();
|
|
139
|
+
async construtoTupla() {
|
|
140
|
+
const expressao = await this.expressao();
|
|
141
141
|
const argumentos = [expressao];
|
|
142
142
|
while (this.simbolos[this.atual].tipo === tenda_1.default.VIRGULA) {
|
|
143
143
|
this.avancarEDevolverAnterior();
|
|
144
|
-
argumentos.push(this.expressao());
|
|
144
|
+
argumentos.push(await this.expressao());
|
|
145
145
|
}
|
|
146
146
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
147
147
|
this.consumir(tenda_1.default.COLCHETE_DIREITO, "Esperado ']' após a expressão.");
|
|
148
148
|
return new tuplas_1.SeletorTuplas(...argumentos);
|
|
149
149
|
}
|
|
150
|
-
primario() {
|
|
150
|
+
async primario() {
|
|
151
151
|
const simboloAtual = this.simbolos[this.atual];
|
|
152
152
|
let valores = [];
|
|
153
153
|
switch (simboloAtual.tipo) {
|
|
154
154
|
case tenda_1.default.CHAVE_ESQUERDA:
|
|
155
|
-
return this.construtoDicionario(simboloAtual);
|
|
155
|
+
return await this.construtoDicionario(simboloAtual);
|
|
156
156
|
case tenda_1.default.COLCHETE_ESQUERDO:
|
|
157
157
|
this.avancarEDevolverAnterior();
|
|
158
158
|
valores = [];
|
|
@@ -161,9 +161,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
161
161
|
}
|
|
162
162
|
while (!this.verificarSeSimboloAtualEIgualA(tenda_1.default.COLCHETE_DIREITO)) {
|
|
163
163
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
|
|
164
|
-
return this.construtoTupla();
|
|
164
|
+
return await this.construtoTupla();
|
|
165
165
|
}
|
|
166
|
-
const valor = this.atribuir();
|
|
166
|
+
const valor = await this.atribuir();
|
|
167
167
|
valores.push(valor);
|
|
168
168
|
if (this.simbolos[this.atual].tipo !== tenda_1.default.COLCHETE_DIREITO) {
|
|
169
169
|
this.consumir(tenda_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
@@ -194,7 +194,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
194
194
|
// Avançamos o parêntese esquerdo aqui, porque `corpoDaFuncao`
|
|
195
195
|
// espera que esse parêntese esquerdo já foi consumido.
|
|
196
196
|
this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado parêntese esquerdo após palavra reservada 'função'.");
|
|
197
|
-
const corpoDaFuncao = this.corpoDaFuncao(simboloFuncao.lexema);
|
|
197
|
+
const corpoDaFuncao = await this.corpoDaFuncao(simboloFuncao.lexema);
|
|
198
198
|
this.pilhaEscopos.definirInformacoesVariavel(simboloFuncao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloFuncao.lexema, 'função'));
|
|
199
199
|
return corpoDaFuncao;
|
|
200
200
|
case tenda_1.default.IDENTIFICADOR:
|
|
@@ -229,7 +229,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
229
229
|
return new construtos_1.Literal(this.hashArquivo, Number(simboloNumeroTexto.linha), simboloNumeroTexto.literal, tipoDadosElementar);
|
|
230
230
|
case tenda_1.default.PARENTESE_ESQUERDO:
|
|
231
231
|
this.avancarEDevolverAnterior();
|
|
232
|
-
const expressao = this.expressao();
|
|
232
|
+
const expressao = await this.expressao();
|
|
233
233
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
234
234
|
return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
|
|
235
235
|
case tenda_1.default.SUPER:
|
|
@@ -244,12 +244,12 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
244
244
|
}
|
|
245
245
|
throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
|
|
246
246
|
}
|
|
247
|
-
chamar() {
|
|
248
|
-
let expressao = this.primario();
|
|
247
|
+
async chamar() {
|
|
248
|
+
let expressao = await this.primario();
|
|
249
249
|
while (true) {
|
|
250
250
|
let tipoPrimitiva = undefined;
|
|
251
251
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
|
|
252
|
-
expressao = this.finalizarChamada(expressao, tipoPrimitiva);
|
|
252
|
+
expressao = await this.finalizarChamada(expressao, tipoPrimitiva);
|
|
253
253
|
}
|
|
254
254
|
else if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO)) {
|
|
255
255
|
const nome = this.consumir(tenda_1.default.IDENTIFICADOR, "Esperado nome de método ou propriedade após '.'.");
|
|
@@ -257,7 +257,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
257
257
|
expressao = new construtos_1.AcessoMetodoOuPropriedade(this.hashArquivo, expressao, nome);
|
|
258
258
|
}
|
|
259
259
|
else if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.COLCHETE_ESQUERDO)) {
|
|
260
|
-
const indice = this.expressao();
|
|
260
|
+
const indice = await this.expressao();
|
|
261
261
|
const simboloFechamento = this.consumir(tenda_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
262
262
|
expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
|
|
263
263
|
}
|
|
@@ -387,17 +387,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
387
387
|
}
|
|
388
388
|
return entidadeChamada;
|
|
389
389
|
}
|
|
390
|
-
declaracaoDeFuncao(identificador) {
|
|
390
|
+
async declaracaoDeFuncao(identificador) {
|
|
391
391
|
// Se houver chamadas recursivas à função, precisamos definir um tipo
|
|
392
392
|
// para ela. Vai ser atualizado após avaliação do corpo da função.
|
|
393
393
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, 'qualquer'));
|
|
394
|
-
const corpoDaFuncao = this.corpoDaFuncao('implícita');
|
|
394
|
+
const corpoDaFuncao = await this.corpoDaFuncao('implícita');
|
|
395
395
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, corpoDaFuncao.tipo));
|
|
396
396
|
const funcaoDeclaracao = new declaracoes_1.FuncaoDeclaracao(identificador, corpoDaFuncao, corpoDaFuncao.tipo);
|
|
397
397
|
this.pilhaEscopos.registrarReferenciaFuncao(identificador.lexema, funcaoDeclaracao);
|
|
398
398
|
return funcaoDeclaracao;
|
|
399
399
|
}
|
|
400
|
-
finalizarChamada(entidadeChamada, tipoPrimitiva = undefined) {
|
|
400
|
+
async finalizarChamada(entidadeChamada, tipoPrimitiva = undefined) {
|
|
401
401
|
const argumentos = [];
|
|
402
402
|
if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
|
|
403
403
|
do {
|
|
@@ -405,7 +405,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
405
405
|
if (argumentos.length >= 255) {
|
|
406
406
|
throw this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 argumentos.');
|
|
407
407
|
}
|
|
408
|
-
argumentos.push(this.expressao());
|
|
408
|
+
argumentos.push(await this.expressao());
|
|
409
409
|
} while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
|
|
410
410
|
}
|
|
411
411
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
|
|
@@ -416,19 +416,19 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
416
416
|
construtoChamada.tipo = 'qualquer';
|
|
417
417
|
return construtoChamada;
|
|
418
418
|
}
|
|
419
|
-
unario() {
|
|
419
|
+
async unario() {
|
|
420
420
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.NÃO, tenda_1.default.SUBTRACAO, tenda_1.default.BIT_NOT, tenda_1.default.INCREMENTAR, tenda_1.default.DECREMENTAR)) {
|
|
421
421
|
const operador = this.simbolos[this.atual - 1];
|
|
422
|
-
const direito = this.unario();
|
|
422
|
+
const direito = await this.unario();
|
|
423
423
|
return new construtos_1.Unario(this.hashArquivo, operador, direito, 'ANTES');
|
|
424
424
|
}
|
|
425
|
-
return this.chamar();
|
|
425
|
+
return await this.chamar();
|
|
426
426
|
}
|
|
427
|
-
multiplicar() {
|
|
428
|
-
let expressao = this.exponenciacao();
|
|
427
|
+
async multiplicar() {
|
|
428
|
+
let expressao = await this.exponenciacao();
|
|
429
429
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.DIVISAO, tenda_1.default.DIVISAO_INTEIRA, tenda_1.default.MODULO, tenda_1.default.MULTIPLICACAO)) {
|
|
430
430
|
const operador = this.simbolos[this.atual - 1];
|
|
431
|
-
const direito = this.exponenciacao();
|
|
431
|
+
const direito = await this.exponenciacao();
|
|
432
432
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
433
433
|
}
|
|
434
434
|
return expressao;
|
|
@@ -438,53 +438,53 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
438
438
|
* ser avaliado pelo Interpretador.
|
|
439
439
|
* @returns Um Construto, normalmente um `Binario`, ou `Unario` se houver alguma operação unária para ser avaliada.
|
|
440
440
|
*/
|
|
441
|
-
adicaoOuSubtracao() {
|
|
442
|
-
let expressao = this.multiplicar();
|
|
441
|
+
async adicaoOuSubtracao() {
|
|
442
|
+
let expressao = await this.multiplicar();
|
|
443
443
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.SUBTRACAO, tenda_1.default.ADICAO)) {
|
|
444
444
|
const operador = this.simbolos[this.atual - 1];
|
|
445
|
-
const direito = this.multiplicar();
|
|
445
|
+
const direito = await this.multiplicar();
|
|
446
446
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
447
447
|
}
|
|
448
448
|
return expressao;
|
|
449
449
|
}
|
|
450
|
-
bitShift() {
|
|
451
|
-
let expressao = this.adicaoOuSubtracao();
|
|
450
|
+
async bitShift() {
|
|
451
|
+
let expressao = await this.adicaoOuSubtracao();
|
|
452
452
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.MENOR_MENOR, tenda_1.default.MAIOR_MAIOR)) {
|
|
453
453
|
const operador = this.simbolos[this.atual - 1];
|
|
454
|
-
const direito = this.adicaoOuSubtracao();
|
|
454
|
+
const direito = await this.adicaoOuSubtracao();
|
|
455
455
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
456
456
|
}
|
|
457
457
|
return expressao;
|
|
458
458
|
}
|
|
459
|
-
bitE() {
|
|
460
|
-
let expressao = this.bitShift();
|
|
459
|
+
async bitE() {
|
|
460
|
+
let expressao = await this.bitShift();
|
|
461
461
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.BIT_AND)) {
|
|
462
462
|
const operador = this.simbolos[this.atual - 1];
|
|
463
|
-
const direito = this.bitShift();
|
|
463
|
+
const direito = await this.bitShift();
|
|
464
464
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
465
465
|
}
|
|
466
466
|
return expressao;
|
|
467
467
|
}
|
|
468
|
-
bitOu() {
|
|
469
|
-
let expressao = this.bitE();
|
|
468
|
+
async bitOu() {
|
|
469
|
+
let expressao = await this.bitE();
|
|
470
470
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.BIT_OR, tenda_1.default.BIT_XOR)) {
|
|
471
471
|
const operador = this.simbolos[this.atual - 1];
|
|
472
|
-
const direito = this.bitE();
|
|
472
|
+
const direito = await this.bitE();
|
|
473
473
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
474
474
|
}
|
|
475
475
|
return expressao;
|
|
476
476
|
}
|
|
477
|
-
comparar() {
|
|
478
|
-
let expressao = this.bitOu();
|
|
477
|
+
async comparar() {
|
|
478
|
+
let expressao = await this.bitOu();
|
|
479
479
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.MAIOR, tenda_1.default.MAIOR_IGUAL, tenda_1.default.MENOR, tenda_1.default.MENOR_IGUAL)) {
|
|
480
480
|
const operador = this.simbolos[this.atual - 1];
|
|
481
|
-
const direito = this.bitOu();
|
|
481
|
+
const direito = await this.bitOu();
|
|
482
482
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
483
483
|
}
|
|
484
484
|
return expressao;
|
|
485
485
|
}
|
|
486
|
-
comparacaoIgualdade() {
|
|
487
|
-
let expressao = this.comparar();
|
|
486
|
+
async comparacaoIgualdade() {
|
|
487
|
+
let expressao = await this.comparar();
|
|
488
488
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.NÃO, tenda_1.default.É)) {
|
|
489
489
|
const operador = this.simbolos[this.atual - 1];
|
|
490
490
|
if (operador.tipo === tenda_1.default.NÃO) {
|
|
@@ -493,25 +493,25 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
493
493
|
operador.lexema = 'não é';
|
|
494
494
|
operador.literal = 'não é';
|
|
495
495
|
}
|
|
496
|
-
const direito = this.comparar();
|
|
496
|
+
const direito = await this.comparar();
|
|
497
497
|
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
498
498
|
}
|
|
499
499
|
return expressao;
|
|
500
500
|
}
|
|
501
|
-
em() {
|
|
502
|
-
let expressao = this.comparacaoIgualdade();
|
|
501
|
+
async em() {
|
|
502
|
+
let expressao = await this.comparacaoIgualdade();
|
|
503
503
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.TEM)) {
|
|
504
504
|
const operador = this.simbolos[this.atual - 1];
|
|
505
|
-
const direito = this.comparacaoIgualdade();
|
|
505
|
+
const direito = await this.comparacaoIgualdade();
|
|
506
506
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
507
507
|
}
|
|
508
508
|
return expressao;
|
|
509
509
|
}
|
|
510
|
-
e() {
|
|
511
|
-
let expressao = this.em();
|
|
510
|
+
async e() {
|
|
511
|
+
let expressao = await this.em();
|
|
512
512
|
while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.E)) {
|
|
513
513
|
const operador = this.simbolos[this.atual - 1];
|
|
514
|
-
const direito = this.em();
|
|
514
|
+
const direito = await this.em();
|
|
515
515
|
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
516
516
|
}
|
|
517
517
|
return expressao;
|
|
@@ -520,11 +520,11 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
520
520
|
* Método que resolve atribuições.
|
|
521
521
|
* @returns Um construto do tipo `Atribuir`, `Conjunto` ou `AtribuicaoPorIndice`.
|
|
522
522
|
*/
|
|
523
|
-
atribuir() {
|
|
524
|
-
const expressao = this.ou();
|
|
523
|
+
async atribuir() {
|
|
524
|
+
const expressao = await this.ou();
|
|
525
525
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.IGUAL)) {
|
|
526
526
|
const igual = this.simbolos[this.atual - 1];
|
|
527
|
-
const valor = this.
|
|
527
|
+
const valor = await this.atribuir();
|
|
528
528
|
switch (expressao.constructor) {
|
|
529
529
|
case construtos_1.Variavel:
|
|
530
530
|
return new construtos_1.Atribuir(this.hashArquivo, expressao, valor);
|
|
@@ -543,27 +543,27 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
543
543
|
* Declaração para comando `leia`, para ler dados de entrada do usuário.
|
|
544
544
|
* @returns Um objeto da classe `Leia`.
|
|
545
545
|
*/
|
|
546
|
-
expressaoLeia() {
|
|
546
|
+
async expressaoLeia() {
|
|
547
547
|
const simboloLeia = this.avancarEDevolverAnterior();
|
|
548
548
|
this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos argumentos em instrução `leia`.");
|
|
549
549
|
const argumentos = [];
|
|
550
550
|
if (this.simbolos[this.atual].tipo !== tenda_1.default.PARENTESE_DIREITO) {
|
|
551
551
|
do {
|
|
552
|
-
argumentos.push(this.expressao());
|
|
552
|
+
argumentos.push(await this.expressao());
|
|
553
553
|
} while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
|
|
554
554
|
}
|
|
555
555
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos em instrução `leia`.");
|
|
556
556
|
return new construtos_1.Leia(simboloLeia, argumentos);
|
|
557
557
|
}
|
|
558
558
|
// TODO: Depreciar.
|
|
559
|
-
expressao() {
|
|
560
|
-
return this.atribuir();
|
|
559
|
+
async expressao() {
|
|
560
|
+
return await this.atribuir();
|
|
561
561
|
}
|
|
562
|
-
blocoEscopo(tipo) {
|
|
562
|
+
async blocoEscopo(tipo) {
|
|
563
563
|
this.pilhaEscopos.empilhar(new informacao_escopo_1.InformacaoEscopo());
|
|
564
564
|
let declaracoes = [];
|
|
565
565
|
while (!this.verificarTipoSimboloAtual(tenda_1.default.FIM) && !this.estaNoFinal()) {
|
|
566
|
-
const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
|
|
566
|
+
const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
|
|
567
567
|
if (Array.isArray(retornoDeclaracao)) {
|
|
568
568
|
declaracoes = declaracoes.concat(retornoDeclaracao);
|
|
569
569
|
}
|
|
@@ -587,26 +587,26 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
587
587
|
this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
|
|
588
588
|
return new declaracoes_1.Continua(this.simbolos[this.atual - 1]);
|
|
589
589
|
}
|
|
590
|
-
declaracaoEnquanto() {
|
|
590
|
+
async declaracaoEnquanto() {
|
|
591
591
|
try {
|
|
592
592
|
const simboloEnquanto = this.simbolos[this.atual - 1];
|
|
593
593
|
this.blocos += 1;
|
|
594
|
-
const condicao = this.expressao();
|
|
594
|
+
const condicao = await this.expressao();
|
|
595
595
|
this.consumir(tenda_1.default.FAÇA, "Esperado 'faça' depois da condição.");
|
|
596
|
-
const blocoCorpo = this.blocoEscopo('enquanto');
|
|
596
|
+
const blocoCorpo = await this.blocoEscopo('enquanto');
|
|
597
597
|
return new declaracoes_1.Enquanto(condicao, new declaracoes_1.Bloco(simboloEnquanto.linha, simboloEnquanto.hashArquivo, blocoCorpo));
|
|
598
598
|
}
|
|
599
599
|
finally {
|
|
600
600
|
this.blocos -= 1;
|
|
601
601
|
}
|
|
602
602
|
}
|
|
603
|
-
declaracaoEscreva() {
|
|
603
|
+
async declaracaoEscreva() {
|
|
604
604
|
const simboloAtual = this.simbolos[this.atual];
|
|
605
605
|
this.consumir(tenda_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
606
606
|
const argumentos = [];
|
|
607
607
|
if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
|
|
608
608
|
do {
|
|
609
|
-
argumentos.push(this.expressao());
|
|
609
|
+
argumentos.push(await this.expressao());
|
|
610
610
|
} while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
|
|
611
611
|
}
|
|
612
612
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
|
|
@@ -614,13 +614,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
614
614
|
// this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PONTO_E_VIRGULA);
|
|
615
615
|
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
|
|
616
616
|
}
|
|
617
|
-
declaracaoExpressao() {
|
|
618
|
-
const expressao = this.expressao();
|
|
617
|
+
async declaracaoExpressao() {
|
|
618
|
+
const expressao = await this.expressao();
|
|
619
619
|
// Ponto-e-vírgula é opcional aqui.
|
|
620
620
|
this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
|
|
621
621
|
return new declaracoes_1.Expressao(expressao);
|
|
622
622
|
}
|
|
623
|
-
declaracaoPara() {
|
|
623
|
+
async declaracaoPara() {
|
|
624
624
|
const simboloPara = this.simbolos[this.atual - 1];
|
|
625
625
|
this.consumir(tenda_1.default.CADA, `Esperado palavra reservada 'cada' após 'para'.`);
|
|
626
626
|
this.blocos += 1;
|
|
@@ -628,17 +628,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
628
628
|
this.consumir(tenda_1.default.EM, "Esperado palavra reservada 'em' após variável de iteração em instrução 'para cada'.");
|
|
629
629
|
// Se for um literal ou identificador numérico, segue um `para`
|
|
630
630
|
// tradicional de Delégua, com variável de controle e passo positivo, incrementado em 1.
|
|
631
|
-
const literalOuVariavelInicio = this.adicaoOuSubtracao();
|
|
631
|
+
const literalOuVariavelInicio = await this.adicaoOuSubtracao();
|
|
632
632
|
this.blocos -= 1;
|
|
633
633
|
switch (literalOuVariavelInicio.constructor) {
|
|
634
634
|
case construtos_1.Literal:
|
|
635
|
-
return this.declaracaoParaTradicional(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
|
|
635
|
+
return await this.declaracaoParaTradicional(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
|
|
636
636
|
// TODO: Terminar
|
|
637
637
|
default:
|
|
638
|
-
return this.declaracaoParaCada(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
|
|
638
|
+
return await this.declaracaoParaCada(simboloPara, nomeVariavelIteracao, literalOuVariavelInicio);
|
|
639
639
|
}
|
|
640
640
|
}
|
|
641
|
-
declaracaoParaCada(simboloParaCada, simboloVariavelIteracao, literalOuVariavelIteravel) {
|
|
641
|
+
async declaracaoParaCada(simboloParaCada, simboloVariavelIteracao, literalOuVariavelIteravel) {
|
|
642
642
|
const tipoVetor = literalOuVariavelIteravel.tipo;
|
|
643
643
|
// TODO: Permitir 'qualquer' aqui é bastante frágil. Criar uma forma de validar o tipo
|
|
644
644
|
// antes dessa avaliação.
|
|
@@ -651,17 +651,17 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
651
651
|
}
|
|
652
652
|
this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, tipoVariavelIteracao));
|
|
653
653
|
this.consumir(tenda_1.default.FAÇA, "Esperado palavra reservada 'faça' após literal ou variável de iteração em declaração 'para cada'.");
|
|
654
|
-
const corpo = this.blocoEscopo();
|
|
654
|
+
const corpo = await this.blocoEscopo();
|
|
655
655
|
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloParaCada.linha), new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao), literalOuVariavelIteravel, new declaracoes_1.Bloco(simboloParaCada.hashArquivo, simboloParaCada.linha, corpo));
|
|
656
656
|
}
|
|
657
|
-
declaracaoParaTradicional(simboloPara, simboloVariavelIteracao, literalOuVariavelInicio) {
|
|
657
|
+
async declaracaoParaTradicional(simboloPara, simboloVariavelIteracao, literalOuVariavelInicio) {
|
|
658
658
|
this.consumir(tenda_1.default.ATÉ, "Esperado palavra reservada 'até' após literal ou identificador de início de declaração 'para cada'.");
|
|
659
|
-
const literalOuVariavelFim = this.adicaoOuSubtracao();
|
|
659
|
+
const literalOuVariavelFim = await this.adicaoOuSubtracao();
|
|
660
660
|
this.consumir(tenda_1.default.FAÇA, "Esperado palavra reservada 'faça' após literal ou variável de passo final em declaração 'para cada'.");
|
|
661
661
|
// A variável de iteração precisa ser definida aqui, para que o corpo de `para cada` (um escopo)
|
|
662
662
|
// seja capaz de reconhecer a variável e seu tipo.
|
|
663
663
|
this.pilhaEscopos.definirInformacoesVariavel(simboloVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloVariavelIteracao.lexema, 'inteiro'));
|
|
664
|
-
const corpo = this.blocoEscopo();
|
|
664
|
+
const corpo = await this.blocoEscopo();
|
|
665
665
|
// `variavelIteracao <= valorFinal`
|
|
666
666
|
let operadorCondicao = new simbolo_1.Simbolo(tenda_1.default.MENOR_IGUAL, '<=', null, Number(simboloPara.linha), this.hashArquivo);
|
|
667
667
|
let operadorCondicaoIncremento = new simbolo_1.Simbolo(tenda_1.default.MENOR, '<', null, Number(simboloPara.linha), this.hashArquivo);
|
|
@@ -673,7 +673,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
673
673
|
// Incremento, feito em construto especial `FimPara`.
|
|
674
674
|
new construtos_1.FimPara(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), operadorCondicaoIncremento, literalOuVariavelFim), new declaracoes_1.Expressao(new construtos_1.Atribuir(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), new construtos_1.Binario(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, simboloVariavelIteracao, 'inteiro'), new simbolo_1.Simbolo(tenda_1.default.ADICAO, '+', null, Number(simboloPara.linha), this.hashArquivo), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), 1))))), new declaracoes_1.Bloco(simboloPara.hashArquivo, simboloPara.linha, corpo));
|
|
675
675
|
}
|
|
676
|
-
declaracaoRetorna() {
|
|
676
|
+
async declaracaoRetorna() {
|
|
677
677
|
const simboloChave = this.simbolos[this.atual - 1];
|
|
678
678
|
let valor = null;
|
|
679
679
|
if ([
|
|
@@ -691,19 +691,19 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
691
691
|
tenda_1.default.TEXTO,
|
|
692
692
|
tenda_1.default.VERDADEIRO,
|
|
693
693
|
].includes(this.simbolos[this.atual].tipo)) {
|
|
694
|
-
valor = this.expressao();
|
|
694
|
+
valor = await this.expressao();
|
|
695
695
|
}
|
|
696
696
|
// Ponto-e-vírgula é opcional aqui.
|
|
697
697
|
this.verificarSeSimboloAtualEIgualA(tenda_1.default.PONTO_E_VIRGULA);
|
|
698
698
|
return new declaracoes_1.Retorna(simboloChave, valor);
|
|
699
699
|
}
|
|
700
|
-
declaracaoSe() {
|
|
701
|
-
const condicao = this.expressao();
|
|
700
|
+
async declaracaoSe() {
|
|
701
|
+
const condicao = await this.expressao();
|
|
702
702
|
this.consumir(tenda_1.default.ENTÃO, "Esperado 'então' após a condição.");
|
|
703
|
-
const caminhoEntao = this.resolverDeclaracao();
|
|
703
|
+
const caminhoEntao = await this.resolverDeclaracao();
|
|
704
704
|
let caminhoSenao = null;
|
|
705
705
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.SENÃO)) {
|
|
706
|
-
caminhoSenao = this.resolverDeclaracao();
|
|
706
|
+
caminhoSenao = await this.resolverDeclaracao();
|
|
707
707
|
}
|
|
708
708
|
return new declaracoes_1.Se(condicao, caminhoEntao, [], caminhoSenao);
|
|
709
709
|
}
|
|
@@ -723,7 +723,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
723
723
|
* @see resolverDeclaracaoForaDeBloco para as declarações que não podem
|
|
724
724
|
* ocorrer em blocos de escopo elementares.
|
|
725
725
|
*/
|
|
726
|
-
resolverDeclaracao() {
|
|
726
|
+
async resolverDeclaracao() {
|
|
727
727
|
switch (this.simbolos[this.atual].tipo) {
|
|
728
728
|
case tenda_1.default.COMENTARIO:
|
|
729
729
|
return this.declaracaoComentarioUmaLinha();
|
|
@@ -738,7 +738,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
738
738
|
return this.declaracaoEscreva();
|
|
739
739
|
case tenda_1.default.FAÇA:
|
|
740
740
|
this.avancarEDevolverAnterior();
|
|
741
|
-
return this.blocoEscopo();
|
|
741
|
+
return await this.blocoEscopo();
|
|
742
742
|
case tenda_1.default.PARA:
|
|
743
743
|
this.avancarEDevolverAnterior();
|
|
744
744
|
return this.declaracaoPara();
|
|
@@ -754,7 +754,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
754
754
|
return this.declaracaoRetorna();
|
|
755
755
|
case tenda_1.default.TENTE:
|
|
756
756
|
this.avancarEDevolverAnterior();
|
|
757
|
-
return this.declaracaoTente();
|
|
757
|
+
return await this.declaracaoTente();
|
|
758
758
|
case tenda_1.default.SEJA:
|
|
759
759
|
this.avancarEDevolverAnterior();
|
|
760
760
|
return this.declaracaoDeVariaveisOuFuncoes();
|
|
@@ -771,7 +771,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
771
771
|
throw this.erro(this.simbolos[this.atual], 'Não é permitido ter dois identificadores seguidos na mesma linha.');
|
|
772
772
|
}
|
|
773
773
|
}
|
|
774
|
-
return this.declaracaoExpressao();
|
|
774
|
+
return await this.declaracaoExpressao();
|
|
775
775
|
}
|
|
776
776
|
logicaComumInferenciaTiposVariaveis(inicializador) {
|
|
777
777
|
switch (inicializador.constructor) {
|
|
@@ -823,9 +823,6 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
823
823
|
case tuplas_1.Noneto:
|
|
824
824
|
case tuplas_1.Deceto:
|
|
825
825
|
return delegua_1.default.TUPLA;
|
|
826
|
-
/* case 'ImportarBiblioteca':
|
|
827
|
-
case 'ModuloDeclaracoes':
|
|
828
|
-
return 'módulo'; */
|
|
829
826
|
default:
|
|
830
827
|
return inicializador.tipo;
|
|
831
828
|
}
|
|
@@ -835,24 +832,24 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
835
832
|
* @returns Um Construto, ou do tipo `Var` para variável, ou do tipo `FuncaoDeclaracao` se for
|
|
836
833
|
* declaração de função.
|
|
837
834
|
*/
|
|
838
|
-
declaracaoDeVariaveisOuFuncoes() {
|
|
835
|
+
async declaracaoDeVariaveisOuFuncoes() {
|
|
839
836
|
const identificador = this.consumir(tenda_1.default.IDENTIFICADOR, 'Esperado nome da variável ou função.');
|
|
840
837
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.PARENTESE_ESQUERDO)) {
|
|
841
838
|
return this.declaracaoDeFuncao(identificador);
|
|
842
839
|
}
|
|
843
840
|
this.consumir(tenda_1.default.IGUAL, "Esperado símbolo de igual após nome de identificador em declaração 'seja'.");
|
|
844
|
-
const inicializador = this.expressao();
|
|
841
|
+
const inicializador = await this.expressao();
|
|
845
842
|
const tipo = this.logicaComumInferenciaTiposVariaveis(inicializador);
|
|
846
843
|
this.pilhaEscopos.definirInformacoesVariavel(identificador.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(identificador.lexema, tipo));
|
|
847
844
|
return new declaracoes_1.Var(identificador, inicializador, tipo);
|
|
848
845
|
}
|
|
849
|
-
logicaComumParametros() {
|
|
846
|
+
async logicaComumParametros() {
|
|
850
847
|
const parametros = [];
|
|
851
848
|
do {
|
|
852
849
|
const parametro = {};
|
|
853
850
|
parametro.nome = this.consumir(tenda_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
|
|
854
851
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.IGUAL)) {
|
|
855
|
-
const valorPadrao = this.primario();
|
|
852
|
+
const valorPadrao = await this.primario();
|
|
856
853
|
parametro.valorPadrao = valorPadrao;
|
|
857
854
|
}
|
|
858
855
|
if (this.verificarSeSimboloAtualEIgualA(tenda_1.default.DOIS_PONTOS)) {
|
|
@@ -867,13 +864,13 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
867
864
|
} while (this.verificarSeSimboloAtualEIgualA(tenda_1.default.VIRGULA));
|
|
868
865
|
return parametros;
|
|
869
866
|
}
|
|
870
|
-
corpoDaFuncao(tipo) {
|
|
867
|
+
async corpoDaFuncao(tipo) {
|
|
871
868
|
// O parêntese esquerdo aqui é o símbolo atual.
|
|
872
869
|
// Ele já foi lido neste ponto.
|
|
873
870
|
const parenteseEsquerdo = this.simbolos[this.atual];
|
|
874
871
|
let parametros = [];
|
|
875
872
|
if (!this.verificarTipoSimboloAtual(tenda_1.default.PARENTESE_DIREITO)) {
|
|
876
|
-
parametros = this.logicaComumParametros();
|
|
873
|
+
parametros = await this.logicaComumParametros();
|
|
877
874
|
}
|
|
878
875
|
this.consumir(tenda_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
879
876
|
switch (tipo) {
|
|
@@ -885,7 +882,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
885
882
|
this.consumir(tenda_1.default.IGUAL, 'Esperado sinal de igual após fechamento de parênteses para declaração de função.');
|
|
886
883
|
break;
|
|
887
884
|
}
|
|
888
|
-
const corpo = this.resolverDeclaracao();
|
|
885
|
+
const corpo = (await this.resolverDeclaracao());
|
|
889
886
|
// Se o corpo for uma `Expressao`, corpo é convertido para `Retorna`.
|
|
890
887
|
// Tenda trabalha com retornos implícitos.
|
|
891
888
|
let corpoResolvido = [];
|
|
@@ -906,9 +903,9 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
906
903
|
* @returns Uma `Declaracao` ou várias, dependendo do retorno de `resolverDeclaracao`.
|
|
907
904
|
* @see resolverDeclaracao
|
|
908
905
|
*/
|
|
909
|
-
resolverDeclaracaoForaDeBloco() {
|
|
906
|
+
async resolverDeclaracaoForaDeBloco() {
|
|
910
907
|
try {
|
|
911
|
-
return this.resolverDeclaracao();
|
|
908
|
+
return await this.resolverDeclaracao();
|
|
912
909
|
}
|
|
913
910
|
catch (erro) {
|
|
914
911
|
this.sincronizar();
|
|
@@ -951,7 +948,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
951
948
|
}
|
|
952
949
|
}
|
|
953
950
|
}
|
|
954
|
-
analisar(retornoLexador, hashArquivo) {
|
|
951
|
+
async analisar(retornoLexador, hashArquivo) {
|
|
955
952
|
const inicioAnalise = (0, browser_process_hrtime_1.default)();
|
|
956
953
|
this.erros = [];
|
|
957
954
|
this.atual = 0;
|
|
@@ -962,7 +959,7 @@ class AvaliadorSintaticoTenda extends avaliador_sintatico_base_1.AvaliadorSintat
|
|
|
962
959
|
this.inicializarPilhaEscopos();
|
|
963
960
|
let declaracoes = [];
|
|
964
961
|
while (!this.estaNoFinal()) {
|
|
965
|
-
const retornoDeclaracao = this.resolverDeclaracaoForaDeBloco();
|
|
962
|
+
const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
|
|
966
963
|
if (Array.isArray(retornoDeclaracao)) {
|
|
967
964
|
declaracoes = declaracoes.concat(retornoDeclaracao);
|
|
968
965
|
}
|