@designliquido/delegua 0.14.7 → 0.15.1
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/README.md +85 -85
- package/bin/delegua +2 -2
- package/bin/package.json +88 -88
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.d.ts +67 -67
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +215 -215
- package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +92 -92
- package/fontes/avaliador-sintatico/avaliador-sintatico.js +857 -727
- package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.d.ts +27 -22
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +294 -145
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.d.ts +69 -69
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +640 -640
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.d.ts +84 -84
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js +714 -714
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.d.ts +20 -20
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-guarani.js +149 -149
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.d.ts +49 -33
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js +419 -218
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +73 -73
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +534 -534
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/index.d.ts +5 -5
- package/fontes/avaliador-sintatico/dialetos/index.js +21 -21
- package/fontes/avaliador-sintatico/erro-avaliador-sintatico.d.ts +5 -5
- package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +11 -11
- package/fontes/avaliador-sintatico/index.d.ts +2 -2
- package/fontes/avaliador-sintatico/index.js +18 -18
- package/fontes/avaliador-sintatico/retornos/index.d.ts +3 -3
- package/fontes/avaliador-sintatico/retornos/index.js +19 -19
- package/fontes/avaliador-sintatico/retornos/retorno-declaracao.d.ts +3 -3
- package/fontes/avaliador-sintatico/retornos/retorno-declaracao.js +2 -2
- package/fontes/avaliador-sintatico/retornos/retorno-primario.d.ts +3 -3
- package/fontes/avaliador-sintatico/retornos/retorno-primario.js +2 -2
- package/fontes/avaliador-sintatico/retornos/retorno-resolver-declaracao.d.ts +2 -2
- package/fontes/avaliador-sintatico/retornos/retorno-resolver-declaracao.js +2 -2
- package/fontes/bibliotecas/biblioteca-global.d.ts +3 -3
- package/fontes/bibliotecas/biblioteca-global.js +315 -315
- package/fontes/bibliotecas/dialetos/egua-classico/biblioteca-global.d.ts +1 -1
- package/fontes/bibliotecas/dialetos/egua-classico/biblioteca-global.js +230 -230
- package/fontes/bibliotecas/dialetos/egua-classico/index.d.ts +2 -2
- package/fontes/bibliotecas/dialetos/egua-classico/index.js +32 -32
- package/fontes/bibliotecas/dialetos/egua-classico/matematica.d.ts +1 -1
- package/fontes/bibliotecas/dialetos/egua-classico/matematica.js +478 -478
- package/fontes/bibliotecas/dialetos/egua-classico/tempo.d.ts +1 -1
- package/fontes/bibliotecas/dialetos/egua-classico/tempo.js +39 -39
- package/fontes/bibliotecas/dialetos/egua-classico/textos.d.ts +8 -8
- package/fontes/bibliotecas/dialetos/egua-classico/textos.js +201 -201
- package/fontes/bibliotecas/primitivas-texto.d.ts +11 -11
- package/fontes/bibliotecas/primitivas-texto.js +12 -12
- package/fontes/bibliotecas/primitivas-vetor.d.ts +15 -15
- package/fontes/bibliotecas/primitivas-vetor.js +33 -33
- package/fontes/construtos/acesso-indice-variavel.d.ts +15 -15
- package/fontes/construtos/acesso-indice-variavel.js +20 -20
- package/fontes/construtos/acesso-metodo.d.ts +14 -14
- package/fontes/construtos/acesso-metodo.js +19 -19
- package/fontes/construtos/agrupamento.d.ts +14 -14
- package/fontes/construtos/agrupamento.js +19 -19
- package/fontes/construtos/atribuicao-sobrescrita.d.ts +11 -11
- package/fontes/construtos/atribuicao-sobrescrita.js +16 -16
- package/fontes/construtos/atribuir.d.ts +10 -10
- package/fontes/construtos/atribuir.js +15 -15
- package/fontes/construtos/binario.d.ts +22 -22
- package/fontes/construtos/binario.js +27 -27
- package/fontes/construtos/chamada.d.ts +13 -13
- package/fontes/construtos/chamada.js +36 -36
- package/fontes/construtos/construto.d.ts +7 -7
- package/fontes/construtos/construto.js +2 -2
- package/fontes/construtos/definir-valor.d.ts +11 -11
- package/fontes/construtos/definir-valor.js +16 -16
- package/fontes/construtos/dicionario.d.ts +10 -10
- package/fontes/construtos/dicionario.js +15 -15
- package/fontes/construtos/formatacao-escrita.d.ts +16 -16
- package/fontes/construtos/formatacao-escrita.js +21 -21
- package/fontes/construtos/funcao.d.ts +10 -10
- package/fontes/construtos/funcao.js +15 -15
- package/fontes/construtos/index.d.ts +19 -19
- package/fontes/construtos/index.js +35 -35
- package/fontes/construtos/isto.d.ts +9 -9
- package/fontes/construtos/isto.js +14 -14
- package/fontes/construtos/literal.d.ts +10 -10
- package/fontes/construtos/literal.js +14 -14
- package/fontes/construtos/logico.d.ts +11 -11
- package/fontes/construtos/logico.js +16 -16
- package/fontes/construtos/super.d.ts +10 -10
- package/fontes/construtos/super.js +15 -15
- package/fontes/construtos/unario.d.ts +11 -10
- package/fontes/construtos/unario.js +16 -15
- package/fontes/construtos/unario.js.map +1 -1
- package/fontes/construtos/variavel.d.ts +9 -9
- package/fontes/construtos/variavel.js +14 -14
- package/fontes/construtos/vetor.d.ts +9 -9
- package/fontes/construtos/vetor.js +14 -14
- package/fontes/declaracoes/bloco.d.ts +7 -7
- package/fontes/declaracoes/bloco.js +14 -14
- package/fontes/declaracoes/classe.d.ts +9 -9
- package/fontes/declaracoes/classe.js +16 -16
- package/fontes/declaracoes/continua.d.ts +6 -6
- package/fontes/declaracoes/continua.js +13 -13
- package/fontes/declaracoes/declaracao.d.ts +8 -8
- package/fontes/declaracoes/declaracao.js +17 -17
- package/fontes/declaracoes/enquanto.d.ts +9 -9
- package/fontes/declaracoes/enquanto.js +15 -15
- package/fontes/declaracoes/escolha.d.ts +14 -14
- package/fontes/declaracoes/escolha.js +19 -19
- package/fontes/declaracoes/escreva-mesma-linha.d.ts +8 -8
- package/fontes/declaracoes/escreva-mesma-linha.js +14 -14
- package/fontes/declaracoes/escreva.d.ts +8 -8
- package/fontes/declaracoes/escreva.js +14 -14
- package/fontes/declaracoes/expressao.d.ts +8 -8
- package/fontes/declaracoes/expressao.js +14 -14
- package/fontes/declaracoes/fazer.d.ts +8 -8
- package/fontes/declaracoes/fazer.js +15 -15
- package/fontes/declaracoes/funcao.d.ts +9 -9
- package/fontes/declaracoes/funcao.js +15 -15
- package/fontes/declaracoes/importar.d.ts +9 -9
- package/fontes/declaracoes/importar.js +15 -15
- package/fontes/declaracoes/index.d.ts +19 -19
- package/fontes/declaracoes/index.js +35 -35
- package/fontes/declaracoes/leia.d.ts +12 -12
- package/fontes/declaracoes/leia.js +18 -18
- package/fontes/declaracoes/para.d.ts +10 -10
- package/fontes/declaracoes/para.js +17 -17
- package/fontes/declaracoes/retorna.d.ts +8 -8
- package/fontes/declaracoes/retorna.js +15 -15
- package/fontes/declaracoes/se.d.ts +11 -11
- package/fontes/declaracoes/se.js +17 -17
- package/fontes/declaracoes/sustar.d.ts +6 -6
- package/fontes/declaracoes/sustar.js +13 -13
- package/fontes/declaracoes/tente.d.ts +14 -14
- package/fontes/declaracoes/tente.js +20 -20
- package/fontes/declaracoes/var.d.ts +9 -9
- package/fontes/declaracoes/var.js +15 -15
- package/fontes/depuracao/cyrb53.d.ts +9 -9
- package/fontes/depuracao/cyrb53.js +22 -22
- package/fontes/depuracao/index.d.ts +2 -2
- package/fontes/depuracao/index.js +23 -23
- package/fontes/depuracao/ponto-parada.d.ts +4 -4
- package/fontes/depuracao/ponto-parada.js +2 -2
- package/fontes/espaco-variaveis.d.ts +19 -19
- package/fontes/espaco-variaveis.js +19 -19
- package/fontes/estruturas/chamavel.d.ts +5 -5
- package/fontes/estruturas/chamavel.js +12 -12
- package/fontes/estruturas/classe-padrao.d.ts +17 -17
- package/fontes/estruturas/classe-padrao.js +28 -28
- package/fontes/estruturas/delegua-classe.d.ts +16 -16
- package/fontes/estruturas/delegua-classe.js +38 -38
- package/fontes/estruturas/delegua-funcao.d.ts +18 -18
- package/fontes/estruturas/delegua-funcao.js +60 -60
- package/fontes/estruturas/funcao-padrao.d.ts +12 -12
- package/fontes/estruturas/funcao-padrao.js +22 -22
- package/fontes/estruturas/index.d.ts +9 -9
- package/fontes/estruturas/index.js +25 -25
- package/fontes/estruturas/metodo-primitiva.d.ts +17 -17
- package/fontes/estruturas/metodo-primitiva.js +26 -26
- package/fontes/estruturas/modulo.d.ts +9 -9
- package/fontes/estruturas/modulo.js +13 -13
- package/fontes/estruturas/objeto-delegua-classe.d.ts +10 -10
- package/fontes/estruturas/objeto-delegua-classe.js +26 -26
- package/fontes/estruturas/objeto-padrao.d.ts +9 -9
- package/fontes/estruturas/objeto-padrao.js +21 -21
- package/fontes/excecoes/erro-em-tempo-de-execucao.d.ts +7 -7
- package/fontes/excecoes/erro-em-tempo-de-execucao.js +13 -13
- package/fontes/excecoes/index.d.ts +1 -1
- package/fontes/excecoes/index.js +17 -17
- package/fontes/formatadores/delegua.d.ts +18 -18
- package/fontes/formatadores/delegua.js +82 -82
- package/fontes/formatadores/index.d.ts +1 -1
- package/fontes/formatadores/index.js +17 -17
- package/fontes/interfaces/avaliador-sintatico-interface.d.ts +57 -57
- package/fontes/interfaces/avaliador-sintatico-interface.js +2 -2
- package/fontes/interfaces/construtos/index.d.ts +4 -4
- package/fontes/interfaces/construtos/index.js +2 -2
- package/fontes/interfaces/escopo-execucao.d.ts +11 -11
- package/fontes/interfaces/escopo-execucao.js +2 -2
- package/fontes/interfaces/index.d.ts +11 -11
- package/fontes/interfaces/index.js +27 -27
- package/fontes/interfaces/interpretador-com-depuracao-interface.d.ts +17 -17
- package/fontes/interfaces/interpretador-com-depuracao-interface.js +2 -2
- package/fontes/interfaces/interpretador-interface.d.ts +55 -55
- package/fontes/interfaces/interpretador-interface.js +2 -2
- package/fontes/interfaces/lexador-interface.d.ts +23 -23
- package/fontes/interfaces/lexador-interface.js +2 -2
- package/fontes/interfaces/parametro-interface.d.ts +6 -6
- package/fontes/interfaces/parametro-interface.js +2 -2
- package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +25 -25
- package/fontes/interfaces/pilha-escopos-execucao-interface.js +2 -2
- package/fontes/interfaces/pilha-interface.d.ts +7 -7
- package/fontes/interfaces/pilha-interface.js +2 -2
- package/fontes/interfaces/resolvedor-interface.d.ts +41 -41
- package/fontes/interfaces/resolvedor-interface.js +2 -2
- package/fontes/interfaces/retornos/index.d.ts +4 -4
- package/fontes/interfaces/retornos/index.js +20 -20
- package/fontes/interfaces/retornos/retorno-avaliador-sintatico.d.ts +6 -6
- package/fontes/interfaces/retornos/retorno-avaliador-sintatico.js +2 -2
- package/fontes/interfaces/retornos/retorno-execucao-interface.d.ts +5 -5
- package/fontes/interfaces/retornos/retorno-execucao-interface.js +2 -2
- package/fontes/interfaces/retornos/retorno-interpretador.d.ts +5 -5
- package/fontes/interfaces/retornos/retorno-interpretador.js +2 -2
- package/fontes/interfaces/retornos/retorno-lexador.d.ts +10 -10
- package/fontes/interfaces/retornos/retorno-lexador.js +2 -2
- package/fontes/interfaces/simbolo-interface.d.ts +7 -7
- package/fontes/interfaces/simbolo-interface.js +2 -2
- package/fontes/interfaces/tradutor-interface.d.ts +4 -4
- package/fontes/interfaces/tradutor-interface.js +2 -2
- package/fontes/interfaces/variavel-interface.d.ts +4 -4
- package/fontes/interfaces/variavel-interface.js +2 -2
- package/fontes/interpretador/dialetos/egua-classico/index.d.ts +1 -1
- package/fontes/interpretador/dialetos/egua-classico/index.js +17 -17
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +99 -99
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +743 -743
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.d.ts +5 -5
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/erro-resolvedor.js +11 -11
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/index.d.ts +3 -3
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/index.js +19 -19
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.d.ts +9 -9
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/pilha-escopos.js +25 -25
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +87 -87
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +387 -387
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.d.ts +6 -6
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/retorno-resolvedor.js +2 -2
- package/fontes/interpretador/dialetos/index.d.ts +4 -4
- package/fontes/interpretador/dialetos/index.js +20 -20
- package/fontes/interpretador/dialetos/portugol-studio/interpretador-portugol-studio.d.ts +12 -12
- package/fontes/interpretador/dialetos/portugol-studio/interpretador-portugol-studio.js +26 -26
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.d.ts +40 -40
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js +96 -96
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.d.ts +46 -46
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.js +102 -102
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.js.map +1 -1
- package/fontes/interpretador/erro-interpretador.d.ts +8 -8
- package/fontes/interpretador/erro-interpretador.js +2 -2
- package/fontes/interpretador/index.d.ts +4 -4
- package/fontes/interpretador/index.js +20 -20
- package/fontes/interpretador/inferenciador.d.ts +1 -1
- package/fontes/interpretador/inferenciador.js +31 -31
- package/fontes/interpretador/interpretador-base.d.ts +188 -187
- package/fontes/interpretador/interpretador-base.js +1000 -972
- package/fontes/interpretador/interpretador-base.js.map +1 -1
- package/fontes/interpretador/interpretador-com-depuracao.d.ts +199 -199
- package/fontes/interpretador/interpretador-com-depuracao.js +516 -516
- package/fontes/interpretador/pilha-escopos-execucao.d.ts +38 -38
- package/fontes/interpretador/pilha-escopos-execucao.js +158 -158
- package/fontes/lexador/dialetos/index.d.ts +6 -6
- package/fontes/lexador/dialetos/index.js +22 -22
- package/fontes/lexador/dialetos/lexador-birl.d.ts +12 -12
- package/fontes/lexador/dialetos/lexador-birl.js +211 -165
- package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-egua-classico.d.ts +36 -36
- package/fontes/lexador/dialetos/lexador-egua-classico.js +286 -286
- package/fontes/lexador/dialetos/lexador-eguap.d.ts +51 -51
- package/fontes/lexador/dialetos/lexador-eguap.js +398 -398
- package/fontes/lexador/dialetos/lexador-guarani.d.ts +9 -9
- package/fontes/lexador/dialetos/lexador-guarani.js +113 -113
- package/fontes/lexador/dialetos/lexador-portugol-ipt.d.ts +33 -33
- package/fontes/lexador/dialetos/lexador-portugol-ipt.js +195 -195
- package/fontes/lexador/dialetos/lexador-portugol-studio.d.ts +21 -15
- package/fontes/lexador/dialetos/lexador-portugol-studio.js +280 -244
- package/fontes/lexador/dialetos/lexador-portugol-studio.js.map +1 -1
- package/fontes/lexador/dialetos/lexador-visualg.d.ts +18 -18
- package/fontes/lexador/dialetos/lexador-visualg.js +218 -218
- package/fontes/lexador/dialetos/palavras-reservadas/birl.d.ts +46 -41
- package/fontes/lexador/dialetos/palavras-reservadas/birl.js +63 -58
- package/fontes/lexador/dialetos/palavras-reservadas/birl.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.d.ts +36 -36
- package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +41 -41
- package/fontes/lexador/dialetos/palavras-reservadas/guarani.d.ts +4 -4
- package/fontes/lexador/dialetos/palavras-reservadas/guarani.js +9 -9
- package/fontes/lexador/dialetos/palavras-reservadas/index.d.ts +3 -3
- package/fontes/lexador/dialetos/palavras-reservadas/index.js +19 -19
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-ipt.d.ts +6 -6
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-ipt.js +11 -11
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.d.ts +23 -11
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js +28 -16
- package/fontes/lexador/dialetos/palavras-reservadas/portugol-studio.js.map +1 -1
- package/fontes/lexador/dialetos/palavras-reservadas/rantiaquin.d.ts +2 -2
- package/fontes/lexador/dialetos/palavras-reservadas/rantiaquin.js +3 -3
- package/fontes/lexador/dialetos/palavras-reservadas/visualg.d.ts +60 -60
- package/fontes/lexador/dialetos/palavras-reservadas/visualg.js +65 -65
- package/fontes/lexador/dialetos/pragma.d.ts +8 -8
- package/fontes/lexador/dialetos/pragma.js +2 -2
- package/fontes/lexador/erro-lexador.d.ts +5 -5
- package/fontes/lexador/erro-lexador.js +2 -2
- package/fontes/lexador/index.d.ts +2 -2
- package/fontes/lexador/index.js +18 -18
- package/fontes/lexador/lexador-base-linha-unica.d.ts +28 -28
- package/fontes/lexador/lexador-base-linha-unica.js +82 -82
- package/fontes/lexador/lexador-base.d.ts +41 -41
- package/fontes/lexador/lexador-base.js +112 -112
- package/fontes/lexador/lexador.d.ts +43 -43
- package/fontes/lexador/lexador.js +412 -408
- package/fontes/lexador/lexador.js.map +1 -1
- package/fontes/lexador/palavras-reservadas.d.ts +36 -36
- package/fontes/lexador/palavras-reservadas.js +41 -41
- package/fontes/lexador/simbolo.d.ts +10 -10
- package/fontes/lexador/simbolo.js +16 -16
- package/fontes/quebras/index.d.ts +10 -10
- package/fontes/quebras/index.js +19 -19
- package/fontes/tipos-de-simbolos/birl.d.ts +71 -57
- package/fontes/tipos-de-simbolos/birl.js +78 -61
- package/fontes/tipos-de-simbolos/birl.js.map +1 -1
- package/fontes/tipos-de-simbolos/comum.d.ts +22 -22
- package/fontes/tipos-de-simbolos/comum.js +23 -23
- package/fontes/tipos-de-simbolos/delegua.d.ts +80 -80
- package/fontes/tipos-de-simbolos/delegua.js +81 -81
- package/fontes/tipos-de-simbolos/egua-classico.d.ts +77 -77
- package/fontes/tipos-de-simbolos/egua-classico.js +78 -78
- package/fontes/tipos-de-simbolos/eguap.d.ts +73 -73
- package/fontes/tipos-de-simbolos/eguap.js +74 -74
- package/fontes/tipos-de-simbolos/guarani.d.ts +14 -14
- package/fontes/tipos-de-simbolos/guarani.js +15 -15
- package/fontes/tipos-de-simbolos/portugol-ipt.d.ts +28 -28
- package/fontes/tipos-de-simbolos/portugol-ipt.js +29 -29
- package/fontes/tipos-de-simbolos/portugol-studio.d.ts +53 -37
- package/fontes/tipos-de-simbolos/portugol-studio.js +54 -38
- package/fontes/tipos-de-simbolos/portugol-studio.js.map +1 -1
- package/fontes/tipos-de-simbolos/rantiaquin.d.ts +2 -2
- package/fontes/tipos-de-simbolos/rantiaquin.js +3 -3
- package/fontes/tipos-de-simbolos/visualg.d.ts +68 -68
- package/fontes/tipos-de-simbolos/visualg.js +69 -69
- package/fontes/tradutores/dicionarios/dicionario-delegua-javascript.d.ts +2 -2
- package/fontes/tradutores/dicionarios/dicionario-delegua-javascript.js +10 -10
- package/fontes/tradutores/dicionarios/index.d.ts +1 -1
- package/fontes/tradutores/dicionarios/index.js +17 -17
- package/fontes/tradutores/index.d.ts +2 -2
- package/fontes/tradutores/index.js +18 -18
- package/fontes/tradutores/python/python3-lexer.d.ts +152 -152
- package/fontes/tradutores/python/python3-lexer.js +1226 -1226
- package/fontes/tradutores/python/python3-listener.d.ts +953 -953
- package/fontes/tradutores/python/python3-listener.js +2 -2
- package/fontes/tradutores/python/python3-parser.d.ts +1330 -1330
- package/fontes/tradutores/python/python3-parser.js +11156 -11156
- package/fontes/tradutores/python/python3-visitor.d.ts +612 -612
- package/fontes/tradutores/python/python3-visitor.js +2 -2
- package/fontes/tradutores/tradutor-javascript.d.ts +83 -83
- package/fontes/tradutores/tradutor-javascript.js +470 -470
- package/fontes/tradutores/tradutor-javascript.js.map +1 -1
- package/fontes/tradutores/tradutor-python.d.ts +1 -1
- package/fontes/tradutores/tradutor-python.js +34 -34
- package/fontes/tradutores/tradutor-reverso-javascript.d.ts +47 -47
- package/fontes/tradutores/tradutor-reverso-javascript.js +342 -342
- package/index.d.ts +5 -5
- package/index.js +23 -23
- package/package.json +88 -88
|
@@ -1,728 +1,858 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.AvaliadorSintatico = void 0;
|
|
7
|
-
const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
8
|
-
const browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime"));
|
|
9
|
-
const construtos_1 = require("../construtos");
|
|
10
|
-
const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
|
|
11
|
-
const declaracoes_1 = require("../declaracoes");
|
|
12
|
-
/**
|
|
13
|
-
* O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
14
|
-
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
15
|
-
* Há dois grupos de estruturas de alto nível: Construtos e Declarações.
|
|
16
|
-
*/
|
|
17
|
-
class AvaliadorSintatico {
|
|
18
|
-
constructor(performance = false) {
|
|
19
|
-
this.hashArquivo = 0;
|
|
20
|
-
this.atual = 0;
|
|
21
|
-
this.blocos = 0;
|
|
22
|
-
this.erros = [];
|
|
23
|
-
this.performance = performance;
|
|
24
|
-
}
|
|
25
|
-
erro(simbolo, mensagemDeErro) {
|
|
26
|
-
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
|
|
27
|
-
this.erros.push(excecao);
|
|
28
|
-
return excecao;
|
|
29
|
-
}
|
|
30
|
-
consumir(tipo, mensagemDeErro) {
|
|
31
|
-
if (this.verificarTipoSimboloAtual(tipo))
|
|
32
|
-
return this.avancarEDevolverAnterior();
|
|
33
|
-
throw this.erro(this.simbolos[this.atual], mensagemDeErro);
|
|
34
|
-
}
|
|
35
|
-
verificarTipoSimboloAtual(tipo) {
|
|
36
|
-
if (this.estaNoFinal())
|
|
37
|
-
return false;
|
|
38
|
-
return this.simbolos[this.atual].tipo === tipo;
|
|
39
|
-
}
|
|
40
|
-
verificarTipoProximoSimbolo(tipo) {
|
|
41
|
-
return this.simbolos[this.atual + 1].tipo === tipo;
|
|
42
|
-
}
|
|
43
|
-
simboloAtual() {
|
|
44
|
-
return this.simbolos[this.atual];
|
|
45
|
-
}
|
|
46
|
-
simboloAnterior() {
|
|
47
|
-
return this.simbolos[this.atual - 1];
|
|
48
|
-
}
|
|
49
|
-
estaNoFinal() {
|
|
50
|
-
return this.atual === this.simbolos.length;
|
|
51
|
-
}
|
|
52
|
-
avancarEDevolverAnterior() {
|
|
53
|
-
if (!this.estaNoFinal())
|
|
54
|
-
this.atual += 1;
|
|
55
|
-
return this.simbolos[this.atual - 1];
|
|
56
|
-
}
|
|
57
|
-
verificarSeSimboloAtualEIgualA(...argumentos) {
|
|
58
|
-
for (let i = 0; i < argumentos.length; i++) {
|
|
59
|
-
const tipoAtual = argumentos[i];
|
|
60
|
-
if (this.verificarTipoSimboloAtual(tipoAtual)) {
|
|
61
|
-
this.avancarEDevolverAnterior();
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return false;
|
|
66
|
-
}
|
|
67
|
-
primario() {
|
|
68
|
-
const simboloAtual = this.simbolos[this.atual];
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
this.
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
return
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
while (
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
this.
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
this.
|
|
387
|
-
|
|
388
|
-
if (
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
delegua_1.default.
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
this.
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
let
|
|
527
|
-
if (
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
this.
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
this.
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
this.
|
|
668
|
-
this.
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
this.
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
}
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AvaliadorSintatico = void 0;
|
|
7
|
+
const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
|
|
8
|
+
const browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime"));
|
|
9
|
+
const construtos_1 = require("../construtos");
|
|
10
|
+
const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
|
|
11
|
+
const declaracoes_1 = require("../declaracoes");
|
|
12
|
+
/**
|
|
13
|
+
* O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
|
|
14
|
+
* Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
|
|
15
|
+
* Há dois grupos de estruturas de alto nível: Construtos e Declarações.
|
|
16
|
+
*/
|
|
17
|
+
class AvaliadorSintatico {
|
|
18
|
+
constructor(performance = false) {
|
|
19
|
+
this.hashArquivo = 0;
|
|
20
|
+
this.atual = 0;
|
|
21
|
+
this.blocos = 0;
|
|
22
|
+
this.erros = [];
|
|
23
|
+
this.performance = performance;
|
|
24
|
+
}
|
|
25
|
+
erro(simbolo, mensagemDeErro) {
|
|
26
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
|
|
27
|
+
this.erros.push(excecao);
|
|
28
|
+
return excecao;
|
|
29
|
+
}
|
|
30
|
+
consumir(tipo, mensagemDeErro) {
|
|
31
|
+
if (this.verificarTipoSimboloAtual(tipo))
|
|
32
|
+
return this.avancarEDevolverAnterior();
|
|
33
|
+
throw this.erro(this.simbolos[this.atual], mensagemDeErro);
|
|
34
|
+
}
|
|
35
|
+
verificarTipoSimboloAtual(tipo) {
|
|
36
|
+
if (this.estaNoFinal())
|
|
37
|
+
return false;
|
|
38
|
+
return this.simbolos[this.atual].tipo === tipo;
|
|
39
|
+
}
|
|
40
|
+
verificarTipoProximoSimbolo(tipo) {
|
|
41
|
+
return this.simbolos[this.atual + 1].tipo === tipo;
|
|
42
|
+
}
|
|
43
|
+
simboloAtual() {
|
|
44
|
+
return this.simbolos[this.atual];
|
|
45
|
+
}
|
|
46
|
+
simboloAnterior() {
|
|
47
|
+
return this.simbolos[this.atual - 1];
|
|
48
|
+
}
|
|
49
|
+
estaNoFinal() {
|
|
50
|
+
return this.atual === this.simbolos.length;
|
|
51
|
+
}
|
|
52
|
+
avancarEDevolverAnterior() {
|
|
53
|
+
if (!this.estaNoFinal())
|
|
54
|
+
this.atual += 1;
|
|
55
|
+
return this.simbolos[this.atual - 1];
|
|
56
|
+
}
|
|
57
|
+
verificarSeSimboloAtualEIgualA(...argumentos) {
|
|
58
|
+
for (let i = 0; i < argumentos.length; i++) {
|
|
59
|
+
const tipoAtual = argumentos[i];
|
|
60
|
+
if (this.verificarTipoSimboloAtual(tipoAtual)) {
|
|
61
|
+
this.avancarEDevolverAnterior();
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
primario() {
|
|
68
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
69
|
+
let valores = [];
|
|
70
|
+
switch (simboloAtual.tipo) {
|
|
71
|
+
case delegua_1.default.CHAVE_ESQUERDA:
|
|
72
|
+
this.avancarEDevolverAnterior();
|
|
73
|
+
const chaves = [];
|
|
74
|
+
valores = [];
|
|
75
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA)) {
|
|
76
|
+
return new construtos_1.Dicionario(this.hashArquivo, Number(simboloAtual.linha), [], []);
|
|
77
|
+
}
|
|
78
|
+
while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA)) {
|
|
79
|
+
const chave = this.atribuir();
|
|
80
|
+
this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
|
|
81
|
+
const valor = this.atribuir();
|
|
82
|
+
chaves.push(chave);
|
|
83
|
+
valores.push(valor);
|
|
84
|
+
if (this.simbolos[this.atual].tipo !== delegua_1.default.CHAVE_DIREITA) {
|
|
85
|
+
this.consumir(delegua_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return new construtos_1.Dicionario(this.hashArquivo, Number(simboloAtual.linha), chaves, valores);
|
|
89
|
+
case delegua_1.default.COLCHETE_ESQUERDO:
|
|
90
|
+
this.avancarEDevolverAnterior();
|
|
91
|
+
valores = [];
|
|
92
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_DIREITO)) {
|
|
93
|
+
return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), []);
|
|
94
|
+
}
|
|
95
|
+
while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_DIREITO)) {
|
|
96
|
+
const valor = this.atribuir();
|
|
97
|
+
valores.push(valor);
|
|
98
|
+
if (this.simbolos[this.atual].tipo !== delegua_1.default.COLCHETE_DIREITO) {
|
|
99
|
+
this.consumir(delegua_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), valores);
|
|
103
|
+
case delegua_1.default.FALSO:
|
|
104
|
+
this.avancarEDevolverAnterior();
|
|
105
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), false);
|
|
106
|
+
case delegua_1.default.FUNCAO:
|
|
107
|
+
case delegua_1.default.FUNÇÃO:
|
|
108
|
+
const simboloFuncao = this.avancarEDevolverAnterior();
|
|
109
|
+
return this.corpoDaFuncao(simboloFuncao.lexema);
|
|
110
|
+
case delegua_1.default.IDENTIFICADOR:
|
|
111
|
+
const simboloIdentificador = this.avancarEDevolverAnterior();
|
|
112
|
+
// Se o próximo símbolo é um incremento ou um decremento,
|
|
113
|
+
// aqui deve retornar um unário correspondente.
|
|
114
|
+
// Caso contrário, apenas retornar um construto de variável.
|
|
115
|
+
if (this.simbolos[this.atual] && [delegua_1.default.INCREMENTAR, delegua_1.default.DECREMENTAR].includes(this.simbolos[this.atual].tipo)) {
|
|
116
|
+
const simboloIncrementoDecremento = this.avancarEDevolverAnterior();
|
|
117
|
+
return new construtos_1.Unario(this.hashArquivo, simboloIncrementoDecremento, new construtos_1.Variavel(this.hashArquivo, simboloIdentificador), 'DEPOIS');
|
|
118
|
+
}
|
|
119
|
+
return new construtos_1.Variavel(this.hashArquivo, simboloIdentificador);
|
|
120
|
+
case delegua_1.default.IMPORTAR:
|
|
121
|
+
this.avancarEDevolverAnterior();
|
|
122
|
+
return this.declaracaoImportar();
|
|
123
|
+
case delegua_1.default.ISTO:
|
|
124
|
+
this.avancarEDevolverAnterior();
|
|
125
|
+
return new construtos_1.Isto(this.hashArquivo, Number(simboloAtual.linha), simboloAtual);
|
|
126
|
+
case delegua_1.default.NULO:
|
|
127
|
+
this.avancarEDevolverAnterior();
|
|
128
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), null);
|
|
129
|
+
case delegua_1.default.NUMERO:
|
|
130
|
+
case delegua_1.default.TEXTO:
|
|
131
|
+
const simboloNumeroTexto = this.avancarEDevolverAnterior();
|
|
132
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloNumeroTexto.linha), simboloNumeroTexto.literal);
|
|
133
|
+
case delegua_1.default.PARENTESE_ESQUERDO:
|
|
134
|
+
this.avancarEDevolverAnterior();
|
|
135
|
+
const expressao = this.expressao();
|
|
136
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
137
|
+
return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
|
|
138
|
+
case delegua_1.default.SUPER:
|
|
139
|
+
const simboloChave = this.avancarEDevolverAnterior();
|
|
140
|
+
this.consumir(delegua_1.default.PONTO, "Esperado '.' após 'super'.");
|
|
141
|
+
const metodo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
|
|
142
|
+
return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
|
|
143
|
+
case delegua_1.default.VERDADEIRO:
|
|
144
|
+
this.avancarEDevolverAnterior();
|
|
145
|
+
return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), true);
|
|
146
|
+
}
|
|
147
|
+
/*if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.SUPER)) {
|
|
148
|
+
const simboloChave = this.simbolos[this.atual - 1];
|
|
149
|
+
this.consumir(tiposDeSimbolos.PONTO, "Esperado '.' após 'super'.");
|
|
150
|
+
const metodo = this.consumir(tiposDeSimbolos.IDENTIFICADOR, 'Esperado nome do método da Superclasse.');
|
|
151
|
+
return new Super(this.hashArquivo, simboloChave, metodo);
|
|
152
|
+
}*/
|
|
153
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.COLCHETE_ESQUERDO)) {
|
|
154
|
+
const valores = [];
|
|
155
|
+
|
|
156
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.COLCHETE_DIREITO)) {
|
|
157
|
+
return new Vetor(this.hashArquivo, Number(simboloAtual.linha), []);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
while (!this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.COLCHETE_DIREITO)) {
|
|
161
|
+
const valor = this.atribuir();
|
|
162
|
+
valores.push(valor);
|
|
163
|
+
if (this.simbolos[this.atual].tipo !== tiposDeSimbolos.COLCHETE_DIREITO) {
|
|
164
|
+
this.consumir(tiposDeSimbolos.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
return new Vetor(this.hashArquivo, Number(simboloAtual.linha), valores);
|
|
169
|
+
} */
|
|
170
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.CHAVE_ESQUERDA)) {
|
|
171
|
+
const chaves = [];
|
|
172
|
+
const valores = [];
|
|
173
|
+
|
|
174
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.CHAVE_DIREITA)) {
|
|
175
|
+
return new Dicionario(this.hashArquivo, Number(simboloAtual.linha), [], []);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
while (!this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.CHAVE_DIREITA)) {
|
|
179
|
+
const chave = this.atribuir();
|
|
180
|
+
this.consumir(tiposDeSimbolos.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
|
|
181
|
+
const valor = this.atribuir();
|
|
182
|
+
|
|
183
|
+
chaves.push(chave);
|
|
184
|
+
valores.push(valor);
|
|
185
|
+
|
|
186
|
+
if (this.simbolos[this.atual].tipo !== tiposDeSimbolos.CHAVE_DIREITA) {
|
|
187
|
+
this.consumir(tiposDeSimbolos.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return new Dicionario(this.hashArquivo, Number(simboloAtual.linha), chaves, valores);
|
|
192
|
+
} */
|
|
193
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.FUNÇÃO, tiposDeSimbolos.FUNCAO))
|
|
194
|
+
return this.corpoDaFuncao(this.simbolos[this.atual - 1].lexema);
|
|
195
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.FALSO))
|
|
196
|
+
return new Literal(this.hashArquivo, Number(simboloAtual.linha), false);
|
|
197
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.VERDADEIRO))
|
|
198
|
+
return new Literal(this.hashArquivo, Number(simboloAtual.linha), true);
|
|
199
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.NULO))
|
|
200
|
+
return new Literal(this.hashArquivo, Number(simboloAtual.linha), null);
|
|
201
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.ISTO))
|
|
202
|
+
return new Isto(this.hashArquivo, Number(simboloAtual.linha), this.simbolos[this.atual - 1]); */
|
|
203
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.NUMERO, tiposDeSimbolos.TEXTO)) {
|
|
204
|
+
const simboloAnterior: SimboloInterface = this.simbolos[this.atual - 1];
|
|
205
|
+
return new Literal(this.hashArquivo, Number(simboloAnterior.linha), simboloAnterior.literal);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.IDENTIFICADOR)) {
|
|
209
|
+
return new Variavel(this.hashArquivo, this.simbolos[this.atual - 1]);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PARENTESE_ESQUERDO)) {
|
|
213
|
+
const expressao = this.expressao();
|
|
214
|
+
this.consumir(tiposDeSimbolos.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
|
|
215
|
+
|
|
216
|
+
return new Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.IMPORTAR)) return this.declaracaoImportar(); */
|
|
220
|
+
throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
|
|
221
|
+
}
|
|
222
|
+
finalizarChamada(entidadeChamada) {
|
|
223
|
+
const argumentos = [];
|
|
224
|
+
if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
|
|
225
|
+
do {
|
|
226
|
+
if (argumentos.length >= 255) {
|
|
227
|
+
throw this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 argumentos.');
|
|
228
|
+
}
|
|
229
|
+
argumentos.push(this.expressao());
|
|
230
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
|
|
231
|
+
}
|
|
232
|
+
const parenteseDireito = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
|
|
233
|
+
return new construtos_1.Chamada(this.hashArquivo, entidadeChamada, parenteseDireito, argumentos);
|
|
234
|
+
}
|
|
235
|
+
chamar() {
|
|
236
|
+
let expressao = this.primario();
|
|
237
|
+
while (true) {
|
|
238
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PARENTESE_ESQUERDO)) {
|
|
239
|
+
expressao = this.finalizarChamada(expressao);
|
|
240
|
+
}
|
|
241
|
+
else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO)) {
|
|
242
|
+
const nome = this.consumir(delegua_1.default.IDENTIFICADOR, "Esperado nome do método após '.'.");
|
|
243
|
+
expressao = new construtos_1.AcessoMetodo(this.hashArquivo, expressao, nome);
|
|
244
|
+
}
|
|
245
|
+
else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_ESQUERDO)) {
|
|
246
|
+
const indice = this.expressao();
|
|
247
|
+
const simboloFechamento = this.consumir(delegua_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
|
|
248
|
+
expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return expressao;
|
|
255
|
+
}
|
|
256
|
+
unario() {
|
|
257
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.NEGACAO, delegua_1.default.SUBTRACAO, delegua_1.default.BIT_NOT, delegua_1.default.INCREMENTAR, delegua_1.default.DECREMENTAR)) {
|
|
258
|
+
const operador = this.simbolos[this.atual - 1];
|
|
259
|
+
const direito = this.unario();
|
|
260
|
+
return new construtos_1.Unario(this.hashArquivo, operador, direito, 'ANTES');
|
|
261
|
+
}
|
|
262
|
+
return this.chamar();
|
|
263
|
+
}
|
|
264
|
+
exponenciacao() {
|
|
265
|
+
let expressao = this.unario();
|
|
266
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.EXPONENCIACAO)) {
|
|
267
|
+
const operador = this.simbolos[this.atual - 1];
|
|
268
|
+
const direito = this.unario();
|
|
269
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
270
|
+
}
|
|
271
|
+
return expressao;
|
|
272
|
+
}
|
|
273
|
+
multiplicar() {
|
|
274
|
+
let expressao = this.exponenciacao();
|
|
275
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.DIVISAO, delegua_1.default.DIVISAO_IGUAL, delegua_1.default.DIVISAO_INTEIRA, delegua_1.default.DIVISAO_INTEIRA_IGUAL, delegua_1.default.MODULO, delegua_1.default.MODULO_IGUAL, delegua_1.default.MULTIPLICACAO, delegua_1.default.MULTIPLICACAO_IGUAL)) {
|
|
276
|
+
const operador = this.simbolos[this.atual - 1];
|
|
277
|
+
const direito = this.exponenciacao();
|
|
278
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
279
|
+
}
|
|
280
|
+
return expressao;
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Se símbolo de operação é `+`, `-`, `+=` ou `-=`, monta objeto `Binario` para
|
|
284
|
+
* ser avaliado pelo Interpretador.
|
|
285
|
+
* @returns Um Construto, normalmente um `Binario`, ou `Unario` se houver alguma operação unária para ser avaliada.
|
|
286
|
+
*/
|
|
287
|
+
adicaoOuSubtracao() {
|
|
288
|
+
let expressao = this.multiplicar();
|
|
289
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SUBTRACAO, delegua_1.default.ADICAO, delegua_1.default.MAIS_IGUAL, delegua_1.default.MENOS_IGUAL)) {
|
|
290
|
+
const operador = this.simbolos[this.atual - 1];
|
|
291
|
+
const direito = this.multiplicar();
|
|
292
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
293
|
+
}
|
|
294
|
+
return expressao;
|
|
295
|
+
}
|
|
296
|
+
bitFill() {
|
|
297
|
+
let expressao = this.adicaoOuSubtracao();
|
|
298
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.MENOR_MENOR, delegua_1.default.MAIOR_MAIOR)) {
|
|
299
|
+
const operador = this.simbolos[this.atual - 1];
|
|
300
|
+
const direito = this.adicaoOuSubtracao();
|
|
301
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
302
|
+
}
|
|
303
|
+
return expressao;
|
|
304
|
+
}
|
|
305
|
+
bitE() {
|
|
306
|
+
let expressao = this.bitFill();
|
|
307
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.BIT_AND)) {
|
|
308
|
+
const operador = this.simbolos[this.atual - 1];
|
|
309
|
+
const direito = this.bitFill();
|
|
310
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
311
|
+
}
|
|
312
|
+
return expressao;
|
|
313
|
+
}
|
|
314
|
+
bitOu() {
|
|
315
|
+
let expressao = this.bitE();
|
|
316
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.BIT_OR, delegua_1.default.BIT_XOR)) {
|
|
317
|
+
const operador = this.simbolos[this.atual - 1];
|
|
318
|
+
const direito = this.bitE();
|
|
319
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
320
|
+
}
|
|
321
|
+
return expressao;
|
|
322
|
+
}
|
|
323
|
+
comparar() {
|
|
324
|
+
let expressao = this.bitOu();
|
|
325
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.MAIOR, delegua_1.default.MAIOR_IGUAL, delegua_1.default.MENOR, delegua_1.default.MENOR_IGUAL)) {
|
|
326
|
+
const operador = this.simbolos[this.atual - 1];
|
|
327
|
+
const direito = this.bitOu();
|
|
328
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
329
|
+
}
|
|
330
|
+
return expressao;
|
|
331
|
+
}
|
|
332
|
+
comparacaoIgualdade() {
|
|
333
|
+
let expressao = this.comparar();
|
|
334
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.DIFERENTE, delegua_1.default.IGUAL_IGUAL)) {
|
|
335
|
+
const operador = this.simbolos[this.atual - 1];
|
|
336
|
+
const direito = this.comparar();
|
|
337
|
+
expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
|
|
338
|
+
}
|
|
339
|
+
return expressao;
|
|
340
|
+
}
|
|
341
|
+
em() {
|
|
342
|
+
let expressao = this.comparacaoIgualdade();
|
|
343
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.EM)) {
|
|
344
|
+
const operador = this.simbolos[this.atual - 1];
|
|
345
|
+
const direito = this.comparacaoIgualdade();
|
|
346
|
+
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
347
|
+
}
|
|
348
|
+
return expressao;
|
|
349
|
+
}
|
|
350
|
+
e() {
|
|
351
|
+
let expressao = this.em();
|
|
352
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.E)) {
|
|
353
|
+
const operador = this.simbolos[this.atual - 1];
|
|
354
|
+
const direito = this.em();
|
|
355
|
+
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
356
|
+
}
|
|
357
|
+
return expressao;
|
|
358
|
+
}
|
|
359
|
+
ou() {
|
|
360
|
+
let expressao = this.e();
|
|
361
|
+
while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.OU)) {
|
|
362
|
+
const operador = this.simbolos[this.atual - 1];
|
|
363
|
+
const direito = this.e();
|
|
364
|
+
expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
|
|
365
|
+
}
|
|
366
|
+
return expressao;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Método que resolve atribuições.
|
|
370
|
+
* @returns Um construto do tipo `Atribuir`, `Conjunto` ou `AtribuicaoSobrescrita`.
|
|
371
|
+
*/
|
|
372
|
+
atribuir() {
|
|
373
|
+
const expressao = this.ou();
|
|
374
|
+
if (expressao instanceof construtos_1.Binario &&
|
|
375
|
+
[
|
|
376
|
+
delegua_1.default.MAIS_IGUAL,
|
|
377
|
+
delegua_1.default.MENOS_IGUAL,
|
|
378
|
+
delegua_1.default.MULTIPLICACAO_IGUAL,
|
|
379
|
+
delegua_1.default.DIVISAO_IGUAL,
|
|
380
|
+
delegua_1.default.DIVISAO_INTEIRA_IGUAL,
|
|
381
|
+
delegua_1.default.MODULO_IGUAL,
|
|
382
|
+
].includes(expressao.operador.tipo)) {
|
|
383
|
+
return new construtos_1.Atribuir(this.hashArquivo, expressao.esquerda.simbolo, expressao);
|
|
384
|
+
}
|
|
385
|
+
else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IGUAL)) {
|
|
386
|
+
const igual = this.simbolos[this.atual - 1];
|
|
387
|
+
const valor = this.atribuir();
|
|
388
|
+
if (expressao instanceof construtos_1.Variavel) {
|
|
389
|
+
const simbolo = expressao.simbolo;
|
|
390
|
+
return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
|
|
391
|
+
}
|
|
392
|
+
else if (expressao instanceof construtos_1.AcessoMetodo) {
|
|
393
|
+
const get = expressao;
|
|
394
|
+
// return new Conjunto(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
|
|
395
|
+
return new construtos_1.DefinirValor(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
|
|
396
|
+
}
|
|
397
|
+
else if (expressao instanceof construtos_1.AcessoIndiceVariavel) {
|
|
398
|
+
return new construtos_1.AtribuicaoSobrescrita(this.hashArquivo, 0, expressao.entidadeChamada, expressao.indice, valor);
|
|
399
|
+
}
|
|
400
|
+
this.erro(igual, 'Tarefa de atribuição inválida');
|
|
401
|
+
}
|
|
402
|
+
return expressao;
|
|
403
|
+
}
|
|
404
|
+
expressao() {
|
|
405
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.LEIA))
|
|
406
|
+
return this.declaracaoLeia();
|
|
407
|
+
return this.atribuir();
|
|
408
|
+
}
|
|
409
|
+
declaracaoEscreva() {
|
|
410
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
411
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
|
|
412
|
+
const argumentos = [];
|
|
413
|
+
do {
|
|
414
|
+
argumentos.push(this.expressao());
|
|
415
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
|
|
416
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
|
|
417
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
418
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
419
|
+
return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
|
|
420
|
+
}
|
|
421
|
+
declaracaoExpressao() {
|
|
422
|
+
const expressao = this.expressao();
|
|
423
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
424
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
425
|
+
return new declaracoes_1.Expressao(expressao);
|
|
426
|
+
}
|
|
427
|
+
/**
|
|
428
|
+
* Declaração para comando `leia`, para ler dados de entrada do usuário.
|
|
429
|
+
* @returns Um objeto da classe `Leia`.
|
|
430
|
+
*/
|
|
431
|
+
declaracaoLeia() {
|
|
432
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
433
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos argumentos em instrução `leia`.");
|
|
434
|
+
const argumentos = [];
|
|
435
|
+
if (this.simbolos[this.atual].tipo !== delegua_1.default.PARENTESE_DIREITO) {
|
|
436
|
+
do {
|
|
437
|
+
argumentos.push(this.expressao());
|
|
438
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
|
|
439
|
+
}
|
|
440
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos em instrução `leia`.");
|
|
441
|
+
return new declaracoes_1.Leia(simboloAtual.hashArquivo, Number(simboloAtual.linha), argumentos);
|
|
442
|
+
}
|
|
443
|
+
blocoEscopo() {
|
|
444
|
+
const declaracoes = [];
|
|
445
|
+
while (!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
446
|
+
declaracoes.push(this.declaracao());
|
|
447
|
+
}
|
|
448
|
+
this.consumir(delegua_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
|
|
449
|
+
return declaracoes;
|
|
450
|
+
}
|
|
451
|
+
declaracaoSe() {
|
|
452
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'se'.");
|
|
453
|
+
const condicao = this.expressao();
|
|
454
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após condição do se.");
|
|
455
|
+
const caminhoEntao = this.resolverDeclaracao();
|
|
456
|
+
let caminhoSenao = null;
|
|
457
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SENAO, delegua_1.default.SENÃO)) {
|
|
458
|
+
caminhoSenao = this.resolverDeclaracao();
|
|
459
|
+
}
|
|
460
|
+
return new declaracoes_1.Se(condicao, caminhoEntao, [], caminhoSenao);
|
|
461
|
+
}
|
|
462
|
+
declaracaoEnquanto() {
|
|
463
|
+
try {
|
|
464
|
+
this.blocos += 1;
|
|
465
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'enquanto'.");
|
|
466
|
+
const condicao = this.expressao();
|
|
467
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após condição.");
|
|
468
|
+
const corpo = this.resolverDeclaracao();
|
|
469
|
+
return new declaracoes_1.Enquanto(condicao, corpo);
|
|
470
|
+
}
|
|
471
|
+
finally {
|
|
472
|
+
this.blocos -= 1;
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
declaracaoPara() {
|
|
476
|
+
try {
|
|
477
|
+
const simboloPara = this.simbolos[this.atual - 1];
|
|
478
|
+
this.blocos += 1;
|
|
479
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'para'.");
|
|
480
|
+
let inicializador;
|
|
481
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA)) {
|
|
482
|
+
inicializador = null;
|
|
483
|
+
}
|
|
484
|
+
else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VARIAVEL)) {
|
|
485
|
+
inicializador = this.declaracaoDeVariavel();
|
|
486
|
+
}
|
|
487
|
+
else {
|
|
488
|
+
inicializador = this.declaracaoExpressao();
|
|
489
|
+
}
|
|
490
|
+
let condicao = null;
|
|
491
|
+
if (!this.verificarTipoSimboloAtual(delegua_1.default.PONTO_E_VIRGULA)) {
|
|
492
|
+
condicao = this.expressao();
|
|
493
|
+
}
|
|
494
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
495
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
496
|
+
let incrementar = null;
|
|
497
|
+
if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
|
|
498
|
+
incrementar = this.expressao();
|
|
499
|
+
}
|
|
500
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após cláusulas");
|
|
501
|
+
const corpo = this.resolverDeclaracao();
|
|
502
|
+
return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
|
|
503
|
+
}
|
|
504
|
+
finally {
|
|
505
|
+
this.blocos -= 1;
|
|
506
|
+
}
|
|
507
|
+
}
|
|
508
|
+
declaracaoSustar() {
|
|
509
|
+
if (this.blocos < 1) {
|
|
510
|
+
this.erro(this.simbolos[this.atual - 1], "'sustar' ou 'pausa' deve estar dentro de um laço de repetição.");
|
|
511
|
+
}
|
|
512
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
513
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
514
|
+
return new declaracoes_1.Sustar(this.simbolos[this.atual]);
|
|
515
|
+
}
|
|
516
|
+
declaracaoContinua() {
|
|
517
|
+
if (this.blocos < 1) {
|
|
518
|
+
this.erro(this.simbolos[this.atual - 1], "'continua' precisa estar em um laço de repetição.");
|
|
519
|
+
}
|
|
520
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
521
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
522
|
+
return new declaracoes_1.Continua(this.simbolos[this.atual]);
|
|
523
|
+
}
|
|
524
|
+
declaracaoRetorna() {
|
|
525
|
+
const simboloChave = this.simbolos[this.atual - 1];
|
|
526
|
+
let valor = null;
|
|
527
|
+
if ([
|
|
528
|
+
delegua_1.default.VARIAVEL,
|
|
529
|
+
delegua_1.default.ISTO,
|
|
530
|
+
delegua_1.default.TEXTO,
|
|
531
|
+
delegua_1.default.NUMERO,
|
|
532
|
+
delegua_1.default.NULO,
|
|
533
|
+
delegua_1.default.VERDADEIRO,
|
|
534
|
+
delegua_1.default.NEGACAO,
|
|
535
|
+
delegua_1.default.FALSO,
|
|
536
|
+
delegua_1.default.PARENTESE_ESQUERDO,
|
|
537
|
+
delegua_1.default.SUPER,
|
|
538
|
+
]) {
|
|
539
|
+
valor = this.expressao();
|
|
540
|
+
}
|
|
541
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
542
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
543
|
+
return new declaracoes_1.Retorna(simboloChave, valor);
|
|
544
|
+
}
|
|
545
|
+
declaracaoEscolha() {
|
|
546
|
+
try {
|
|
547
|
+
this.blocos += 1;
|
|
548
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '{' após 'escolha'.");
|
|
549
|
+
const condicao = this.expressao();
|
|
550
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado '}' após a condição de 'escolha'.");
|
|
551
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
|
|
552
|
+
const caminhos = [];
|
|
553
|
+
let caminhoPadrao = null;
|
|
554
|
+
while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
555
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CASO)) {
|
|
556
|
+
const caminhoCondicoes = [this.expressao()];
|
|
557
|
+
this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
|
|
558
|
+
while (this.verificarTipoSimboloAtual(delegua_1.default.CASO)) {
|
|
559
|
+
this.consumir(delegua_1.default.CASO, null);
|
|
560
|
+
caminhoCondicoes.push(this.expressao());
|
|
561
|
+
this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'caso'.");
|
|
562
|
+
}
|
|
563
|
+
const declaracoes = [];
|
|
564
|
+
do {
|
|
565
|
+
declaracoes.push(this.resolverDeclaracao());
|
|
566
|
+
} while (!this.verificarTipoSimboloAtual(delegua_1.default.CASO) &&
|
|
567
|
+
!this.verificarTipoSimboloAtual(delegua_1.default.PADRAO) &&
|
|
568
|
+
!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA));
|
|
569
|
+
caminhos.push({
|
|
570
|
+
condicoes: caminhoCondicoes,
|
|
571
|
+
declaracoes,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PADRAO)) {
|
|
575
|
+
if (caminhoPadrao !== null) {
|
|
576
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simbolos[this.atual], "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
|
|
577
|
+
this.erros.push(excecao);
|
|
578
|
+
throw excecao;
|
|
579
|
+
}
|
|
580
|
+
this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'padrao'.");
|
|
581
|
+
const declaracoes = [];
|
|
582
|
+
do {
|
|
583
|
+
declaracoes.push(this.resolverDeclaracao());
|
|
584
|
+
} while (!this.verificarTipoSimboloAtual(delegua_1.default.CASO) &&
|
|
585
|
+
!this.verificarTipoSimboloAtual(delegua_1.default.PADRAO) &&
|
|
586
|
+
!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA));
|
|
587
|
+
caminhoPadrao = {
|
|
588
|
+
declaracoes,
|
|
589
|
+
};
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
return new declaracoes_1.Escolha(condicao, caminhos, caminhoPadrao);
|
|
593
|
+
}
|
|
594
|
+
finally {
|
|
595
|
+
this.blocos -= 1;
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
declaracaoImportar() {
|
|
599
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
|
|
600
|
+
const caminho = this.expressao();
|
|
601
|
+
const simboloFechamento = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
|
|
602
|
+
return new declaracoes_1.Importar(caminho, simboloFechamento);
|
|
603
|
+
}
|
|
604
|
+
declaracaoTente() {
|
|
605
|
+
const simboloTente = this.simbolos[this.atual - 1];
|
|
606
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'tente'.");
|
|
607
|
+
const blocoTente = this.blocoEscopo();
|
|
608
|
+
let blocoPegue = null;
|
|
609
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PEGUE)) {
|
|
610
|
+
if (this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_ESQUERDO)) {
|
|
611
|
+
// Caso 1: com parâmetro de erro.
|
|
612
|
+
// `pegue` recebe um `FuncaoConstruto`.
|
|
613
|
+
blocoPegue = this.corpoDaFuncao('bloco `pegue`');
|
|
614
|
+
}
|
|
615
|
+
else {
|
|
616
|
+
// Caso 2: sem parâmetro de erro.
|
|
617
|
+
// `pegue` recebe um bloco.
|
|
618
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
|
|
619
|
+
blocoPegue = this.blocoEscopo();
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
let blocoSenao = null;
|
|
623
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SENAO, delegua_1.default.SENÃO)) {
|
|
624
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'senão'.");
|
|
625
|
+
blocoSenao = this.blocoEscopo();
|
|
626
|
+
}
|
|
627
|
+
let blocoFinalmente = null;
|
|
628
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.FINALMENTE)) {
|
|
629
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'finalmente'.");
|
|
630
|
+
blocoFinalmente = this.blocoEscopo();
|
|
631
|
+
}
|
|
632
|
+
return new declaracoes_1.Tente(simboloTente.hashArquivo, Number(simboloTente.linha), blocoTente, blocoPegue, null, blocoFinalmente);
|
|
633
|
+
}
|
|
634
|
+
declaracaoFazer() {
|
|
635
|
+
const simboloFazer = this.simbolos[this.atual - 1];
|
|
636
|
+
try {
|
|
637
|
+
this.blocos += 1;
|
|
638
|
+
const caminhoFazer = this.resolverDeclaracao();
|
|
639
|
+
this.consumir(delegua_1.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
|
|
640
|
+
this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração 'enquanto'.");
|
|
641
|
+
const condicaoEnquanto = this.expressao();
|
|
642
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração do 'enquanto'.");
|
|
643
|
+
return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, condicaoEnquanto);
|
|
644
|
+
}
|
|
645
|
+
finally {
|
|
646
|
+
this.blocos -= 1;
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
resolverDeclaracao() {
|
|
650
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
651
|
+
case delegua_1.default.CHAVE_ESQUERDA:
|
|
652
|
+
const simboloInicioBloco = this.avancarEDevolverAnterior();
|
|
653
|
+
return new declaracoes_1.Bloco(simboloInicioBloco.hashArquivo, Number(simboloInicioBloco.linha), this.blocoEscopo());
|
|
654
|
+
case delegua_1.default.CONTINUA:
|
|
655
|
+
this.avancarEDevolverAnterior();
|
|
656
|
+
return this.declaracaoContinua();
|
|
657
|
+
case delegua_1.default.ENQUANTO:
|
|
658
|
+
this.avancarEDevolverAnterior();
|
|
659
|
+
return this.declaracaoEnquanto();
|
|
660
|
+
case delegua_1.default.ESCOLHA:
|
|
661
|
+
this.avancarEDevolverAnterior();
|
|
662
|
+
return this.declaracaoEscolha();
|
|
663
|
+
case delegua_1.default.ESCREVA:
|
|
664
|
+
this.avancarEDevolverAnterior();
|
|
665
|
+
return this.declaracaoEscreva();
|
|
666
|
+
case delegua_1.default.FAZER:
|
|
667
|
+
this.avancarEDevolverAnterior();
|
|
668
|
+
return this.declaracaoFazer();
|
|
669
|
+
case delegua_1.default.PARA:
|
|
670
|
+
this.avancarEDevolverAnterior();
|
|
671
|
+
return this.declaracaoPara();
|
|
672
|
+
case delegua_1.default.PAUSA:
|
|
673
|
+
case delegua_1.default.SUSTAR:
|
|
674
|
+
this.avancarEDevolverAnterior();
|
|
675
|
+
return this.declaracaoSustar();
|
|
676
|
+
case delegua_1.default.SE:
|
|
677
|
+
this.avancarEDevolverAnterior();
|
|
678
|
+
return this.declaracaoSe();
|
|
679
|
+
case delegua_1.default.RETORNA:
|
|
680
|
+
this.avancarEDevolverAnterior();
|
|
681
|
+
return this.declaracaoRetorna();
|
|
682
|
+
case delegua_1.default.TENTE:
|
|
683
|
+
this.avancarEDevolverAnterior();
|
|
684
|
+
return this.declaracaoTente();
|
|
685
|
+
}
|
|
686
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.FAZER)) return this.declaracaoFazer();
|
|
687
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.TENTE)) return this.declaracaoTente();
|
|
688
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.ESCOLHA)) return this.declaracaoEscolha();
|
|
689
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.RETORNA)) return this.declaracaoRetorna();
|
|
690
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.CONTINUA)) return this.declaracaoContinua();
|
|
691
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PAUSA, tiposDeSimbolos.SUSTAR))
|
|
692
|
+
return this.declaracaoSustar(); */
|
|
693
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.PARA)) return this.declaracaoPara();
|
|
694
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.ENQUANTO)) return this.declaracaoEnquanto();
|
|
695
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.SE)) return this.declaracaoSe();
|
|
696
|
+
// if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.ESCREVA)) return this.declaracaoEscreva();
|
|
697
|
+
/* if (this.verificarSeSimboloAtualEIgualA(tiposDeSimbolos.CHAVE_ESQUERDA)) {
|
|
698
|
+
const simboloInicioBloco: SimboloInterface = this.simbolos[this.atual - 1];
|
|
699
|
+
return new Bloco(simboloInicioBloco.hashArquivo, Number(simboloInicioBloco.linha), this.blocoEscopo());
|
|
700
|
+
} */
|
|
701
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
702
|
+
if (simboloAtual.tipo === delegua_1.default.IDENTIFICADOR) {
|
|
703
|
+
// Pela gramática, a seguinte situação não pode ocorrer:
|
|
704
|
+
// 1. O símbolo anterior ser um identificador; e
|
|
705
|
+
// 2. O símbolo anterior estar na mesma linha do identificador atual.
|
|
706
|
+
const simboloAnterior = this.simbolos[this.atual - 1];
|
|
707
|
+
if (!!simboloAnterior &&
|
|
708
|
+
simboloAnterior.tipo === delegua_1.default.IDENTIFICADOR &&
|
|
709
|
+
simboloAnterior.linha === simboloAtual.linha) {
|
|
710
|
+
this.erro(this.simbolos[this.atual], 'Não é permitido ter dois identificadores seguidos na mesma linha.');
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
return this.declaracaoExpressao();
|
|
714
|
+
}
|
|
715
|
+
/**
|
|
716
|
+
* Caso símbolo atual seja `var`, devolve uma declaração de variável.
|
|
717
|
+
* @returns Um Construto do tipo Var.
|
|
718
|
+
*/
|
|
719
|
+
declaracaoDeVariavel() {
|
|
720
|
+
const simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
|
|
721
|
+
let inicializador = null;
|
|
722
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IGUAL)) {
|
|
723
|
+
inicializador = this.expressao();
|
|
724
|
+
}
|
|
725
|
+
// Ponto-e-vírgula é opcional aqui.
|
|
726
|
+
this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA);
|
|
727
|
+
return new declaracoes_1.Var(simbolo, inicializador);
|
|
728
|
+
}
|
|
729
|
+
funcao(tipo) {
|
|
730
|
+
let simbolo;
|
|
731
|
+
switch (this.simbolos[this.atual].tipo) {
|
|
732
|
+
case delegua_1.default.CONSTRUTOR:
|
|
733
|
+
simbolo = this.avancarEDevolverAnterior();
|
|
734
|
+
break;
|
|
735
|
+
default:
|
|
736
|
+
simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, `Esperado nome de ${tipo}.`);
|
|
737
|
+
break;
|
|
738
|
+
}
|
|
739
|
+
return new declaracoes_1.FuncaoDeclaracao(simbolo, this.corpoDaFuncao(tipo));
|
|
740
|
+
}
|
|
741
|
+
logicaComumParametros() {
|
|
742
|
+
const parametros = [];
|
|
743
|
+
do {
|
|
744
|
+
if (parametros.length >= 255) {
|
|
745
|
+
this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 parâmetros');
|
|
746
|
+
}
|
|
747
|
+
const parametro = {};
|
|
748
|
+
if (this.simbolos[this.atual].tipo === delegua_1.default.MULTIPLICACAO) {
|
|
749
|
+
this.consumir(delegua_1.default.MULTIPLICACAO, null);
|
|
750
|
+
parametro.abrangencia = 'multiplo';
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
parametro.abrangencia = 'padrao';
|
|
754
|
+
}
|
|
755
|
+
parametro.nome = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome do parâmetro.');
|
|
756
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IGUAL)) {
|
|
757
|
+
parametro.valorPadrao = this.primario();
|
|
758
|
+
}
|
|
759
|
+
parametros.push(parametro);
|
|
760
|
+
if (parametro.abrangencia === 'multiplo')
|
|
761
|
+
break;
|
|
762
|
+
} while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
|
|
763
|
+
return parametros;
|
|
764
|
+
}
|
|
765
|
+
corpoDaFuncao(tipo) {
|
|
766
|
+
// O parêntese esquerdo é considerado o símbolo inicial para
|
|
767
|
+
// fins de pragma.
|
|
768
|
+
const parenteseEsquerdo = this.consumir(delegua_1.default.PARENTESE_ESQUERDO, `Esperado '(' após o nome ${tipo}.`);
|
|
769
|
+
let parametros = [];
|
|
770
|
+
if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
|
|
771
|
+
parametros = this.logicaComumParametros();
|
|
772
|
+
}
|
|
773
|
+
this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
|
|
774
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, `Esperado '{' antes do escopo do ${tipo}.`);
|
|
775
|
+
const corpo = this.blocoEscopo();
|
|
776
|
+
return new construtos_1.FuncaoConstruto(this.hashArquivo, Number(parenteseEsquerdo.linha), parametros, corpo);
|
|
777
|
+
}
|
|
778
|
+
declaracaoDeClasse() {
|
|
779
|
+
const simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
|
|
780
|
+
let superClasse = null;
|
|
781
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.HERDA)) {
|
|
782
|
+
this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome da Superclasse.');
|
|
783
|
+
superClasse = new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1]);
|
|
784
|
+
}
|
|
785
|
+
this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
|
|
786
|
+
const metodos = [];
|
|
787
|
+
while (!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
|
|
788
|
+
metodos.push(this.funcao('método'));
|
|
789
|
+
}
|
|
790
|
+
this.consumir(delegua_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
|
|
791
|
+
return new declaracoes_1.Classe(simbolo, superClasse, metodos);
|
|
792
|
+
}
|
|
793
|
+
declaracao() {
|
|
794
|
+
try {
|
|
795
|
+
if ((this.verificarTipoSimboloAtual(delegua_1.default.FUNCAO) ||
|
|
796
|
+
this.verificarTipoSimboloAtual(delegua_1.default.FUNÇÃO)) &&
|
|
797
|
+
this.verificarTipoProximoSimbolo(delegua_1.default.IDENTIFICADOR)) {
|
|
798
|
+
this.avancarEDevolverAnterior();
|
|
799
|
+
return this.funcao('funcao');
|
|
800
|
+
}
|
|
801
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VARIAVEL))
|
|
802
|
+
return this.declaracaoDeVariavel();
|
|
803
|
+
if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CLASSE))
|
|
804
|
+
return this.declaracaoDeClasse();
|
|
805
|
+
return this.resolverDeclaracao();
|
|
806
|
+
}
|
|
807
|
+
catch (erro) {
|
|
808
|
+
this.sincronizar();
|
|
809
|
+
return null;
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
/**
|
|
813
|
+
* Usado quando há erros na avaliação sintática.
|
|
814
|
+
* Garante que o código não entre em loop infinito.
|
|
815
|
+
* @returns Sempre retorna `void`.
|
|
816
|
+
*/
|
|
817
|
+
sincronizar() {
|
|
818
|
+
this.avancarEDevolverAnterior();
|
|
819
|
+
while (!this.estaNoFinal()) {
|
|
820
|
+
const tipoSimboloAtual = this.simbolos[this.atual - 1].tipo;
|
|
821
|
+
switch (tipoSimboloAtual) {
|
|
822
|
+
case delegua_1.default.CLASSE:
|
|
823
|
+
case delegua_1.default.FUNCAO:
|
|
824
|
+
case delegua_1.default.FUNÇÃO:
|
|
825
|
+
case delegua_1.default.VARIAVEL:
|
|
826
|
+
case delegua_1.default.PARA:
|
|
827
|
+
case delegua_1.default.SE:
|
|
828
|
+
case delegua_1.default.ENQUANTO:
|
|
829
|
+
case delegua_1.default.ESCREVA:
|
|
830
|
+
case delegua_1.default.RETORNA:
|
|
831
|
+
return;
|
|
832
|
+
}
|
|
833
|
+
this.avancarEDevolverAnterior();
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
analisar(retornoLexador, hashArquivo) {
|
|
837
|
+
const inicioAnalise = (0, browser_process_hrtime_1.default)();
|
|
838
|
+
this.erros = [];
|
|
839
|
+
this.atual = 0;
|
|
840
|
+
this.blocos = 0;
|
|
841
|
+
this.hashArquivo = hashArquivo || 0;
|
|
842
|
+
this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
|
|
843
|
+
const declaracoes = [];
|
|
844
|
+
while (!this.estaNoFinal()) {
|
|
845
|
+
declaracoes.push(this.declaracao());
|
|
846
|
+
}
|
|
847
|
+
if (this.performance) {
|
|
848
|
+
const deltaAnalise = (0, browser_process_hrtime_1.default)(inicioAnalise);
|
|
849
|
+
console.log(`[Avaliador Sintático] Tempo para análise: ${deltaAnalise[0] * 1e9 + deltaAnalise[1]}ns`);
|
|
850
|
+
}
|
|
851
|
+
return {
|
|
852
|
+
declaracoes: declaracoes,
|
|
853
|
+
erros: this.erros,
|
|
854
|
+
};
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
exports.AvaliadorSintatico = AvaliadorSintatico;
|
|
728
858
|
//# sourceMappingURL=avaliador-sintatico.js.map
|