@designliquido/delegua 1.11.0 → 1.12.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-base.d.ts +2 -2
- package/analisador-semantico/analisador-semantico-base.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-base.js +14 -6
- package/analisador-semantico/analisador-semantico-base.js.map +1 -1
- package/analisador-semantico/analisador-semantico.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico.js +38 -19
- package/analisador-semantico/analisador-semantico.js.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.d.ts.map +1 -1
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js +41 -18
- package/analisador-semantico/dialetos/analisador-semantico-pitugues.js.map +1 -1
- package/analisador-semantico/funcao-hipotetica-interface.d.ts +1 -1
- package/analisador-semantico/gerenciador-escopos.d.ts +1 -1
- package/analisador-semantico/pilha-variaveis.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/avaliador-sintatico.js +99 -42
- package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/comum.d.ts.map +1 -1
- package/avaliador-sintatico/comum.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-calango.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js +91 -96
- package/avaliador-sintatico/dialetos/avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js +4 -4
- package/avaliador-sintatico/dialetos/avaliador-sintatico-prisma.js.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js +1 -1
- package/avaliador-sintatico/dialetos/avaliador-sintatico-tenda.js.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.d.ts.map +1 -1
- package/avaliador-sintatico/dialetos/micro-avaliador-sintatico-pitugues.js.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts +18 -0
- package/avaliador-sintatico/erro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.d.ts.map +1 -1
- package/avaliador-sintatico/micro-avaliador-sintatico.js.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.d.ts.map +1 -1
- package/avaliador-sintatico/traducao/avaliador-sintatico-javascript.js.map +1 -1
- package/bibliotecas/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/biblioteca-global.js +93 -31
- package/bibliotecas/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js +12 -8
- package/bibliotecas/dialetos/pitugues/biblioteca-global.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-numero.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-texto.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js +3 -4
- package/bibliotecas/dialetos/pitugues/primitivas-tupla.js.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js +9 -11
- package/bibliotecas/dialetos/pitugues/primitivas-vetor.js.map +1 -1
- package/bibliotecas/primitivas-dicionario.d.ts.map +1 -1
- package/bibliotecas/primitivas-dicionario.js +1 -1
- package/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/bibliotecas/primitivas-numero.d.ts.map +1 -1
- package/bibliotecas/primitivas-numero.js.map +1 -1
- package/bibliotecas/primitivas-texto.d.ts.map +1 -1
- package/bibliotecas/primitivas-texto.js +1 -1
- package/bibliotecas/primitivas-texto.js.map +1 -1
- package/bibliotecas/primitivas-tupla.d.ts.map +1 -1
- package/bibliotecas/primitivas-tupla.js +34 -14
- package/bibliotecas/primitivas-tupla.js.map +1 -1
- package/bibliotecas/primitivas-vetor.d.ts.map +1 -1
- package/bibliotecas/primitivas-vetor.js +1 -1
- package/bibliotecas/primitivas-vetor.js.map +1 -1
- package/bin/package.json +1 -1
- package/construtos/ajuda-como-construto.d.ts +2 -2
- package/construtos/ajuda-como-construto.js +1 -1
- package/construtos/atribuir.d.ts.map +1 -1
- package/construtos/atribuir.js +5 -2
- package/construtos/atribuir.js.map +1 -1
- package/construtos/binario.d.ts.map +1 -1
- package/construtos/binario.js +1 -2
- package/construtos/binario.js.map +1 -1
- package/construtos/comentario-como-construto.d.ts.map +1 -1
- package/construtos/comentario-como-construto.js.map +1 -1
- package/construtos/decorador.d.ts.map +1 -1
- package/construtos/decorador.js +3 -1
- package/construtos/decorador.js.map +1 -1
- package/construtos/dicionario.d.ts.map +1 -1
- package/construtos/dicionario.js.map +1 -1
- package/construtos/tupla-n.d.ts +3 -3
- package/construtos/tupla-n.d.ts.map +1 -1
- package/construtos/tupla-n.js +4 -2
- package/construtos/tupla-n.js.map +1 -1
- package/declaracoes/ajuda.d.ts +3 -3
- package/declaracoes/funcao.d.ts +2 -1
- package/declaracoes/funcao.d.ts.map +1 -1
- package/declaracoes/funcao.js +2 -1
- package/declaracoes/funcao.js.map +1 -1
- package/declaracoes/interface.d.ts.map +1 -1
- package/declaracoes/interface.js.map +1 -1
- package/declaracoes/texto-documentacao.d.ts.map +1 -1
- package/declaracoes/texto-documentacao.js.map +1 -1
- package/estilizador/estilizador-delegua.d.ts.map +1 -1
- package/estilizador/estilizador-delegua.js +5 -1
- package/estilizador/estilizador-delegua.js.map +1 -1
- package/formatadores/formatador-delegua.d.ts.map +1 -1
- package/formatadores/formatador-delegua.js.map +1 -1
- package/formatadores/formatador-pitugues.d.ts.map +1 -1
- package/formatadores/formatador-pitugues.js +74 -29
- package/formatadores/formatador-pitugues.js.map +1 -1
- package/geracao-identificadores/index.js +2 -2
- package/geracao-identificadores/index.js.map +1 -1
- package/interfaces/componente-modulo-classe-interface.d.ts.map +1 -1
- package/interfaces/componente-modulo-funcao-interface.d.ts.map +1 -1
- package/interfaces/interpretador-com-depuracao-interface.d.ts.map +1 -1
- package/interfaces/modulo-interface.d.ts +2 -2
- package/interfaces/modulo-interface.d.ts.map +1 -1
- package/interfaces/visitante-comum-interface.d.ts.map +1 -1
- package/interpretador/comum.d.ts.map +1 -1
- package/interpretador/comum.js +55 -55
- package/interpretador/comum.js.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.d.ts.map +1 -1
- package/interpretador/depuracao/avaliador-expressao-depuracao.js.map +1 -1
- package/interpretador/depuracao/comum.d.ts.map +1 -1
- package/interpretador/depuracao/comum.js +8 -4
- package/interpretador/depuracao/comum.js.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +1 -3
- package/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts.map +1 -1
- package/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/interpretador/dialetos/pitugues/comum.d.ts +2 -2
- package/interpretador/dialetos/pitugues/comum.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/comum.js +2 -3
- package/interpretador/dialetos/pitugues/comum.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts +2 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues-com-depuracao.js.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts +3 -3
- package/interpretador/dialetos/pitugues/interpretador-pitugues.d.ts.map +1 -1
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js +3 -2
- package/interpretador/dialetos/pitugues/interpretador-pitugues.js.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts.map +1 -1
- package/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/interpretador/estruturas/classe-de-modulo.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.d.ts.map +1 -1
- package/interpretador/estruturas/delegua-funcao.js +3 -1
- package/interpretador/estruturas/delegua-funcao.js.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.d.ts.map +1 -1
- package/interpretador/estruturas/descritor-tipo-classe.js +6 -6
- package/interpretador/estruturas/descritor-tipo-classe.js.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-polimorfico.js +13 -9
- package/interpretador/estruturas/metodo-polimorfico.js.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.d.ts.map +1 -1
- package/interpretador/estruturas/metodo-primitiva.js.map +1 -1
- package/interpretador/estruturas/objeto-base.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-base.js.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.d.ts.map +1 -1
- package/interpretador/estruturas/objeto-delegua-classe.js +10 -6
- package/interpretador/estruturas/objeto-delegua-classe.js.map +1 -1
- package/interpretador/interpretador-base.d.ts +4 -4
- package/interpretador/interpretador-base.d.ts.map +1 -1
- package/interpretador/interpretador-base.js +123 -54
- package/interpretador/interpretador-base.js.map +1 -1
- package/interpretador/interpretador.d.ts.map +1 -1
- package/interpretador/interpretador.js +28 -17
- package/interpretador/interpretador.js.map +1 -1
- package/interpretador/pilha-escopos-execucao.d.ts.map +1 -1
- package/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/lexador/dialetos/lexador-calango.d.ts.map +1 -1
- package/lexador/dialetos/lexador-calango.js.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.d.ts.map +1 -1
- package/lexador/dialetos/lexador-egua-classico.js.map +1 -1
- package/lexador/dialetos/lexador-pitugues.d.ts.map +1 -1
- package/lexador/dialetos/lexador-pitugues.js +21 -13
- package/lexador/dialetos/lexador-pitugues.js.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.d.ts.map +1 -1
- package/lexador/dialetos/lexador-portugol-ipt.js.map +1 -1
- package/lexador/dialetos/lexador-prisma.d.ts.map +1 -1
- package/lexador/dialetos/lexador-prisma.js +25 -3
- package/lexador/dialetos/lexador-prisma.js.map +1 -1
- package/lexador/dialetos/lexador-tenda.d.ts.map +1 -1
- package/lexador/dialetos/lexador-tenda.js.map +1 -1
- package/lexador/filtro-paradigma.d.ts.map +1 -1
- package/lexador/filtro-paradigma.js.map +1 -1
- package/lexador/lexador-base-linha-unica.d.ts.map +1 -1
- package/lexador/lexador-base-linha-unica.js.map +1 -1
- package/lexador/lexador-base.d.ts.map +1 -1
- package/lexador/lexador-base.js.map +1 -1
- package/lexador/lexador.d.ts.map +1 -1
- package/lexador/lexador.js.map +1 -1
- package/lexador/mapeamento-paradigmas.d.ts.map +1 -1
- package/lexador/mapeamento-paradigmas.js.map +1 -1
- package/lexador/palavras-reservadas.js +2 -2
- package/lexador/palavras-reservadas.js.map +1 -1
- package/lexador/simbolo.d.ts.map +1 -1
- package/lexador/simbolo.js.map +1 -1
- package/lexador/traducao/lexador-javascript.d.ts.map +1 -1
- package/package.json +1 -1
- package/tradutores/mermaid/aresta-fluxograma.d.ts +1 -1
- package/tradutores/mermaid/subgrafo-classe.d.ts +3 -3
- package/tradutores/mermaid/subgrafo-funcao.d.ts +2 -2
- package/tradutores/mermaid/subgrafo-funcao.d.ts.map +1 -1
- package/tradutores/mermaid/subgrafo-funcao.js.map +1 -1
- package/tradutores/mermaid/subgrafo-metodo.d.ts +2 -2
- package/tradutores/mermaid/vertice-fluxograma.d.ts +1 -1
- package/tradutores/tradutor-assembly-arm.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-arm.js +164 -156
- package/tradutores/tradutor-assembly-arm.js.map +1 -1
- package/tradutores/tradutor-assembly-x64.d.ts.map +1 -1
- package/tradutores/tradutor-assembly-x64.js +136 -127
- package/tradutores/tradutor-assembly-x64.js.map +1 -1
- package/tradutores/tradutor-assemblyscript.d.ts.map +1 -1
- package/tradutores/tradutor-assemblyscript.js +10 -6
- package/tradutores/tradutor-assemblyscript.js.map +1 -1
- package/tradutores/tradutor-calango.d.ts.map +1 -1
- package/tradutores/tradutor-calango.js.map +1 -1
- package/tradutores/tradutor-elixir.d.ts.map +1 -1
- package/tradutores/tradutor-elixir.js +9 -7
- package/tradutores/tradutor-elixir.js.map +1 -1
- package/tradutores/tradutor-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-javascript.js +2 -1
- package/tradutores/tradutor-javascript.js.map +1 -1
- package/tradutores/tradutor-mermaidjs.d.ts.map +1 -1
- package/tradutores/tradutor-mermaidjs.js +4 -8
- package/tradutores/tradutor-mermaidjs.js.map +1 -1
- package/tradutores/tradutor-portugol-ipt.d.ts.map +1 -1
- package/tradutores/tradutor-portugol-ipt.js.map +1 -1
- package/tradutores/tradutor-python.d.ts.map +1 -1
- package/tradutores/tradutor-python.js +1 -1
- package/tradutores/tradutor-python.js.map +1 -1
- package/tradutores/tradutor-reverso-javascript.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.d.ts.map +1 -1
- package/tradutores/tradutor-ruby.js +1 -1
- package/tradutores/tradutor-ruby.js.map +1 -1
- package/umd/delegua.js +1056 -720
|
@@ -53,20 +53,16 @@ class AvaliadorSintaticoPitugues {
|
|
|
53
53
|
// Uma delas é a variável/constante ser uma classe padrão.
|
|
54
54
|
// Isso ocorre quando a importação é feita de uma biblioteca Node.js.
|
|
55
55
|
// Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
|
|
56
|
-
if (entidadeChamada.objeto.tipo &&
|
|
57
|
-
entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
56
|
+
if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
58
57
|
const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
|
|
59
58
|
if (!tipoCorrespondente) {
|
|
60
59
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
|
|
61
60
|
}
|
|
62
|
-
if (!(entidadeChamada.simbolo.lexema in
|
|
63
|
-
tipoCorrespondente.
|
|
64
|
-
!(entidadeChamada.simbolo.lexema in
|
|
65
|
-
tipoCorrespondente.propriedades)) {
|
|
61
|
+
if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
|
|
62
|
+
!(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
|
|
66
63
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Membro '${entidadeChamada.simbolo.lexema}' não existe no tipo '${entidadeChamada.objeto.tipo}'.`);
|
|
67
64
|
}
|
|
68
|
-
if (entidadeChamada.simbolo.lexema in
|
|
69
|
-
tipoCorrespondente.metodos) {
|
|
65
|
+
if (entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) {
|
|
70
66
|
const metodoCorrespondente = tipoCorrespondente.metodos[entidadeChamada.simbolo.lexema];
|
|
71
67
|
return metodoCorrespondente.tipoRetorno || 'qualquer';
|
|
72
68
|
}
|
|
@@ -199,7 +195,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
199
195
|
pos++;
|
|
200
196
|
}
|
|
201
197
|
// Verifica se há um identificador obrigatório
|
|
202
|
-
if (pos >= this.simbolos.length ||
|
|
198
|
+
if (pos >= this.simbolos.length ||
|
|
199
|
+
this.simbolos[pos].tipo !== pitugues_2.default.IDENTIFICADOR) {
|
|
203
200
|
return false;
|
|
204
201
|
}
|
|
205
202
|
pos++;
|
|
@@ -222,7 +219,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
222
219
|
}
|
|
223
220
|
temPadraoVarComoPalavraChave() {
|
|
224
221
|
// Verifica padrão: var identificador = ...
|
|
225
|
-
if (this.simbolos[this.atual].lexema !==
|
|
222
|
+
if (this.simbolos[this.atual].lexema !== 'var') {
|
|
226
223
|
return false;
|
|
227
224
|
}
|
|
228
225
|
const proximo = this.simbolos[this.atual + 1];
|
|
@@ -255,7 +252,9 @@ class AvaliadorSintaticoPitugues {
|
|
|
255
252
|
this.consumir(pitugues_2.default.MULTIPLICACAO, '');
|
|
256
253
|
ehRestoAtual = true;
|
|
257
254
|
}
|
|
258
|
-
const identificador = this.consumir(pitugues_2.default.IDENTIFICADOR, ehRestoAtual
|
|
255
|
+
const identificador = this.consumir(pitugues_2.default.IDENTIFICADOR, ehRestoAtual
|
|
256
|
+
? 'Esperado nome de variável após operador *.'
|
|
257
|
+
: 'Esperado nome de variável.');
|
|
259
258
|
// Verifica * no nome da variável
|
|
260
259
|
if (identificador.lexema.startsWith('*')) {
|
|
261
260
|
ehRestoAtual = true;
|
|
@@ -283,10 +282,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
283
282
|
}
|
|
284
283
|
construirValidacaoDesempacotamento(identificador, origem, qtdEsperada) {
|
|
285
284
|
const linha = identificador.linha;
|
|
286
|
-
const chamadaTamanho = new construtos_1.Chamada(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, new lexador_1.Simbolo(pitugues_2.default.IDENTIFICADOR,
|
|
287
|
-
const condicaoErro = new construtos_1.Binario(this.hashArquivo, chamadaTamanho, new lexador_1.Simbolo(pitugues_2.default.DIFERENTE,
|
|
285
|
+
const chamadaTamanho = new construtos_1.Chamada(this.hashArquivo, new construtos_1.Variavel(this.hashArquivo, new lexador_1.Simbolo(pitugues_2.default.IDENTIFICADOR, 'tamanho', null, linha, -1)), [origem]);
|
|
286
|
+
const condicaoErro = new construtos_1.Binario(this.hashArquivo, chamadaTamanho, new lexador_1.Simbolo(pitugues_2.default.DIFERENTE, '!=', null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, qtdEsperada, 'número'));
|
|
288
287
|
const mensagem = `Erro de execução: Você tentou desempacotar em ${qtdEsperada} variáveis, mas o vetor possui tamanho diferente.`;
|
|
289
|
-
const falha = new declaracoes_1.Falhar(new lexador_1.Simbolo(pitugues_2.default.FALHAR,
|
|
288
|
+
const falha = new declaracoes_1.Falhar(new lexador_1.Simbolo(pitugues_2.default.FALHAR, 'falhar', null, linha, -1), new construtos_1.Literal(this.hashArquivo, linha, mensagem, 'texto'));
|
|
290
289
|
return new declaracoes_1.Se(condicaoErro, new declaracoes_1.Bloco(this.hashArquivo, linha, [falha]), [], null);
|
|
291
290
|
}
|
|
292
291
|
async declaracaoDeVariaveis() {
|
|
@@ -298,7 +297,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
298
297
|
const ehDesempacotamento = qtdIdentificadores > 1 && qtdValores === 1;
|
|
299
298
|
if (indexResto > -1) {
|
|
300
299
|
if (qtdValores < qtdIdentificadores - 1) {
|
|
301
|
-
if (!ehDesempacotamento ||
|
|
300
|
+
if (!ehDesempacotamento ||
|
|
301
|
+
(ehDesempacotamento && inicializadores[0] instanceof construtos_1.Literal)) {
|
|
302
302
|
throw this.erro(this.simboloAnterior(), 'Quantidade insuficiente de valores para desempacotamento com operador de resto.');
|
|
303
303
|
}
|
|
304
304
|
}
|
|
@@ -334,7 +334,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
334
334
|
for (let i = 0; i < identificadores.length; i++) {
|
|
335
335
|
const identificador = identificadores[i];
|
|
336
336
|
let inicializador;
|
|
337
|
-
let tipo =
|
|
337
|
+
let tipo = 'qualquer';
|
|
338
338
|
if (i === indexResto) {
|
|
339
339
|
const valoresResto = inicializadores.slice(cursorValores, cursorValores + qtdParaResto);
|
|
340
340
|
let tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(valoresResto);
|
|
@@ -381,7 +381,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
381
381
|
}
|
|
382
382
|
}
|
|
383
383
|
erro(simbolo, mensagemDeErro) {
|
|
384
|
-
const
|
|
384
|
+
const simboloParaErro = simbolo || this.simboloAnterior();
|
|
385
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simboloParaErro, mensagemDeErro);
|
|
385
386
|
this.erros.push(excecao);
|
|
386
387
|
return excecao;
|
|
387
388
|
}
|
|
@@ -396,7 +397,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
396
397
|
return this.simboloAtual().tipo === tipo;
|
|
397
398
|
}
|
|
398
399
|
verificarTipoProximoSimbolo(tipo) {
|
|
399
|
-
if (this.
|
|
400
|
+
if (this.atual + 1 >= this.simbolos.length)
|
|
400
401
|
return false;
|
|
401
402
|
return this.simbolos[this.atual + 1].tipo === tipo;
|
|
402
403
|
}
|
|
@@ -541,17 +542,19 @@ class AvaliadorSintaticoPitugues {
|
|
|
541
542
|
case pitugues_2.default.INTERPOLACAO:
|
|
542
543
|
const simboloInterpolacao = this.avancarEDevolverAnterior();
|
|
543
544
|
const conteudoOriginal = simboloInterpolacao.literal;
|
|
544
|
-
const codigoTransformado = '"' +
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
545
|
+
const codigoTransformado = '"' +
|
|
546
|
+
conteudoOriginal.replace(/\{(.*?)\}/g, (_, miolo) => {
|
|
547
|
+
// 'miolo' é o texto que estava dentro das chaves. Ex: "valor" ou "valor:.2f"
|
|
548
|
+
if (miolo.includes(':')) {
|
|
549
|
+
const [variavel, formato] = miolo.split(':').map((s) => s.trim());
|
|
550
|
+
if (variavel !== '') {
|
|
551
|
+
// Transforma {valor:.2f} em "{:.2f}".formatar(valor)
|
|
552
|
+
return '" + "{:' + formato + '}".formatar(' + variavel + ') + "';
|
|
553
|
+
}
|
|
551
554
|
}
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
+
return '" + (' + miolo.trim() + ') + "';
|
|
556
|
+
}) +
|
|
557
|
+
'"';
|
|
555
558
|
const microLexador = new micro_lexador_pitugues_1.MicroLexadorPitugues();
|
|
556
559
|
const retornoMicroLexador = microLexador.mapear(codigoTransformado);
|
|
557
560
|
const microAvaliadorSintatico = new micro_avaliador_sintatico_pitugues_1.MicroAvaliadorSintaticoPitugues();
|
|
@@ -564,7 +567,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
564
567
|
}
|
|
565
568
|
catch (erro) {
|
|
566
569
|
this.erros.push(erro);
|
|
567
|
-
return new construtos_1.Literal(this.hashArquivo, simboloInterpolacao.linha,
|
|
570
|
+
return new construtos_1.Literal(this.hashArquivo, simboloInterpolacao.linha, '');
|
|
568
571
|
}
|
|
569
572
|
const declaracao = retornoMicroAvaliador.declaracoes[0];
|
|
570
573
|
return declaracao.expressao;
|
|
@@ -622,11 +625,11 @@ class AvaliadorSintaticoPitugues {
|
|
|
622
625
|
let passo = null;
|
|
623
626
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS)) {
|
|
624
627
|
ehFatiamento = true;
|
|
625
|
-
if (!this.verificarTipoSimboloAtual(pitugues_2.default.DOIS_PONTOS)
|
|
626
|
-
|
|
628
|
+
if (!this.verificarTipoSimboloAtual(pitugues_2.default.DOIS_PONTOS) &&
|
|
629
|
+
!this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
|
|
627
630
|
fim = await this.expressao();
|
|
628
|
-
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS)
|
|
629
|
-
|
|
631
|
+
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.DOIS_PONTOS) &&
|
|
632
|
+
!this.verificarTipoSimboloAtual(pitugues_2.default.COLCHETE_DIREITO))
|
|
630
633
|
passo = await this.expressao();
|
|
631
634
|
}
|
|
632
635
|
const simboloFechamento = this.consumir(pitugues_2.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
@@ -758,7 +761,9 @@ class AvaliadorSintaticoPitugues {
|
|
|
758
761
|
}
|
|
759
762
|
async seTernario() {
|
|
760
763
|
let expressaoEntao = await this.ou();
|
|
761
|
-
if (this.simbolos[this.atual] &&
|
|
764
|
+
if (this.simbolos[this.atual] &&
|
|
765
|
+
this.simbolos[this.atual].tipo === pitugues_2.default.SE &&
|
|
766
|
+
expressaoEntao.linha === this.simbolos[this.atual].linha) {
|
|
762
767
|
while (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SE)) {
|
|
763
768
|
const operador = this.simbolos[this.atual - 1];
|
|
764
769
|
const expressaoOuCondicao = await this.seTernario();
|
|
@@ -860,54 +865,40 @@ class AvaliadorSintaticoPitugues {
|
|
|
860
865
|
let declaracoes = [];
|
|
861
866
|
let simboloAtual = this.simboloAtual();
|
|
862
867
|
const simboloAnterior = this.simboloAnterior();
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
//
|
|
868
|
+
if (!simboloAtual) {
|
|
869
|
+
throw this.erro(simboloAnterior, 'Esperado corpo do escopo após a declaração.');
|
|
870
|
+
}
|
|
871
|
+
// Declaração na mesma linha (ex: 'se verdadeiro: escreva("Oi")')
|
|
867
872
|
if (simboloAtual.linha === simboloAnterior.linha) {
|
|
868
|
-
const
|
|
869
|
-
if (
|
|
870
|
-
|
|
871
|
-
declaracoes = declaracoes.concat(declaracoesBloco);
|
|
872
|
-
}
|
|
873
|
-
else {
|
|
874
|
-
declaracoes.push(declaracoesBloco);
|
|
875
|
-
}
|
|
876
|
-
}
|
|
873
|
+
const retorno = await this.resolverDeclaracaoForaDeBloco();
|
|
874
|
+
if (retorno !== null)
|
|
875
|
+
declaracoes = declaracoes.concat(retorno);
|
|
877
876
|
}
|
|
878
877
|
else {
|
|
879
|
-
//
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
if (
|
|
878
|
+
// Bloco de múltiplas linhas baseado em indentação
|
|
879
|
+
let espacosAtual = this
|
|
880
|
+
.localizacoes[simboloAtual.linha]
|
|
881
|
+
.espacosIndentacao;
|
|
882
|
+
const espacosAnterior = this
|
|
883
|
+
.localizacoes[simboloAnterior.linha]
|
|
884
|
+
.espacosIndentacao;
|
|
885
|
+
if (espacosAtual <= espacosAnterior) {
|
|
887
886
|
throw this.erro(simboloAtual, `Indentação inconsistente na linha ${simboloAtual.linha}. ` +
|
|
888
|
-
`Esperado: >= ${
|
|
889
|
-
`Atual: ${
|
|
890
|
-
}
|
|
891
|
-
|
|
892
|
-
//
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
while (espacosIndentacaoLinhaAtual === espacosIndentacaoBloco) {
|
|
898
|
-
const retornoDeclaracao = await this.resolverDeclaracaoForaDeBloco();
|
|
899
|
-
if (retornoDeclaracao !== null) {
|
|
900
|
-
if (Array.isArray(retornoDeclaracao)) {
|
|
901
|
-
declaracoes = declaracoes.concat(retornoDeclaracao);
|
|
902
|
-
}
|
|
903
|
-
else {
|
|
904
|
-
declaracoes.push(retornoDeclaracao);
|
|
905
|
-
}
|
|
906
|
-
}
|
|
887
|
+
`Esperado: >= ${espacosAnterior}. ` +
|
|
888
|
+
`Atual: ${espacosAtual}`);
|
|
889
|
+
}
|
|
890
|
+
const indentacaoBloco = espacosAtual;
|
|
891
|
+
// Consome as declarações enquanto a indentação for estritamente igual à do bloco
|
|
892
|
+
while (simboloAtual && espacosAtual === indentacaoBloco) {
|
|
893
|
+
const retorno = await this.resolverDeclaracaoForaDeBloco();
|
|
894
|
+
if (retorno !== null)
|
|
895
|
+
declaracoes = declaracoes.concat(retorno);
|
|
907
896
|
simboloAtual = this.simboloAtual();
|
|
908
|
-
if (
|
|
909
|
-
|
|
910
|
-
|
|
897
|
+
if (simboloAtual) {
|
|
898
|
+
espacosAtual = this
|
|
899
|
+
.localizacoes[simboloAtual.linha]
|
|
900
|
+
.espacosIndentacao;
|
|
901
|
+
}
|
|
911
902
|
}
|
|
912
903
|
}
|
|
913
904
|
this.pilhaEscopos.removerUltimo();
|
|
@@ -917,7 +908,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
917
908
|
try {
|
|
918
909
|
this.blocos += 1;
|
|
919
910
|
const condicao = await this.expressao();
|
|
920
|
-
const bloco = await this.resolverDeclaracao();
|
|
911
|
+
const bloco = (await this.resolverDeclaracao());
|
|
921
912
|
return new declaracoes_1.Enquanto(condicao, bloco);
|
|
922
913
|
}
|
|
923
914
|
finally {
|
|
@@ -991,7 +982,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
991
982
|
}
|
|
992
983
|
this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeVariavelIteracao.lexema, tipoVetor.slice(0, -2)));
|
|
993
984
|
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
994
|
-
const corpo = await this.resolverDeclaracao();
|
|
985
|
+
const corpo = (await this.resolverDeclaracao());
|
|
995
986
|
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new construtos_1.Variavel(this.hashArquivo, nomeVariavelIteracao), vetor, corpo);
|
|
996
987
|
}
|
|
997
988
|
async declaracaoPara() {
|
|
@@ -1023,7 +1014,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1023
1014
|
this.pilhaEscopos.definirInformacoesVariavel(simboloSegundaVariavel.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(simboloSegundaVariavel.lexema, 'qualquer'));
|
|
1024
1015
|
}
|
|
1025
1016
|
// TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
|
|
1026
|
-
const corpo = await this.resolverDeclaracao();
|
|
1017
|
+
const corpo = (await this.resolverDeclaracao());
|
|
1027
1018
|
return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, alvoIteracao, corpo);
|
|
1028
1019
|
}
|
|
1029
1020
|
finally {
|
|
@@ -1052,7 +1043,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1052
1043
|
}
|
|
1053
1044
|
async declaracaoSe() {
|
|
1054
1045
|
const condicao = await this.expressao();
|
|
1055
|
-
const caminhoEntao = await this.resolverDeclaracao();
|
|
1046
|
+
const caminhoEntao = (await this.resolverDeclaracao());
|
|
1056
1047
|
let caminhoSenao = null;
|
|
1057
1048
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.SENAO, pitugues_2.default.SENÃO)) {
|
|
1058
1049
|
caminhoSenao = await this.resolverDeclaracao();
|
|
@@ -1130,11 +1121,13 @@ class AvaliadorSintaticoPitugues {
|
|
|
1130
1121
|
this.consumir(pitugues_2.default.DOIS_PONTOS, `Esperado ':' antes do escopo do bloco 'pegue'.`);
|
|
1131
1122
|
this.pilhaEscopos.definirInformacoesVariavel(variavelExcecao.lexema, new informacao_elemento_sintatico_1.InformacaoElementoSintatico(variavelExcecao.lexema, 'qualquer'));
|
|
1132
1123
|
const corpo = await this.blocoEscopo();
|
|
1133
|
-
blocoPegue = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloTente.linha, [
|
|
1134
|
-
|
|
1124
|
+
blocoPegue = new construtos_1.FuncaoConstruto(this.hashArquivo, simboloTente.linha, [
|
|
1125
|
+
{
|
|
1126
|
+
abrangencia: 'padrao',
|
|
1135
1127
|
nome: variavelExcecao,
|
|
1136
|
-
tipoDado:
|
|
1137
|
-
}
|
|
1128
|
+
tipoDado: 'qualquer',
|
|
1129
|
+
},
|
|
1130
|
+
], corpo, 'vazio', false);
|
|
1138
1131
|
}
|
|
1139
1132
|
else {
|
|
1140
1133
|
// Caso 2: sem parâmetro de erro.
|
|
@@ -1159,7 +1152,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1159
1152
|
const simboloFazer = this.simboloAnterior();
|
|
1160
1153
|
try {
|
|
1161
1154
|
this.blocos += 1;
|
|
1162
|
-
const declaracaoOuBlocoFazer = await this.resolverDeclaracao();
|
|
1155
|
+
const declaracaoOuBlocoFazer = (await this.resolverDeclaracao());
|
|
1163
1156
|
this.consumir(pitugues_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo da declaração 'fazer'.");
|
|
1164
1157
|
const condicaoEnquanto = await this.expressao();
|
|
1165
1158
|
return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), declaracaoOuBlocoFazer, condicaoEnquanto);
|
|
@@ -1325,7 +1318,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1325
1318
|
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
1326
1319
|
if (simboloAnterior.tipo === pitugues_2.default.IDENTIFICADOR) {
|
|
1327
1320
|
this.consumir(pitugues_2.default.DOIS_PONTOS, "Esperado ':' antes do escopo da classe.");
|
|
1328
|
-
const tipoPropriedade = this.consumir(pitugues_2.default.IDENTIFICADOR,
|
|
1321
|
+
const tipoPropriedade = this.consumir(pitugues_2.default.IDENTIFICADOR, 'Esperado tipo de propriedade após dois-pontos, em declaração de classe.');
|
|
1329
1322
|
const propriedade = new declaracoes_1.PropriedadeClasse(simboloAnterior, tipoPropriedade.lexema, []);
|
|
1330
1323
|
propriedades.push(propriedade);
|
|
1331
1324
|
}
|
|
@@ -1381,11 +1374,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
1381
1374
|
*/
|
|
1382
1375
|
async resolverDeclaracaoForaDeBloco() {
|
|
1383
1376
|
try {
|
|
1384
|
-
if (
|
|
1385
|
-
this.verificarTipoSimboloAtual(pitugues_2.default.FUNÇÃO))
|
|
1386
|
-
this.verificarTipoProximoSimbolo(pitugues_2.default.IDENTIFICADOR)) {
|
|
1377
|
+
if (this.verificarTipoSimboloAtual(pitugues_2.default.FUNCAO) ||
|
|
1378
|
+
this.verificarTipoSimboloAtual(pitugues_2.default.FUNÇÃO)) {
|
|
1387
1379
|
this.avancarEDevolverAnterior();
|
|
1388
|
-
return await this.funcao('
|
|
1380
|
+
return await this.funcao('da função');
|
|
1389
1381
|
}
|
|
1390
1382
|
if (this.verificarSeSimboloAtualEIgualA(pitugues_2.default.CLASSE))
|
|
1391
1383
|
return await this.declaracaoDeClasse();
|
|
@@ -1480,8 +1472,10 @@ class AvaliadorSintaticoPitugues {
|
|
|
1480
1472
|
case pitugues_2.default.DE: {
|
|
1481
1473
|
const proximo = this.simbolos[this.atual + 1];
|
|
1482
1474
|
const aposProximo = this.simbolos[this.atual + 2];
|
|
1483
|
-
if (proximo &&
|
|
1484
|
-
|
|
1475
|
+
if (proximo &&
|
|
1476
|
+
proximo.tipo === pitugues_2.default.IDENTIFICADOR &&
|
|
1477
|
+
aposProximo &&
|
|
1478
|
+
aposProximo.tipo === pitugues_2.default.IMPORTAR) {
|
|
1485
1479
|
this.avancarEDevolverAnterior();
|
|
1486
1480
|
return this.declaracaoImportarDe();
|
|
1487
1481
|
}
|
|
@@ -1596,7 +1590,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1596
1590
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('elemento', 'qualquer'),
|
|
1597
1591
|
]));
|
|
1598
1592
|
this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
|
|
1599
|
-
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer')
|
|
1593
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
1600
1594
|
]));
|
|
1601
1595
|
this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
|
|
1602
1596
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
@@ -1606,7 +1600,7 @@ class AvaliadorSintaticoPitugues {
|
|
|
1606
1600
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'qualquer[]'),
|
|
1607
1601
|
]));
|
|
1608
1602
|
this.pilhaEscopos.definirInformacoesVariavel('vetor', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('vetor', 'vetor', true, [
|
|
1609
|
-
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'qualquer')
|
|
1603
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('tupla', 'qualquer'),
|
|
1610
1604
|
]));
|
|
1611
1605
|
}
|
|
1612
1606
|
async analisar(retornoLexador, hashArquivo) {
|
|
@@ -1633,7 +1627,8 @@ class AvaliadorSintaticoPitugues {
|
|
|
1633
1627
|
else {
|
|
1634
1628
|
declaracoes.push(retornoDeclaracao);
|
|
1635
1629
|
}
|
|
1636
|
-
if (!this.estaNoFinal() &&
|
|
1630
|
+
if (!this.estaNoFinal() &&
|
|
1631
|
+
this.verificarTipoSimboloAtual(pitugues_2.default.PONTO_E_VIRGULA)) {
|
|
1637
1632
|
// Verificar se este ; está na mesma linha da declaração anterior
|
|
1638
1633
|
const declaracaoAnterior = declaracoes[declaracoes.length - 1];
|
|
1639
1634
|
const linhaDeclaraoAnterior = declaracaoAnterior.linha || 0;
|