@designliquido/delegua 0.32.1 → 0.33.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/bin/package.json +2 -2
- package/fontes/analisador-semantico/analisador-semantico-base.d.ts +65 -0
- package/fontes/analisador-semantico/analisador-semantico-base.js +168 -0
- package/fontes/analisador-semantico/analisador-semantico-base.js.map +1 -0
- package/fontes/analisador-semantico/analisador-semantico.d.ts +5 -43
- package/fontes/analisador-semantico/analisador-semantico.js +22 -130
- package/fontes/analisador-semantico/analisador-semantico.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.d.ts +6 -51
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.js +3 -137
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.d.ts +6 -53
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.js +10 -145
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.d.ts +11 -53
- package/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.js +22 -141
- package/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +2 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.js +27 -5
- package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-portugol-studio.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.js +4 -2
- package/fontes/avaliador-sintatico/dialetos/potigol/avaliador-sintatico-potigol.js.map +1 -1
- package/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.d.ts +0 -7
- package/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.js +10 -15
- package/fontes/avaliador-sintatico/dialetos/visualg/avaliador-sintatico-visualg.js.map +1 -1
- package/fontes/bibliotecas/dialetos/egua-classico/matematica.js +12 -4
- package/fontes/bibliotecas/dialetos/egua-classico/matematica.js.map +1 -1
- package/fontes/bibliotecas/primitivas-dicionario.js.map +1 -1
- package/fontes/bibliotecas/primitivas-numero.js.map +1 -1
- package/fontes/construtos/acesso-elemento-matriz.js.map +1 -1
- package/fontes/construtos/atribuicao-por-indices-matriz.js.map +1 -1
- package/fontes/construtos/decorador.js.map +1 -1
- package/fontes/construtos/qual-tipo.js.map +1 -1
- package/fontes/declaracoes/aleatorio.d.ts +3 -3
- package/fontes/declaracoes/aleatorio.js.map +1 -1
- package/fontes/declaracoes/cabecalho-programa.d.ts +2 -2
- package/fontes/declaracoes/classe.js.map +1 -1
- package/fontes/declaracoes/funcao.js.map +1 -1
- package/fontes/declaracoes/index.d.ts +3 -0
- package/fontes/declaracoes/index.js +3 -0
- package/fontes/declaracoes/index.js.map +1 -1
- package/fontes/declaracoes/inicio-algoritmo.d.ts +6 -0
- package/fontes/declaracoes/inicio-algoritmo.js +14 -0
- package/fontes/declaracoes/inicio-algoritmo.js.map +1 -0
- package/fontes/declaracoes/propriedade-classe.js.map +1 -1
- package/fontes/declaracoes/tendo-como.d.ts +16 -0
- package/fontes/declaracoes/tendo-como.js +22 -0
- package/fontes/declaracoes/tendo-como.js.map +1 -0
- package/fontes/estruturas/delegua-classe.js.map +1 -1
- package/fontes/estruturas/delegua-funcao.js +24 -1
- package/fontes/estruturas/delegua-funcao.js.map +1 -1
- package/fontes/estruturas/objeto-delegua-classe.d.ts +1 -1
- package/fontes/estruturas/objeto-delegua-classe.js +1 -1
- package/fontes/estruturas/objeto-delegua-classe.js.map +1 -1
- package/fontes/formatadores/formatador-delegua.d.ts +4 -1
- package/fontes/formatadores/formatador-delegua.js +13 -1
- package/fontes/formatadores/formatador-delegua.js.map +1 -1
- package/fontes/formatadores/formatador-portugol-studio.d.ts +7 -4
- package/fontes/formatadores/formatador-portugol-studio.js +55 -49
- package/fontes/formatadores/formatador-portugol-studio.js.map +1 -1
- package/fontes/formatadores/formatador-visualg.d.ts +7 -5
- package/fontes/formatadores/formatador-visualg.js +26 -21
- package/fontes/formatadores/formatador-visualg.js.map +1 -1
- package/fontes/interfaces/pilha-escopos-execucao-interface.d.ts +2 -2
- package/fontes/interfaces/resolvedor-interface.d.ts +1 -1
- package/fontes/interfaces/variavel-hipotetica-interface.d.ts +1 -1
- package/fontes/interfaces/visitante-comum-interface.d.ts +36 -39
- package/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.js.map +1 -1
- package/fontes/interpretador/dialetos/birl/interpretador-birl.d.ts +3 -3
- package/fontes/interpretador/dialetos/birl/interpretador-birl.js +4 -13
- package/fontes/interpretador/dialetos/birl/interpretador-birl.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.d.ts +13 -10
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +15 -8
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +12 -9
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +16 -10
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js.map +1 -1
- package/fontes/interpretador/dialetos/mapler/comum.js +2 -1
- package/fontes/interpretador/dialetos/mapler/comum.js.map +1 -1
- package/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.d.ts +25 -22
- package/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +9 -6
- package/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js.map +1 -1
- package/fontes/interpretador/dialetos/potigol/inferenciador.d.ts +1 -1
- package/fontes/interpretador/dialetos/potigol/interpretador-potigol.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg/comum.d.ts +2 -0
- package/fontes/interpretador/dialetos/visualg/comum.js +13 -6
- package/fontes/interpretador/dialetos/visualg/comum.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.d.ts +1 -0
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js +4 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.d.ts +1 -0
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.js +3 -0
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg.js.map +1 -1
- package/fontes/interpretador/inferenciador.d.ts +1 -1
- package/fontes/interpretador/interpretador-base.d.ts +9 -6
- package/fontes/interpretador/interpretador-base.js +57 -39
- package/fontes/interpretador/interpretador-base.js.map +1 -1
- package/fontes/interpretador/pilha-escopos-execucao.d.ts +2 -2
- package/fontes/interpretador/pilha-escopos-execucao.js +52 -18
- package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
- package/fontes/lexador/palavras-reservadas.d.ts +2 -0
- package/fontes/lexador/palavras-reservadas.js +2 -0
- package/fontes/lexador/palavras-reservadas.js.map +1 -1
- package/fontes/tipos-de-dados/delegua.d.ts +4 -0
- package/fontes/tipos-de-dados/delegua.js +5 -1
- package/fontes/tipos-de-dados/delegua.js.map +1 -1
- package/fontes/tipos-de-dados/listas-delegua.js +1 -1
- package/fontes/tipos-de-dados/listas-primitivos.js +1 -1
- package/fontes/tipos-de-simbolos/delegua.d.ts +2 -0
- package/fontes/tipos-de-simbolos/delegua.js +2 -0
- package/fontes/tipos-de-simbolos/delegua.js.map +1 -1
- package/fontes/tradutores/python/python3-lexer.js +1 -1
- package/fontes/tradutores/python/python3-lexer.js.map +1 -1
- package/fontes/tradutores/tradutor-assembly-x64.js +13 -13
- package/fontes/tradutores/tradutor-python.js +5 -5
- package/fontes/tradutores/tradutor-python.js.map +1 -1
- package/fontes/tradutores/tradutor-reverso-visualg.d.ts +1 -0
- package/fontes/tradutores/tradutor-reverso-visualg.js +2 -1
- package/fontes/tradutores/tradutor-reverso-visualg.js.map +1 -1
- package/package.json +2 -2
package/bin/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/delegua",
|
|
3
|
-
"version": "0.32.
|
|
3
|
+
"version": "0.32.2",
|
|
4
4
|
"description": "Linguagem de programação simples e moderna usando português estruturado, com suporte a múltiplos dialetos",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"observar-testes-unitarios": "jest --watchAll",
|
|
15
15
|
"observar-testes-unitarios-com-coverage": "jest --coverage --watchAll",
|
|
16
16
|
"lint": "eslint . --ext .ts",
|
|
17
|
-
"
|
|
17
|
+
"deixar-codigo-bonito": "prettier --config .prettierrc --write fontes/**/*.ts"
|
|
18
18
|
},
|
|
19
19
|
"repository": {
|
|
20
20
|
"type": "git",
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { Atribuir, AcessoIndiceVariavel, AcessoElementoMatriz, AcessoMetodoOuPropriedade, Agrupamento, AtribuicaoPorIndice, AtribuicaoPorIndicesMatriz, Binario, Chamada, DefinirValor, FuncaoConstruto, Dicionario, ExpressaoRegular, FimPara, FormatacaoEscrita, Isto, Literal, Logico, Super, Tupla, TipoDe, Unario, Vetor } from '../construtos';
|
|
2
|
+
import { Declaracao, TendoComo, InicioAlgoritmo, Aleatorio, CabecalhoPrograma, Classe, Const, ConstMultiplo, Expressao, FuncaoDeclaracao, Enquanto, Escolha, Escreva, Fazer, Importar, Para, ParaCada, Se, Tente, Var, VarMultiplo, Bloco, Continua, EscrevaMesmaLinha, Falhar, Leia, LeiaMultiplo, Retorna, Sustar } from '../declaracoes';
|
|
3
|
+
import { AnalisadorSemanticoInterface } from '../interfaces/analisador-semantico-interface';
|
|
4
|
+
import { RetornoAnalisadorSemantico } from '../interfaces/retornos/retorno-analisador-semantico';
|
|
5
|
+
import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../quebras';
|
|
6
|
+
/**
|
|
7
|
+
* Essa classe só existe para eliminar redundância entre todos os analisadores
|
|
8
|
+
* sintáticos. Por padrão, quando um método não é implementado, ao invés de dar erro,
|
|
9
|
+
* simplesmente passa por ele (`return Promise.resolve()`).
|
|
10
|
+
*/
|
|
11
|
+
export declare abstract class AnalisadorSemanticoBase implements AnalisadorSemanticoInterface {
|
|
12
|
+
abstract analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
|
|
13
|
+
visitarDeclaracaoTendoComo(declaracao: TendoComo): Promise<any>;
|
|
14
|
+
visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any>;
|
|
15
|
+
visitarDeclaracaoAleatorio(declaracao: Aleatorio): Promise<any>;
|
|
16
|
+
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
|
|
17
|
+
visitarDeclaracaoClasse(declaracao: Classe): Promise<any>;
|
|
18
|
+
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
19
|
+
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
|
|
20
|
+
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
|
|
21
|
+
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
|
|
22
|
+
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): void;
|
|
23
|
+
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<any>;
|
|
24
|
+
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<any>;
|
|
25
|
+
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
|
|
26
|
+
visitarDeclaracaoFazer(declaracao: Fazer): Promise<any>;
|
|
27
|
+
visitarDeclaracaoImportar(declaracao: Importar): Promise<any>;
|
|
28
|
+
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
|
|
29
|
+
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
|
|
30
|
+
visitarDeclaracaoSe(declaracao: Se): Promise<any>;
|
|
31
|
+
visitarDeclaracaoTente(declaracao: Tente): Promise<any>;
|
|
32
|
+
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
33
|
+
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any>;
|
|
34
|
+
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel): Promise<any>;
|
|
35
|
+
visitarExpressaoAcessoElementoMatriz(expressao: AcessoElementoMatriz): Promise<any>;
|
|
36
|
+
visitarExpressaoAcessoMetodo(expressao: AcessoMetodoOuPropriedade): Promise<any>;
|
|
37
|
+
visitarExpressaoAgrupamento(expressao: Agrupamento): Promise<any>;
|
|
38
|
+
visitarExpressaoAtribuicaoPorIndice(expressao: AtribuicaoPorIndice): Promise<any>;
|
|
39
|
+
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: AtribuicaoPorIndicesMatriz): Promise<any>;
|
|
40
|
+
visitarExpressaoBinaria(expressao: Binario): Promise<any>;
|
|
41
|
+
visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
|
|
42
|
+
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
|
|
43
|
+
visitarExpressaoDeChamada(expressao: Chamada): Promise<any>;
|
|
44
|
+
visitarExpressaoDefinirValor(expressao: DefinirValor): Promise<any>;
|
|
45
|
+
visitarExpressaoDeleguaFuncao(expressao: FuncaoConstruto): Promise<any>;
|
|
46
|
+
visitarExpressaoDeVariavel(expressao: Var): Promise<any>;
|
|
47
|
+
visitarExpressaoDicionario(expressao: Dicionario): Promise<any>;
|
|
48
|
+
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<RegExp>;
|
|
49
|
+
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any>;
|
|
50
|
+
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
|
|
51
|
+
visitarExpressaoFimPara(declaracao: FimPara): Promise<any>;
|
|
52
|
+
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<any>;
|
|
53
|
+
visitarExpressaoIsto(expressao: Isto): Promise<any>;
|
|
54
|
+
visitarExpressaoLeia(expressao: Leia): Promise<any>;
|
|
55
|
+
visitarExpressaoLeiaMultiplo(expressao: LeiaMultiplo): Promise<any>;
|
|
56
|
+
visitarExpressaoLiteral(expressao: Literal): Promise<any>;
|
|
57
|
+
visitarExpressaoLogica(expressao: Logico): Promise<any>;
|
|
58
|
+
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
|
|
59
|
+
visitarExpressaoSuper(expressao: Super): Promise<any>;
|
|
60
|
+
visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra;
|
|
61
|
+
visitarExpressaoTupla(expressao: Tupla): Promise<any>;
|
|
62
|
+
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
|
|
63
|
+
visitarExpressaoUnaria(expressao: Unario): Promise<any>;
|
|
64
|
+
visitarExpressaoVetor(expressao: Vetor): Promise<any>;
|
|
65
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AnalisadorSemanticoBase = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Essa classe só existe para eliminar redundância entre todos os analisadores
|
|
6
|
+
* sintáticos. Por padrão, quando um método não é implementado, ao invés de dar erro,
|
|
7
|
+
* simplesmente passa por ele (`return Promise.resolve()`).
|
|
8
|
+
*/
|
|
9
|
+
class AnalisadorSemanticoBase {
|
|
10
|
+
visitarDeclaracaoTendoComo(declaracao) {
|
|
11
|
+
return Promise.resolve();
|
|
12
|
+
}
|
|
13
|
+
visitarDeclaracaoInicioAlgoritmo(declaracao) {
|
|
14
|
+
return Promise.resolve();
|
|
15
|
+
}
|
|
16
|
+
visitarDeclaracaoAleatorio(declaracao) {
|
|
17
|
+
return Promise.resolve();
|
|
18
|
+
}
|
|
19
|
+
visitarDeclaracaoCabecalhoPrograma(declaracao) {
|
|
20
|
+
return Promise.resolve();
|
|
21
|
+
}
|
|
22
|
+
visitarDeclaracaoClasse(declaracao) {
|
|
23
|
+
return Promise.resolve();
|
|
24
|
+
}
|
|
25
|
+
visitarDeclaracaoConst(declaracao) {
|
|
26
|
+
return Promise.resolve();
|
|
27
|
+
}
|
|
28
|
+
visitarDeclaracaoConstMultiplo(declaracao) {
|
|
29
|
+
return Promise.resolve();
|
|
30
|
+
}
|
|
31
|
+
visitarExpressaoDeAtribuicao(expressao) {
|
|
32
|
+
return Promise.resolve();
|
|
33
|
+
}
|
|
34
|
+
visitarDeclaracaoDeExpressao(declaracao) {
|
|
35
|
+
return Promise.resolve();
|
|
36
|
+
}
|
|
37
|
+
visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
38
|
+
// Nada acontece.
|
|
39
|
+
}
|
|
40
|
+
visitarDeclaracaoEnquanto(declaracao) {
|
|
41
|
+
return Promise.resolve();
|
|
42
|
+
}
|
|
43
|
+
visitarDeclaracaoEscolha(declaracao) {
|
|
44
|
+
return Promise.resolve();
|
|
45
|
+
}
|
|
46
|
+
visitarDeclaracaoEscreva(declaracao) {
|
|
47
|
+
return Promise.resolve();
|
|
48
|
+
}
|
|
49
|
+
visitarDeclaracaoFazer(declaracao) {
|
|
50
|
+
return Promise.resolve();
|
|
51
|
+
}
|
|
52
|
+
visitarDeclaracaoImportar(declaracao) {
|
|
53
|
+
return Promise.resolve();
|
|
54
|
+
}
|
|
55
|
+
visitarDeclaracaoPara(declaracao) {
|
|
56
|
+
return Promise.resolve();
|
|
57
|
+
}
|
|
58
|
+
visitarDeclaracaoParaCada(declaracao) {
|
|
59
|
+
return Promise.resolve();
|
|
60
|
+
}
|
|
61
|
+
visitarDeclaracaoSe(declaracao) {
|
|
62
|
+
return Promise.resolve();
|
|
63
|
+
}
|
|
64
|
+
visitarDeclaracaoTente(declaracao) {
|
|
65
|
+
return Promise.resolve();
|
|
66
|
+
}
|
|
67
|
+
visitarDeclaracaoVar(declaracao) {
|
|
68
|
+
return Promise.resolve();
|
|
69
|
+
}
|
|
70
|
+
visitarDeclaracaoVarMultiplo(declaracao) {
|
|
71
|
+
return Promise.resolve();
|
|
72
|
+
}
|
|
73
|
+
visitarExpressaoAcessoIndiceVariavel(expressao) {
|
|
74
|
+
return Promise.resolve();
|
|
75
|
+
}
|
|
76
|
+
visitarExpressaoAcessoElementoMatriz(expressao) {
|
|
77
|
+
return Promise.resolve();
|
|
78
|
+
}
|
|
79
|
+
visitarExpressaoAcessoMetodo(expressao) {
|
|
80
|
+
return Promise.resolve();
|
|
81
|
+
}
|
|
82
|
+
visitarExpressaoAgrupamento(expressao) {
|
|
83
|
+
return Promise.resolve();
|
|
84
|
+
}
|
|
85
|
+
visitarExpressaoAtribuicaoPorIndice(expressao) {
|
|
86
|
+
return Promise.resolve();
|
|
87
|
+
}
|
|
88
|
+
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
|
|
89
|
+
return Promise.resolve();
|
|
90
|
+
}
|
|
91
|
+
visitarExpressaoBinaria(expressao) {
|
|
92
|
+
return Promise.resolve();
|
|
93
|
+
}
|
|
94
|
+
visitarExpressaoBloco(declaracao) {
|
|
95
|
+
return Promise.resolve();
|
|
96
|
+
}
|
|
97
|
+
visitarExpressaoContinua(declaracao) {
|
|
98
|
+
return Promise.resolve();
|
|
99
|
+
}
|
|
100
|
+
visitarExpressaoDeChamada(expressao) {
|
|
101
|
+
return Promise.resolve();
|
|
102
|
+
}
|
|
103
|
+
visitarExpressaoDefinirValor(expressao) {
|
|
104
|
+
return Promise.resolve();
|
|
105
|
+
}
|
|
106
|
+
visitarExpressaoDeleguaFuncao(expressao) {
|
|
107
|
+
return Promise.resolve();
|
|
108
|
+
}
|
|
109
|
+
visitarExpressaoDeVariavel(expressao) {
|
|
110
|
+
return Promise.resolve();
|
|
111
|
+
}
|
|
112
|
+
visitarExpressaoDicionario(expressao) {
|
|
113
|
+
return Promise.resolve();
|
|
114
|
+
}
|
|
115
|
+
visitarExpressaoExpressaoRegular(expressao) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
|
|
119
|
+
return Promise.resolve();
|
|
120
|
+
}
|
|
121
|
+
visitarExpressaoFalhar(expressao) {
|
|
122
|
+
return Promise.resolve();
|
|
123
|
+
}
|
|
124
|
+
visitarExpressaoFimPara(declaracao) {
|
|
125
|
+
return Promise.resolve();
|
|
126
|
+
}
|
|
127
|
+
visitarExpressaoFormatacaoEscrita(declaracao) {
|
|
128
|
+
return Promise.resolve();
|
|
129
|
+
}
|
|
130
|
+
visitarExpressaoIsto(expressao) {
|
|
131
|
+
return Promise.resolve();
|
|
132
|
+
}
|
|
133
|
+
visitarExpressaoLeia(expressao) {
|
|
134
|
+
return Promise.resolve();
|
|
135
|
+
}
|
|
136
|
+
visitarExpressaoLeiaMultiplo(expressao) {
|
|
137
|
+
return Promise.resolve();
|
|
138
|
+
}
|
|
139
|
+
visitarExpressaoLiteral(expressao) {
|
|
140
|
+
return Promise.resolve();
|
|
141
|
+
}
|
|
142
|
+
visitarExpressaoLogica(expressao) {
|
|
143
|
+
return Promise.resolve();
|
|
144
|
+
}
|
|
145
|
+
visitarExpressaoRetornar(declaracao) {
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
visitarExpressaoSuper(expressao) {
|
|
149
|
+
return Promise.resolve();
|
|
150
|
+
}
|
|
151
|
+
visitarExpressaoSustar(declaracao) {
|
|
152
|
+
return Promise.resolve();
|
|
153
|
+
}
|
|
154
|
+
visitarExpressaoTupla(expressao) {
|
|
155
|
+
return Promise.resolve();
|
|
156
|
+
}
|
|
157
|
+
visitarExpressaoTipoDe(expressao) {
|
|
158
|
+
return Promise.resolve();
|
|
159
|
+
}
|
|
160
|
+
visitarExpressaoUnaria(expressao) {
|
|
161
|
+
return Promise.resolve();
|
|
162
|
+
}
|
|
163
|
+
visitarExpressaoVetor(expressao) {
|
|
164
|
+
return Promise.resolve();
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
exports.AnalisadorSemanticoBase = AnalisadorSemanticoBase;
|
|
168
|
+
//# sourceMappingURL=analisador-semantico-base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analisador-semantico-base.js","sourceRoot":"","sources":["../../../fontes/analisador-semantico/analisador-semantico-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Atribuir, Chamada,
|
|
2
|
-
import {
|
|
1
|
+
import { Atribuir, Chamada, TipoDe } from '../construtos';
|
|
2
|
+
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '../declaracoes';
|
|
3
3
|
import { SimboloInterface } from '../interfaces';
|
|
4
|
-
import { AnalisadorSemanticoInterface } from '../interfaces/analisador-semantico-interface';
|
|
5
4
|
import { DiagnosticoAnalisadorSemantico } from '../interfaces/erros';
|
|
6
5
|
import { RetornoAnalisadorSemantico } from '../interfaces/retornos/retorno-analisador-semantico';
|
|
7
6
|
import { TiposDadosInterface } from '../interfaces/tipos-dados-interface';
|
|
8
|
-
import {
|
|
7
|
+
import { RetornoQuebra } from '../quebras';
|
|
8
|
+
import { AnalisadorSemanticoBase } from './analisador-semantico-base';
|
|
9
9
|
import { PilhaVariaveis } from './pilha-variaveis';
|
|
10
10
|
interface VariavelHipoteticaInterface {
|
|
11
11
|
tipo: TiposDadosInterface;
|
|
@@ -16,7 +16,7 @@ interface VariavelHipoteticaInterface {
|
|
|
16
16
|
interface FuncaoHipoteticaInterface {
|
|
17
17
|
valor: any;
|
|
18
18
|
}
|
|
19
|
-
export declare class AnalisadorSemantico
|
|
19
|
+
export declare class AnalisadorSemantico extends AnalisadorSemanticoBase {
|
|
20
20
|
pilhaVariaveis: PilhaVariaveis;
|
|
21
21
|
variaveis: {
|
|
22
22
|
[nomeVariavel: string]: VariavelHipoteticaInterface;
|
|
@@ -27,12 +27,6 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
27
27
|
atual: number;
|
|
28
28
|
diagnosticos: DiagnosticoAnalisadorSemantico[];
|
|
29
29
|
constructor();
|
|
30
|
-
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
|
|
31
|
-
visitarExpressaoTupla(expressao: Tupla): Promise<any>;
|
|
32
|
-
visitarDeclaracaoAleatorio(declaracao: Aleatorio): Promise<any>;
|
|
33
|
-
visitarExpressaoAcessoElementoMatriz(expressao: any): Promise<void>;
|
|
34
|
-
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise<any>;
|
|
35
|
-
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<any>;
|
|
36
30
|
erro(simbolo: SimboloInterface, mensagem: string): void;
|
|
37
31
|
aviso(simbolo: SimboloInterface, mensagem: string): void;
|
|
38
32
|
verificarTipoAtribuido(declaracao: Var | Const): void;
|
|
@@ -40,25 +34,10 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
40
34
|
private verificarTipoDe;
|
|
41
35
|
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
|
|
42
36
|
private verificarFalhar;
|
|
43
|
-
visitarExpressaoLiteral(expressao: Literal): Promise<any>;
|
|
44
|
-
visitarExpressaoAgrupamento(expressao: any): Promise<any>;
|
|
45
|
-
visitarExpressaoUnaria(expressao: any): Promise<void>;
|
|
46
|
-
visitarExpressaoBinaria(expressao: any): Promise<void>;
|
|
47
37
|
visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
|
|
48
38
|
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
|
|
49
|
-
visitarExpressaoDeVariavel(expressao: any): Promise<void>;
|
|
50
39
|
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
|
|
51
|
-
visitarExpressaoLeia(expressao: Leia): Promise<void>;
|
|
52
|
-
visitarExpressaoLeiaMultiplo(expressao: LeiaMultiplo): Promise<void>;
|
|
53
|
-
visitarExpressaoLogica(expressao: any): Promise<void>;
|
|
54
|
-
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
|
|
55
|
-
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
|
|
56
|
-
visitarDeclaracaoSe(declaracao: Se): Promise<void>;
|
|
57
|
-
visitarExpressaoFimPara(declaracao: FimPara): Promise<void>;
|
|
58
|
-
visitarDeclaracaoFazer(declaracao: Fazer): Promise<void>;
|
|
59
|
-
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<void>;
|
|
60
40
|
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
|
|
61
|
-
visitarDeclaracaoTente(declaracao: Tente): Promise<void>;
|
|
62
41
|
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
|
|
63
42
|
private verificarCondicao;
|
|
64
43
|
private verificarVariavelBinaria;
|
|
@@ -69,29 +48,12 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
69
48
|
private verificarLogico;
|
|
70
49
|
private verificarChamada;
|
|
71
50
|
private verificarLadoLogico;
|
|
72
|
-
visitarDeclaracaoImportar(declaracao: Importar): Promise<void>;
|
|
73
51
|
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
|
|
74
|
-
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<void>;
|
|
75
|
-
visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
|
|
76
52
|
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
77
53
|
virificarTipoDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
78
|
-
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
|
|
79
54
|
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
80
|
-
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any>;
|
|
81
|
-
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
|
|
82
|
-
visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra;
|
|
83
55
|
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
|
|
84
|
-
visitarExpressaoDeleguaFuncao(expressao: any): Promise<void>;
|
|
85
|
-
visitarExpressaoAtribuicaoPorIndice(expressao: any): Promise<any>;
|
|
86
|
-
visitarExpressaoAcessoIndiceVariavel(expressao: any): Promise<void>;
|
|
87
|
-
visitarExpressaoDefinirValor(expressao: any): Promise<void>;
|
|
88
56
|
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<void>;
|
|
89
|
-
visitarDeclaracaoClasse(declaracao: Classe): Promise<void>;
|
|
90
|
-
visitarExpressaoAcessoMetodo(expressao: any): Promise<void>;
|
|
91
|
-
visitarExpressaoIsto(expressao: any): Promise<void>;
|
|
92
|
-
visitarExpressaoDicionario(expressao: any): Promise<void>;
|
|
93
|
-
visitarExpressaoVetor(expressao: any): Promise<void>;
|
|
94
|
-
visitarExpressaoSuper(expressao: Super): Promise<void>;
|
|
95
57
|
analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
|
|
96
58
|
}
|
|
97
59
|
export {};
|
|
@@ -4,40 +4,24 @@ exports.AnalisadorSemantico = void 0;
|
|
|
4
4
|
const construtos_1 = require("../construtos");
|
|
5
5
|
const declaracoes_1 = require("../declaracoes");
|
|
6
6
|
const erros_1 = require("../interfaces/erros");
|
|
7
|
+
const analisador_semantico_base_1 = require("./analisador-semantico-base");
|
|
7
8
|
const pilha_variaveis_1 = require("./pilha-variaveis");
|
|
8
|
-
class AnalisadorSemantico {
|
|
9
|
+
class AnalisadorSemantico extends analisador_semantico_base_1.AnalisadorSemanticoBase {
|
|
9
10
|
constructor() {
|
|
11
|
+
super();
|
|
10
12
|
this.pilhaVariaveis = new pilha_variaveis_1.PilhaVariaveis();
|
|
11
13
|
this.variaveis = {};
|
|
12
14
|
this.funcoes = {};
|
|
13
15
|
this.atual = 0;
|
|
14
16
|
this.diagnosticos = [];
|
|
15
17
|
}
|
|
16
|
-
visitarDeclaracaoCabecalhoPrograma(declaracao) {
|
|
17
|
-
return Promise.resolve();
|
|
18
|
-
}
|
|
19
|
-
visitarExpressaoTupla(expressao) {
|
|
20
|
-
return Promise.resolve();
|
|
21
|
-
}
|
|
22
|
-
visitarDeclaracaoAleatorio(declaracao) {
|
|
23
|
-
return Promise.resolve();
|
|
24
|
-
}
|
|
25
|
-
visitarExpressaoAcessoElementoMatriz(expressao) {
|
|
26
|
-
return Promise.resolve();
|
|
27
|
-
}
|
|
28
|
-
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao) {
|
|
29
|
-
return Promise.resolve();
|
|
30
|
-
}
|
|
31
|
-
visitarExpressaoExpressaoRegular(expressao) {
|
|
32
|
-
return Promise.resolve();
|
|
33
|
-
}
|
|
34
18
|
erro(simbolo, mensagem) {
|
|
35
19
|
this.diagnosticos.push({
|
|
36
20
|
simbolo: simbolo,
|
|
37
21
|
mensagem: mensagem,
|
|
38
22
|
hashArquivo: simbolo.hashArquivo,
|
|
39
23
|
linha: simbolo.linha,
|
|
40
|
-
severidade: erros_1.DiagnosticoSeveridade.ERRO
|
|
24
|
+
severidade: erros_1.DiagnosticoSeveridade.ERRO,
|
|
41
25
|
});
|
|
42
26
|
}
|
|
43
27
|
aviso(simbolo, mensagem) {
|
|
@@ -46,7 +30,7 @@ class AnalisadorSemantico {
|
|
|
46
30
|
mensagem: mensagem,
|
|
47
31
|
hashArquivo: simbolo.hashArquivo,
|
|
48
32
|
linha: simbolo.linha,
|
|
49
|
-
severidade: erros_1.DiagnosticoSeveridade.AVISO
|
|
33
|
+
severidade: erros_1.DiagnosticoSeveridade.AVISO,
|
|
50
34
|
});
|
|
51
35
|
}
|
|
52
36
|
verificarTipoAtribuido(declaracao) {
|
|
@@ -55,13 +39,13 @@ class AnalisadorSemantico {
|
|
|
55
39
|
if (declaracao.inicializador instanceof construtos_1.Vetor) {
|
|
56
40
|
const vetor = declaracao.inicializador;
|
|
57
41
|
if (declaracao.tipo === 'inteiro[]') {
|
|
58
|
-
const v = vetor.valores.find(v => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
|
|
42
|
+
const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
|
|
59
43
|
if (v) {
|
|
60
44
|
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'inteiros' ou 'real'.`);
|
|
61
45
|
}
|
|
62
46
|
}
|
|
63
47
|
if (declaracao.tipo === 'texto[]') {
|
|
64
|
-
const v = vetor.valores.find(v => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
|
|
48
|
+
const v = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
|
|
65
49
|
if (v) {
|
|
66
50
|
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'texto'.`);
|
|
67
51
|
}
|
|
@@ -123,18 +107,6 @@ class AnalisadorSemantico {
|
|
|
123
107
|
}
|
|
124
108
|
return Promise.resolve();
|
|
125
109
|
}
|
|
126
|
-
visitarExpressaoLiteral(expressao) {
|
|
127
|
-
return Promise.resolve();
|
|
128
|
-
}
|
|
129
|
-
visitarExpressaoAgrupamento(expressao) {
|
|
130
|
-
return Promise.resolve();
|
|
131
|
-
}
|
|
132
|
-
visitarExpressaoUnaria(expressao) {
|
|
133
|
-
return Promise.resolve();
|
|
134
|
-
}
|
|
135
|
-
visitarExpressaoBinaria(expressao) {
|
|
136
|
-
return Promise.resolve();
|
|
137
|
-
}
|
|
138
110
|
visitarExpressaoDeChamada(expressao) {
|
|
139
111
|
var _a, _b;
|
|
140
112
|
if (expressao.entidadeChamada instanceof construtos_1.Variavel) {
|
|
@@ -154,8 +126,7 @@ class AnalisadorSemantico {
|
|
|
154
126
|
if (((_a = arg0.tipoDado) === null || _a === void 0 ? void 0 : _a.tipo) === 'texto' && typeof arg1.valor !== 'string') {
|
|
155
127
|
this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
|
|
156
128
|
}
|
|
157
|
-
else if (['inteiro', 'real'].includes((_b = arg0.tipoDado) === null || _b === void 0 ? void 0 : _b.tipo)
|
|
158
|
-
&& typeof arg1.valor !== 'number') {
|
|
129
|
+
else if (['inteiro', 'real'].includes((_b = arg0.tipoDado) === null || _b === void 0 ? void 0 : _b.tipo) && typeof arg1.valor !== 'number') {
|
|
159
130
|
this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
|
|
160
131
|
}
|
|
161
132
|
}
|
|
@@ -223,38 +194,8 @@ class AnalisadorSemantico {
|
|
|
223
194
|
}
|
|
224
195
|
}
|
|
225
196
|
}
|
|
226
|
-
|
|
227
|
-
return
|
|
228
|
-
}
|
|
229
|
-
visitarDeclaracaoDeExpressao(declaracao) {
|
|
230
|
-
return declaracao.expressao.aceitar(this);
|
|
231
|
-
}
|
|
232
|
-
visitarExpressaoLeia(expressao) {
|
|
233
|
-
return Promise.resolve();
|
|
234
|
-
}
|
|
235
|
-
visitarExpressaoLeiaMultiplo(expressao) {
|
|
236
|
-
return Promise.resolve();
|
|
237
|
-
}
|
|
238
|
-
visitarExpressaoLogica(expressao) {
|
|
239
|
-
return Promise.resolve();
|
|
240
|
-
}
|
|
241
|
-
visitarDeclaracaoPara(declaracao) {
|
|
242
|
-
return Promise.resolve();
|
|
243
|
-
}
|
|
244
|
-
visitarDeclaracaoParaCada(declaracao) {
|
|
245
|
-
return Promise.resolve();
|
|
246
|
-
}
|
|
247
|
-
visitarDeclaracaoSe(declaracao) {
|
|
248
|
-
return Promise.resolve();
|
|
249
|
-
}
|
|
250
|
-
visitarExpressaoFimPara(declaracao) {
|
|
251
|
-
return Promise.resolve();
|
|
252
|
-
}
|
|
253
|
-
visitarDeclaracaoFazer(declaracao) {
|
|
254
|
-
return Promise.resolve();
|
|
255
|
-
}
|
|
256
|
-
visitarExpressaoFormatacaoEscrita(declaracao) {
|
|
257
|
-
return Promise.resolve();
|
|
197
|
+
async visitarDeclaracaoDeExpressao(declaracao) {
|
|
198
|
+
return await declaracao.expressao.aceitar(this);
|
|
258
199
|
}
|
|
259
200
|
visitarDeclaracaoEscolha(declaracao) {
|
|
260
201
|
var _a, _b;
|
|
@@ -274,9 +215,6 @@ class AnalisadorSemantico {
|
|
|
274
215
|
}
|
|
275
216
|
return Promise.resolve();
|
|
276
217
|
}
|
|
277
|
-
visitarDeclaracaoTente(declaracao) {
|
|
278
|
-
return Promise.resolve();
|
|
279
|
-
}
|
|
280
218
|
visitarDeclaracaoEnquanto(declaracao) {
|
|
281
219
|
return this.verificarCondicao(declaracao.condicao);
|
|
282
220
|
}
|
|
@@ -301,7 +239,9 @@ class AnalisadorSemantico {
|
|
|
301
239
|
verificarVariavelBinaria(variavel) {
|
|
302
240
|
this.verificarVariavel(variavel);
|
|
303
241
|
const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
|
|
304
|
-
if (variavelHipotetica &&
|
|
242
|
+
if (variavelHipotetica &&
|
|
243
|
+
!(variavelHipotetica.valor instanceof construtos_1.Binario) &&
|
|
244
|
+
typeof variavelHipotetica.valor !== 'boolean') {
|
|
305
245
|
this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
|
|
306
246
|
}
|
|
307
247
|
return Promise.resolve();
|
|
@@ -351,7 +291,6 @@ class AnalisadorSemantico {
|
|
|
351
291
|
this.verificarBinario(lado);
|
|
352
292
|
return;
|
|
353
293
|
}
|
|
354
|
-
return;
|
|
355
294
|
}
|
|
356
295
|
verificarLogico(logio) {
|
|
357
296
|
this.verificarLadoLogico(logio.direita);
|
|
@@ -362,8 +301,8 @@ class AnalisadorSemantico {
|
|
|
362
301
|
let funcaoChamada = chamada.entidadeChamada;
|
|
363
302
|
if (!this.funcoes[funcaoChamada.simbolo.lexema]) {
|
|
364
303
|
this.erro(funcaoChamada.simbolo, `Chamada da função '${funcaoChamada.simbolo.lexema}' não existe.`);
|
|
365
|
-
return Promise.resolve();
|
|
366
304
|
}
|
|
305
|
+
return Promise.resolve();
|
|
367
306
|
}
|
|
368
307
|
verificarLadoLogico(lado) {
|
|
369
308
|
if (lado instanceof construtos_1.Variavel) {
|
|
@@ -371,12 +310,9 @@ class AnalisadorSemantico {
|
|
|
371
310
|
this.verificarVariavelBinaria(variavel);
|
|
372
311
|
}
|
|
373
312
|
}
|
|
374
|
-
visitarDeclaracaoImportar(declaracao) {
|
|
375
|
-
return Promise.resolve();
|
|
376
|
-
}
|
|
377
313
|
visitarDeclaracaoEscreva(declaracao) {
|
|
378
314
|
var _a;
|
|
379
|
-
const variaveis = declaracao.argumentos.filter(arg => arg instanceof construtos_1.Variavel);
|
|
315
|
+
const variaveis = declaracao.argumentos.filter((arg) => arg instanceof construtos_1.Variavel);
|
|
380
316
|
for (let variavel of variaveis) {
|
|
381
317
|
if (!this.variaveis[variavel.simbolo.lexema]) {
|
|
382
318
|
this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não existe.`);
|
|
@@ -387,12 +323,6 @@ class AnalisadorSemantico {
|
|
|
387
323
|
}
|
|
388
324
|
return Promise.resolve();
|
|
389
325
|
}
|
|
390
|
-
visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
|
|
391
|
-
return Promise.resolve();
|
|
392
|
-
}
|
|
393
|
-
visitarExpressaoBloco(declaracao) {
|
|
394
|
-
return Promise.resolve();
|
|
395
|
-
}
|
|
396
326
|
visitarDeclaracaoConst(declaracao) {
|
|
397
327
|
this.verificarTipoAtribuido(declaracao);
|
|
398
328
|
if (this.variaveis.hasOwnProperty(declaracao.simbolo.lexema)) {
|
|
@@ -402,7 +332,7 @@ class AnalisadorSemantico {
|
|
|
402
332
|
this.variaveis[declaracao.simbolo.lexema] = {
|
|
403
333
|
imutavel: true,
|
|
404
334
|
tipo: declaracao.tipo,
|
|
405
|
-
valor: declaracao.inicializador.valor
|
|
335
|
+
valor: declaracao.inicializador.valor,
|
|
406
336
|
};
|
|
407
337
|
}
|
|
408
338
|
this.virificarTipoDeclaracaoConst(declaracao);
|
|
@@ -422,9 +352,6 @@ class AnalisadorSemantico {
|
|
|
422
352
|
}
|
|
423
353
|
return Promise.resolve();
|
|
424
354
|
}
|
|
425
|
-
visitarDeclaracaoConstMultiplo(declaracao) {
|
|
426
|
-
return Promise.resolve();
|
|
427
|
-
}
|
|
428
355
|
visitarDeclaracaoVar(declaracao) {
|
|
429
356
|
this.verificarTipoAtribuido(declaracao);
|
|
430
357
|
if (declaracao.inicializador instanceof construtos_1.FuncaoConstruto) {
|
|
@@ -436,34 +363,17 @@ class AnalisadorSemantico {
|
|
|
436
363
|
this.variaveis[declaracao.simbolo.lexema] = {
|
|
437
364
|
imutavel: false,
|
|
438
365
|
tipo: declaracao.tipo,
|
|
439
|
-
valor: declaracao.inicializador !== null
|
|
366
|
+
valor: declaracao.inicializador !== null
|
|
367
|
+
? declaracao.inicializador.valor !== undefined
|
|
368
|
+
? declaracao.inicializador.valor
|
|
369
|
+
: declaracao.inicializador
|
|
370
|
+
: undefined,
|
|
440
371
|
};
|
|
441
372
|
return Promise.resolve();
|
|
442
373
|
}
|
|
443
|
-
visitarDeclaracaoVarMultiplo(declaracao) {
|
|
444
|
-
return Promise.resolve();
|
|
445
|
-
}
|
|
446
|
-
visitarExpressaoContinua(declaracao) {
|
|
447
|
-
return Promise.resolve();
|
|
448
|
-
}
|
|
449
|
-
visitarExpressaoSustar(declaracao) {
|
|
450
|
-
return Promise.resolve();
|
|
451
|
-
}
|
|
452
374
|
visitarExpressaoRetornar(declaracao) {
|
|
453
375
|
return Promise.resolve(null);
|
|
454
376
|
}
|
|
455
|
-
visitarExpressaoDeleguaFuncao(expressao) {
|
|
456
|
-
return Promise.resolve();
|
|
457
|
-
}
|
|
458
|
-
visitarExpressaoAtribuicaoPorIndice(expressao) {
|
|
459
|
-
return Promise.resolve();
|
|
460
|
-
}
|
|
461
|
-
visitarExpressaoAcessoIndiceVariavel(expressao) {
|
|
462
|
-
return Promise.resolve();
|
|
463
|
-
}
|
|
464
|
-
visitarExpressaoDefinirValor(expressao) {
|
|
465
|
-
return Promise.resolve();
|
|
466
|
-
}
|
|
467
377
|
visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
468
378
|
for (let parametro of declaracao.funcao.parametros) {
|
|
469
379
|
if (parametro.hasOwnProperty('tipoDado') && !parametro.tipoDado.tipo) {
|
|
@@ -504,28 +414,10 @@ class AnalisadorSemantico {
|
|
|
504
414
|
}
|
|
505
415
|
}
|
|
506
416
|
this.funcoes[declaracao.simbolo.lexema] = {
|
|
507
|
-
valor: declaracao.funcao
|
|
417
|
+
valor: declaracao.funcao,
|
|
508
418
|
};
|
|
509
419
|
return Promise.resolve();
|
|
510
420
|
}
|
|
511
|
-
visitarDeclaracaoClasse(declaracao) {
|
|
512
|
-
return Promise.resolve();
|
|
513
|
-
}
|
|
514
|
-
visitarExpressaoAcessoMetodo(expressao) {
|
|
515
|
-
return Promise.resolve();
|
|
516
|
-
}
|
|
517
|
-
visitarExpressaoIsto(expressao) {
|
|
518
|
-
return Promise.resolve();
|
|
519
|
-
}
|
|
520
|
-
visitarExpressaoDicionario(expressao) {
|
|
521
|
-
return Promise.resolve();
|
|
522
|
-
}
|
|
523
|
-
visitarExpressaoVetor(expressao) {
|
|
524
|
-
return Promise.resolve();
|
|
525
|
-
}
|
|
526
|
-
visitarExpressaoSuper(expressao) {
|
|
527
|
-
return Promise.resolve();
|
|
528
|
-
}
|
|
529
421
|
analisar(declaracoes) {
|
|
530
422
|
// this.pilhaVariaveis = new PilhaVariaveis();
|
|
531
423
|
// this.pilhaVariaveis.empilhar()
|