@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
|
@@ -97,7 +97,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
97
97
|
}
|
|
98
98
|
async construtoAjuda() {
|
|
99
99
|
const simboloAjuda = this.avancarEDevolverAnterior();
|
|
100
|
-
if (this.estaNoFinal() ||
|
|
100
|
+
if (this.estaNoFinal() ||
|
|
101
|
+
this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
|
|
101
102
|
return new construtos_1.AjudaComoConstruto(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
|
|
102
103
|
}
|
|
103
104
|
this.avancarEDevolverAnterior(); // parêntese esquerdo
|
|
@@ -524,7 +525,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
524
525
|
// o analisador semântico emitir o diagnóstico quando apropriado.
|
|
525
526
|
tipoIdentificadorCorrespondente = 'qualquer';
|
|
526
527
|
}
|
|
527
|
-
if (!tipoIdentificadorCorrespondente.endsWith('[]') &&
|
|
528
|
+
if (!tipoIdentificadorCorrespondente.endsWith('[]') &&
|
|
529
|
+
!['dicionário', 'qualquer', 'texto', 'tupla', 'vetor'].includes(tipoIdentificadorCorrespondente)) {
|
|
528
530
|
throw this.erro(this.simbolos[this.atual], `Tipo ${tipoIdentificadorCorrespondente} não suporta acesso por índice.`);
|
|
529
531
|
}
|
|
530
532
|
let tipoAcesso = 'qualquer';
|
|
@@ -598,8 +600,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
598
600
|
if (expressaoAnterior.tipo === 'dicionário' &&
|
|
599
601
|
expressaoAnterior.constructor !== construtos_1.Dicionario) {
|
|
600
602
|
const elementoMontaoTipos = this.resolverElementoMontao(expressaoAnterior);
|
|
601
|
-
if (elementoMontaoTipos &&
|
|
602
|
-
nome.lexema in elementoMontaoTipos.subElementos) {
|
|
603
|
+
if (elementoMontaoTipos && nome.lexema in elementoMontaoTipos.subElementos) {
|
|
603
604
|
tipoInferido = elementoMontaoTipos.subElementos[nome.lexema].tipo;
|
|
604
605
|
}
|
|
605
606
|
}
|
|
@@ -856,7 +857,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
856
857
|
if (construto instanceof construtos_1.Unario) {
|
|
857
858
|
const operando = construto.operando;
|
|
858
859
|
// Verifica se o operando é um vetor
|
|
859
|
-
if (operando instanceof construtos_1.Vetor ||
|
|
860
|
+
if (operando instanceof construtos_1.Vetor ||
|
|
861
|
+
operando.tipo === 'vetor' ||
|
|
862
|
+
operando.tipo.endsWith('[]')) {
|
|
860
863
|
return true;
|
|
861
864
|
}
|
|
862
865
|
// Verifica recursivamente para casos como !![]
|
|
@@ -1467,7 +1470,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1467
1470
|
}
|
|
1468
1471
|
async declaracaoSe() {
|
|
1469
1472
|
const condicao = await this.expressao();
|
|
1470
|
-
const caminhoEntao = await this.resolverDeclaracao();
|
|
1473
|
+
const caminhoEntao = (await this.resolverDeclaracao());
|
|
1471
1474
|
let caminhoSenao = null;
|
|
1472
1475
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.SENAO, delegua_2.default.SENÃO)) {
|
|
1473
1476
|
caminhoSenao = await this.resolverDeclaracao();
|
|
@@ -1598,20 +1601,16 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1598
1601
|
// Uma delas é a variável/constante ser uma classe padrão.
|
|
1599
1602
|
// Isso ocorre quando a importação é feita de uma biblioteca Node.js.
|
|
1600
1603
|
// Nesse caso, o tipo de `entidadeChamada.objeto` começa com uma letra maiúscula.
|
|
1601
|
-
if (entidadeChamada.objeto.tipo &&
|
|
1602
|
-
entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
1604
|
+
if (entidadeChamada.objeto.tipo && entidadeChamada.objeto.tipo.match(/^[A-Z]/)) {
|
|
1603
1605
|
const tipoCorrespondente = this.tiposDefinidosPorBibliotecas[entidadeChamada.objeto.tipo];
|
|
1604
1606
|
if (!tipoCorrespondente) {
|
|
1605
1607
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Tipo '${entidadeChamada.objeto.tipo}' não foi encontrado entre os tipos definidos por bibliotecas.`);
|
|
1606
1608
|
}
|
|
1607
|
-
if (!(entidadeChamada.simbolo.lexema in
|
|
1608
|
-
tipoCorrespondente.
|
|
1609
|
-
!(entidadeChamada.simbolo.lexema in
|
|
1610
|
-
tipoCorrespondente.propriedades)) {
|
|
1609
|
+
if (!(entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) &&
|
|
1610
|
+
!(entidadeChamada.simbolo.lexema in tipoCorrespondente.propriedades)) {
|
|
1611
1611
|
throw new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(entidadeChamada.simbolo, `Membro '${entidadeChamada.simbolo.lexema}' não existe no tipo '${entidadeChamada.objeto.tipo}'.`);
|
|
1612
1612
|
}
|
|
1613
|
-
if (entidadeChamada.simbolo.lexema in
|
|
1614
|
-
tipoCorrespondente.metodos) {
|
|
1613
|
+
if (entidadeChamada.simbolo.lexema in tipoCorrespondente.metodos) {
|
|
1615
1614
|
const metodoCorrespondente = tipoCorrespondente.metodos[entidadeChamada.simbolo.lexema];
|
|
1616
1615
|
return metodoCorrespondente.tipoRetorno || 'qualquer';
|
|
1617
1616
|
}
|
|
@@ -1964,7 +1963,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
1964
1963
|
this.consumir(delegua_2.default.CHAVE_ESQUERDA, "Esperado '{' antes do corpo da interface.");
|
|
1965
1964
|
const metodos = [];
|
|
1966
1965
|
const propriedades = [];
|
|
1967
|
-
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
1966
|
+
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
1967
|
+
!this.estaNoFinal()) {
|
|
1968
1968
|
this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
|
|
1969
1969
|
if (this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA))
|
|
1970
1970
|
break;
|
|
@@ -2015,7 +2015,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2015
2015
|
const simbolo = this.consumir(delegua_2.default.IDENTIFICADOR, 'Esperado nome da classe.');
|
|
2016
2016
|
// Pré-registro para permitir auto-referência no corpo da própria classe,
|
|
2017
2017
|
// como em `MinhaClasse.propriedadeEstatica` dentro de métodos.
|
|
2018
|
-
this.tiposDefinidosEmCodigo[simbolo.lexema] =
|
|
2018
|
+
this.tiposDefinidosEmCodigo[simbolo.lexema] =
|
|
2019
|
+
(_a = this.tiposDefinidosEmCodigo[simbolo.lexema]) !== null && _a !== void 0 ? _a : {};
|
|
2019
2020
|
const pilhaDecoradoresClasse = Array.from(this.pilhaDecoradores);
|
|
2020
2021
|
// Verificar `herda SuperclasseA, SuperclasseB`
|
|
2021
2022
|
const superClasses = [];
|
|
@@ -2053,7 +2054,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2053
2054
|
*/
|
|
2054
2055
|
const compreenderMembros = async (acessoPadrao, ehEstaticoPadrao, ehAbstratoPadrao = false) => {
|
|
2055
2056
|
var _a;
|
|
2056
|
-
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
2057
|
+
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
2058
|
+
!this.estaNoFinal()) {
|
|
2057
2059
|
// Pular comentários normais dentro do corpo da classe.
|
|
2058
2060
|
if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
|
|
2059
2061
|
this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
|
|
@@ -2074,12 +2076,12 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2074
2076
|
// Detecção de bloco de contexto: modificador seguido de '{'
|
|
2075
2077
|
const tipoAtual = this.simbolos[this.atual].tipo;
|
|
2076
2078
|
const tipoProximo = (_a = this.simbolos[this.atual + 1]) === null || _a === void 0 ? void 0 : _a.tipo;
|
|
2077
|
-
const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual)
|
|
2078
|
-
|
|
2079
|
-
const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO
|
|
2080
|
-
|
|
2081
|
-
const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO
|
|
2082
|
-
|
|
2079
|
+
const ehBlocoAcesso = [delegua_2.default.PRIVADO, delegua_2.default.PROTEGIDO].includes(tipoAtual) &&
|
|
2080
|
+
tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
|
|
2081
|
+
const ehBlocoEstatico = tipoAtual === delegua_2.default.ESTATICO &&
|
|
2082
|
+
tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
|
|
2083
|
+
const ehBlocoAbstrato = tipoAtual === delegua_2.default.ABSTRATO &&
|
|
2084
|
+
tipoProximo === delegua_2.default.CHAVE_ESQUERDA;
|
|
2083
2085
|
if (ehBlocoAcesso) {
|
|
2084
2086
|
const novoAcesso = tipoAtual === delegua_2.default.PRIVADO ? 'privado' : 'protegido';
|
|
2085
2087
|
this.avancarEDevolverAnterior(); // consume modificador de acesso
|
|
@@ -2176,14 +2178,17 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2176
2178
|
for (const declaracao of corpo) {
|
|
2177
2179
|
expressoesRetorna = expressoesRetorna.concat((0, comum_1.buscarRetornos)(declaracao));
|
|
2178
2180
|
}
|
|
2179
|
-
const tiposRetornos = new Set(expressoesRetorna
|
|
2181
|
+
const tiposRetornos = new Set(expressoesRetorna
|
|
2182
|
+
.filter((e) => e.tipo !== 'qualquer')
|
|
2183
|
+
.map((e) => e.tipo));
|
|
2180
2184
|
const retornaChamadoExplicitamente = tiposRetornos.size > 0;
|
|
2181
2185
|
tiposRetornos.delete('qualquer');
|
|
2182
2186
|
if (tipoRetorno === 'qualquer') {
|
|
2183
2187
|
if (tiposRetornos.size > 0) {
|
|
2184
2188
|
tipoRetorno = tiposRetornos.values().next().value;
|
|
2185
2189
|
}
|
|
2186
|
-
else if (!retornaChamadoExplicitamente &&
|
|
2190
|
+
else if (!retornaChamadoExplicitamente &&
|
|
2191
|
+
!definicaoExplicitaDeTipo) {
|
|
2187
2192
|
tipoRetorno = 'vazio';
|
|
2188
2193
|
}
|
|
2189
2194
|
}
|
|
@@ -2239,13 +2244,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2239
2244
|
let tipoAcessor = 'qualquer';
|
|
2240
2245
|
let expressoesRetornaAcessor = [];
|
|
2241
2246
|
for (const declaracao of corpoAcessor) {
|
|
2242
|
-
expressoesRetornaAcessor =
|
|
2247
|
+
expressoesRetornaAcessor =
|
|
2248
|
+
expressoesRetornaAcessor.concat((0, comum_1.buscarRetornos)(declaracao));
|
|
2243
2249
|
}
|
|
2244
|
-
const tiposRetornosAcessor = new Set(expressoesRetornaAcessor
|
|
2250
|
+
const tiposRetornosAcessor = new Set(expressoesRetornaAcessor
|
|
2251
|
+
.filter((e) => e.tipo !== 'qualquer')
|
|
2252
|
+
.map((e) => e.tipo));
|
|
2245
2253
|
const retornaExplicitamenteAcessor = tiposRetornosAcessor.size > 0;
|
|
2246
2254
|
tiposRetornosAcessor.delete('qualquer');
|
|
2247
2255
|
if (tiposRetornosAcessor.size > 0) {
|
|
2248
|
-
tipoAcessor = tiposRetornosAcessor
|
|
2256
|
+
tipoAcessor = tiposRetornosAcessor
|
|
2257
|
+
.values()
|
|
2258
|
+
.next().value;
|
|
2249
2259
|
}
|
|
2250
2260
|
else if (!retornaExplicitamenteAcessor) {
|
|
2251
2261
|
tipoAcessor = 'vazio';
|
|
@@ -2297,24 +2307,55 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2297
2307
|
await compreenderMembros('publico', false);
|
|
2298
2308
|
this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
2299
2309
|
// Verificação em tempo de análise: classe deve implementar todos os contratos das interfaces.
|
|
2310
|
+
const linhaFinalClasse = this.simbolos[this.atual - 1].linha;
|
|
2300
2311
|
for (const nomeInterface of implementaInterfaces) {
|
|
2301
2312
|
const interfaceDecl = this.interfacesDeclaradas[nomeInterface.lexema];
|
|
2302
2313
|
if (!interfaceDecl) {
|
|
2303
2314
|
this.erros.push(this.erro(nomeInterface, `Interface '${nomeInterface.lexema}' não foi declarada antes da classe '${simbolo.lexema}'.`));
|
|
2304
2315
|
continue;
|
|
2305
2316
|
}
|
|
2317
|
+
const membrosFaltando = [];
|
|
2306
2318
|
for (const assinatura of interfaceDecl.metodos) {
|
|
2307
2319
|
const nomeMetodo = assinatura.nome.lexema;
|
|
2308
2320
|
const implementado = metodos.some((m) => m.simbolo.lexema === nomeMetodo);
|
|
2309
2321
|
if (!implementado) {
|
|
2310
|
-
|
|
2322
|
+
membrosFaltando.push({
|
|
2323
|
+
tipo: 'metodo',
|
|
2324
|
+
nome: nomeMetodo,
|
|
2325
|
+
parametros: assinatura.parametros.map((p) => ({
|
|
2326
|
+
nome: p.nome.lexema,
|
|
2327
|
+
tipoDado: p.tipoDado,
|
|
2328
|
+
})),
|
|
2329
|
+
tipoRetorno: assinatura.tipoRetorno,
|
|
2330
|
+
});
|
|
2311
2331
|
}
|
|
2312
2332
|
}
|
|
2313
2333
|
for (const prop of interfaceDecl.propriedades) {
|
|
2314
2334
|
const nomeProp = prop.nome.lexema;
|
|
2315
2335
|
const implementada = propriedades.some((p) => p.nome.lexema === nomeProp);
|
|
2316
2336
|
if (!implementada) {
|
|
2317
|
-
|
|
2337
|
+
membrosFaltando.push({
|
|
2338
|
+
tipo: 'propriedade',
|
|
2339
|
+
nome: nomeProp,
|
|
2340
|
+
tipoPropriedade: prop.tipo,
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
}
|
|
2344
|
+
if (membrosFaltando.length > 0) {
|
|
2345
|
+
const correcaoSugerida = {
|
|
2346
|
+
tipo: 'implementar-interface',
|
|
2347
|
+
nomeInterface: nomeInterface.lexema,
|
|
2348
|
+
nomeClasse: simbolo.lexema,
|
|
2349
|
+
membrosFaltando,
|
|
2350
|
+
linhaFinalClasse,
|
|
2351
|
+
};
|
|
2352
|
+
for (const membro of membrosFaltando) {
|
|
2353
|
+
const mensagem = membro.tipo === 'metodo'
|
|
2354
|
+
? `Classe '${simbolo.lexema}' não implementa o método '${membro.nome}' exigido pela interface '${nomeInterface.lexema}'.`
|
|
2355
|
+
: `Classe '${simbolo.lexema}' não declara a propriedade '${membro.nome}' exigida pela interface '${nomeInterface.lexema}'.`;
|
|
2356
|
+
const erro = this.erro(simbolo, mensagem);
|
|
2357
|
+
erro.correcaoSugerida = correcaoSugerida;
|
|
2358
|
+
this.erros.push(erro);
|
|
2318
2359
|
}
|
|
2319
2360
|
}
|
|
2320
2361
|
}
|
|
@@ -2342,7 +2383,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2342
2383
|
if (!this.primitivasConhecidas[nomeTipo]) {
|
|
2343
2384
|
this.primitivasConhecidas[nomeTipo] = {};
|
|
2344
2385
|
}
|
|
2345
|
-
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
2386
|
+
while (!this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_DIREITA) &&
|
|
2387
|
+
!this.estaNoFinal()) {
|
|
2346
2388
|
// Pular comentários dentro do corpo da extensão.
|
|
2347
2389
|
if (this.simbolos[this.atual].tipo === delegua_2.default.COMENTARIO ||
|
|
2348
2390
|
this.simbolos[this.atual].tipo === delegua_2.default.LINHA_COMENTARIO) {
|
|
@@ -2390,7 +2432,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2390
2432
|
const metodo = new declaracoes_1.FuncaoDeclaracao(nomeMetodo, corpoFuncao, tipoDaFuncao);
|
|
2391
2433
|
metodos.push(metodo);
|
|
2392
2434
|
const argumentos = params.map((parametro) => new informacao_elemento_sintatico_1.InformacaoElementoSintatico(parametro.nome.lexema, parametro.tipoDado || 'qualquer', parametro.valorPadrao === undefined));
|
|
2393
|
-
this.primitivasConhecidas[nomeTipo][nomeMetodo.lexema] =
|
|
2435
|
+
this.primitivasConhecidas[nomeTipo][nomeMetodo.lexema] =
|
|
2436
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico(nomeMetodo.lexema, tipoRetorno, true, argumentos);
|
|
2394
2437
|
}
|
|
2395
2438
|
this.consumir(delegua_2.default.CHAVE_DIREITA, "Esperado '}' ao final da extensão.");
|
|
2396
2439
|
return new declaracoes_1.Extensao(simboloTipo, metodos, ehGlobal, this.hashArquivo);
|
|
@@ -2418,13 +2461,26 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2418
2461
|
const simboloDoc = this.avancarEDevolverAnterior();
|
|
2419
2462
|
docTopLevel = new construtos_1.ComentarioComoConstruto(simboloDoc);
|
|
2420
2463
|
}
|
|
2421
|
-
if (
|
|
2422
|
-
this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO))
|
|
2423
|
-
this.verificarTipoProximoSimbolo(delegua_2.default.
|
|
2424
|
-
|
|
2425
|
-
|
|
2426
|
-
|
|
2427
|
-
|
|
2464
|
+
if (this.verificarTipoSimboloAtual(delegua_2.default.FUNCAO) ||
|
|
2465
|
+
this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) {
|
|
2466
|
+
if (this.verificarTipoProximoSimbolo(delegua_2.default.DE)) {
|
|
2467
|
+
this.avancarEDevolverAnterior(); // `função`
|
|
2468
|
+
this.avancarEDevolverAnterior(); // `de`
|
|
2469
|
+
const simboloDecorador = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado 'decorador' após 'função de'.");
|
|
2470
|
+
if (simboloDecorador.lexema !== 'decorador') {
|
|
2471
|
+
throw this.erro(simboloDecorador, "Esperado 'decorador' após 'função de'.");
|
|
2472
|
+
}
|
|
2473
|
+
const declaracaoFuncao = (await this.funcao('funcao'));
|
|
2474
|
+
declaracaoFuncao.eFuncaoDeDecorador = true;
|
|
2475
|
+
declaracaoFuncao.documentacao = docTopLevel;
|
|
2476
|
+
return declaracaoFuncao;
|
|
2477
|
+
}
|
|
2478
|
+
if (this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
|
|
2479
|
+
this.avancarEDevolverAnterior();
|
|
2480
|
+
const declaracaoFuncao = (await this.funcao('funcao'));
|
|
2481
|
+
declaracaoFuncao.documentacao = docTopLevel;
|
|
2482
|
+
return declaracaoFuncao;
|
|
2483
|
+
}
|
|
2428
2484
|
}
|
|
2429
2485
|
if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CLASSE)) {
|
|
2430
2486
|
return await this.declaracaoDeClasse();
|
|
@@ -2496,7 +2552,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2496
2552
|
this.verificarTipoSimboloAtual(delegua_2.default.FUNÇÃO)) &&
|
|
2497
2553
|
this.verificarTipoProximoSimbolo(delegua_2.default.IDENTIFICADOR)) {
|
|
2498
2554
|
this.avancarEDevolverAnterior();
|
|
2499
|
-
const declaracaoFuncao = await this.funcao('funcao');
|
|
2555
|
+
const declaracaoFuncao = (await this.funcao('funcao'));
|
|
2500
2556
|
declaracaoFuncao.documentacao = new construtos_1.ComentarioComoConstruto(simboloDoc);
|
|
2501
2557
|
return declaracaoFuncao;
|
|
2502
2558
|
}
|
|
@@ -2566,7 +2622,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2566
2622
|
}
|
|
2567
2623
|
async declaracaoAjuda() {
|
|
2568
2624
|
const simboloAjuda = this.avancarEDevolverAnterior();
|
|
2569
|
-
if (this.estaNoFinal() ||
|
|
2625
|
+
if (this.estaNoFinal() ||
|
|
2626
|
+
this.simbolos[this.atual].tipo !== delegua_2.default.PARENTESE_ESQUERDO) {
|
|
2570
2627
|
return new declaracoes_1.Ajuda(simboloAjuda.hashArquivo, simboloAjuda.linha, undefined, false);
|
|
2571
2628
|
}
|
|
2572
2629
|
this.avancarEDevolverAnterior(); // parêntese esquerdo
|
|
@@ -2708,7 +2765,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
|
|
|
2708
2765
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('valorParaConverter', 'qualquer'),
|
|
2709
2766
|
]));
|
|
2710
2767
|
this.pilhaEscopos.definirInformacoesVariavel('todos', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todos', 'lógico', true, [
|
|
2711
|
-
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer')
|
|
2768
|
+
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|
|
2712
2769
|
]));
|
|
2713
2770
|
this.pilhaEscopos.definirInformacoesVariavel('todosEmCondicao', new informacao_elemento_sintatico_1.InformacaoElementoSintatico('todosEmCondicao', 'lógico', true, [
|
|
2714
2771
|
new informacao_elemento_sintatico_1.InformacaoElementoSintatico('iteravel', 'qualquer'),
|