@designliquido/delegua 0.32.2 → 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 -45
- package/fontes/analisador-semantico/analisador-semantico.js +22 -133
- package/fontes/analisador-semantico/analisador-semantico.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.d.ts +6 -53
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.js +3 -140
- package/fontes/analisador-semantico/dialetos/analisador-semantico-birl.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.d.ts +6 -55
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.js +10 -148
- package/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.js.map +1 -1
- package/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.d.ts +11 -55
- package/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.js +22 -144
- 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 +5 -12
- 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 +2 -0
- package/fontes/declaracoes/index.js +2 -0
- package/fontes/declaracoes/index.js.map +1 -1
- package/fontes/declaracoes/inicio-algoritmo.d.ts +2 -2
- package/fontes/declaracoes/inicio-algoritmo.js.map +1 -1
- 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 +1 -1
- package/fontes/estruturas/delegua-funcao.js.map +1 -1
- package/fontes/estruturas/objeto-delegua-classe.js.map +1 -1
- package/fontes/formatadores/formatador-delegua.d.ts +2 -1
- package/fontes/formatadores/formatador-delegua.js +10 -1
- package/fontes/formatadores/formatador-delegua.js.map +1 -1
- package/fontes/formatadores/formatador-portugol-studio.d.ts +6 -5
- package/fontes/formatadores/formatador-portugol-studio.js +53 -50
- package/fontes/formatadores/formatador-portugol-studio.js.map +1 -1
- package/fontes/formatadores/formatador-visualg.d.ts +5 -4
- package/fontes/formatadores/formatador-visualg.js +20 -14
- 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 -41
- 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 +11 -10
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js +11 -7
- package/fontes/interpretador/dialetos/egua-classico/interpretador-egua-classico.js.map +1 -1
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.d.ts +10 -9
- package/fontes/interpretador/dialetos/egua-classico/resolvedor/resolvedor.js +13 -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 +23 -22
- package/fontes/interpretador/dialetos/portugol-ipt/interpretador-portugol-ipt.js +6 -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.js +8 -5
- package/fontes/interpretador/dialetos/visualg/comum.js.map +1 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js +1 -1
- package/fontes/interpretador/dialetos/visualg/interpretador-visualg-com-depuracao.js.map +1 -1
- 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 +8 -7
- package/fontes/interpretador/interpretador-base.js +53 -38
- 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.js +2 -2
- 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,12 +1,11 @@
|
|
|
1
|
-
import { Atribuir, Chamada,
|
|
2
|
-
import {
|
|
3
|
-
import { InicioAlgoritmo } from '../declaracoes/inicio-algoritmo';
|
|
1
|
+
import { Atribuir, Chamada, TipoDe } from '../construtos';
|
|
2
|
+
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '../declaracoes';
|
|
4
3
|
import { SimboloInterface } from '../interfaces';
|
|
5
|
-
import { AnalisadorSemanticoInterface } from '../interfaces/analisador-semantico-interface';
|
|
6
4
|
import { DiagnosticoAnalisadorSemantico } from '../interfaces/erros';
|
|
7
5
|
import { RetornoAnalisadorSemantico } from '../interfaces/retornos/retorno-analisador-semantico';
|
|
8
6
|
import { TiposDadosInterface } from '../interfaces/tipos-dados-interface';
|
|
9
|
-
import {
|
|
7
|
+
import { RetornoQuebra } from '../quebras';
|
|
8
|
+
import { AnalisadorSemanticoBase } from './analisador-semantico-base';
|
|
10
9
|
import { PilhaVariaveis } from './pilha-variaveis';
|
|
11
10
|
interface VariavelHipoteticaInterface {
|
|
12
11
|
tipo: TiposDadosInterface;
|
|
@@ -17,7 +16,7 @@ interface VariavelHipoteticaInterface {
|
|
|
17
16
|
interface FuncaoHipoteticaInterface {
|
|
18
17
|
valor: any;
|
|
19
18
|
}
|
|
20
|
-
export declare class AnalisadorSemantico
|
|
19
|
+
export declare class AnalisadorSemantico extends AnalisadorSemanticoBase {
|
|
21
20
|
pilhaVariaveis: PilhaVariaveis;
|
|
22
21
|
variaveis: {
|
|
23
22
|
[nomeVariavel: string]: VariavelHipoteticaInterface;
|
|
@@ -28,13 +27,6 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
28
27
|
atual: number;
|
|
29
28
|
diagnosticos: DiagnosticoAnalisadorSemantico[];
|
|
30
29
|
constructor();
|
|
31
|
-
visitarDeclaracaoCabecalhoPrograma(declaracao: CabecalhoPrograma): Promise<any>;
|
|
32
|
-
visitarExpressaoTupla(expressao: Tupla): Promise<any>;
|
|
33
|
-
visitarDeclaracaoAleatorio(declaracao: Aleatorio): Promise<any>;
|
|
34
|
-
visitarExpressaoAcessoElementoMatriz(expressao: any): Promise<void>;
|
|
35
|
-
visitarExpressaoAtribuicaoPorIndicesMatriz(expressao: any): Promise<any>;
|
|
36
|
-
visitarExpressaoExpressaoRegular(expressao: ExpressaoRegular): Promise<any>;
|
|
37
|
-
visitarDeclaracaoInicioAlgoritmo(declaracao: InicioAlgoritmo): Promise<any>;
|
|
38
30
|
erro(simbolo: SimboloInterface, mensagem: string): void;
|
|
39
31
|
aviso(simbolo: SimboloInterface, mensagem: string): void;
|
|
40
32
|
verificarTipoAtribuido(declaracao: Var | Const): void;
|
|
@@ -42,25 +34,10 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
42
34
|
private verificarTipoDe;
|
|
43
35
|
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
|
|
44
36
|
private verificarFalhar;
|
|
45
|
-
visitarExpressaoLiteral(expressao: Literal): Promise<any>;
|
|
46
|
-
visitarExpressaoAgrupamento(expressao: any): Promise<any>;
|
|
47
|
-
visitarExpressaoUnaria(expressao: any): Promise<void>;
|
|
48
|
-
visitarExpressaoBinaria(expressao: any): Promise<void>;
|
|
49
37
|
visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
|
|
50
38
|
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
|
|
51
|
-
visitarExpressaoDeVariavel(expressao: any): Promise<void>;
|
|
52
39
|
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
|
|
53
|
-
visitarExpressaoLeia(expressao: Leia): Promise<void>;
|
|
54
|
-
visitarExpressaoLeiaMultiplo(expressao: LeiaMultiplo): Promise<void>;
|
|
55
|
-
visitarExpressaoLogica(expressao: any): Promise<void>;
|
|
56
|
-
visitarDeclaracaoPara(declaracao: Para): Promise<any>;
|
|
57
|
-
visitarDeclaracaoParaCada(declaracao: ParaCada): Promise<any>;
|
|
58
|
-
visitarDeclaracaoSe(declaracao: Se): Promise<void>;
|
|
59
|
-
visitarExpressaoFimPara(declaracao: FimPara): Promise<void>;
|
|
60
|
-
visitarDeclaracaoFazer(declaracao: Fazer): Promise<void>;
|
|
61
|
-
visitarExpressaoFormatacaoEscrita(declaracao: FormatacaoEscrita): Promise<void>;
|
|
62
40
|
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
|
|
63
|
-
visitarDeclaracaoTente(declaracao: Tente): Promise<void>;
|
|
64
41
|
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
|
|
65
42
|
private verificarCondicao;
|
|
66
43
|
private verificarVariavelBinaria;
|
|
@@ -71,29 +48,12 @@ export declare class AnalisadorSemantico implements AnalisadorSemanticoInterface
|
|
|
71
48
|
private verificarLogico;
|
|
72
49
|
private verificarChamada;
|
|
73
50
|
private verificarLadoLogico;
|
|
74
|
-
visitarDeclaracaoImportar(declaracao: Importar): Promise<void>;
|
|
75
51
|
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
|
|
76
|
-
visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<void>;
|
|
77
|
-
visitarExpressaoBloco(declaracao: Bloco): Promise<any>;
|
|
78
52
|
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
79
53
|
virificarTipoDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
80
|
-
visitarDeclaracaoConstMultiplo(declaracao: ConstMultiplo): Promise<any>;
|
|
81
54
|
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
82
|
-
visitarDeclaracaoVarMultiplo(declaracao: VarMultiplo): Promise<any>;
|
|
83
|
-
visitarExpressaoContinua(declaracao?: Continua): ContinuarQuebra;
|
|
84
|
-
visitarExpressaoSustar(declaracao?: Sustar): SustarQuebra;
|
|
85
55
|
visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
|
|
86
|
-
visitarExpressaoDeleguaFuncao(expressao: any): Promise<void>;
|
|
87
|
-
visitarExpressaoAtribuicaoPorIndice(expressao: any): Promise<any>;
|
|
88
|
-
visitarExpressaoAcessoIndiceVariavel(expressao: any): Promise<void>;
|
|
89
|
-
visitarExpressaoDefinirValor(expressao: any): Promise<void>;
|
|
90
56
|
visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<void>;
|
|
91
|
-
visitarDeclaracaoClasse(declaracao: Classe): Promise<void>;
|
|
92
|
-
visitarExpressaoAcessoMetodo(expressao: any): Promise<void>;
|
|
93
|
-
visitarExpressaoIsto(expressao: any): Promise<void>;
|
|
94
|
-
visitarExpressaoDicionario(expressao: any): Promise<void>;
|
|
95
|
-
visitarExpressaoVetor(expressao: any): Promise<void>;
|
|
96
|
-
visitarExpressaoSuper(expressao: Super): Promise<void>;
|
|
97
57
|
analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
|
|
98
58
|
}
|
|
99
59
|
export {};
|
|
@@ -4,43 +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
|
-
visitarDeclaracaoInicioAlgoritmo(declaracao) {
|
|
35
|
-
return Promise.resolve();
|
|
36
|
-
}
|
|
37
18
|
erro(simbolo, mensagem) {
|
|
38
19
|
this.diagnosticos.push({
|
|
39
20
|
simbolo: simbolo,
|
|
40
21
|
mensagem: mensagem,
|
|
41
22
|
hashArquivo: simbolo.hashArquivo,
|
|
42
23
|
linha: simbolo.linha,
|
|
43
|
-
severidade: erros_1.DiagnosticoSeveridade.ERRO
|
|
24
|
+
severidade: erros_1.DiagnosticoSeveridade.ERRO,
|
|
44
25
|
});
|
|
45
26
|
}
|
|
46
27
|
aviso(simbolo, mensagem) {
|
|
@@ -49,7 +30,7 @@ class AnalisadorSemantico {
|
|
|
49
30
|
mensagem: mensagem,
|
|
50
31
|
hashArquivo: simbolo.hashArquivo,
|
|
51
32
|
linha: simbolo.linha,
|
|
52
|
-
severidade: erros_1.DiagnosticoSeveridade.AVISO
|
|
33
|
+
severidade: erros_1.DiagnosticoSeveridade.AVISO,
|
|
53
34
|
});
|
|
54
35
|
}
|
|
55
36
|
verificarTipoAtribuido(declaracao) {
|
|
@@ -58,13 +39,13 @@ class AnalisadorSemantico {
|
|
|
58
39
|
if (declaracao.inicializador instanceof construtos_1.Vetor) {
|
|
59
40
|
const vetor = declaracao.inicializador;
|
|
60
41
|
if (declaracao.tipo === 'inteiro[]') {
|
|
61
|
-
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');
|
|
62
43
|
if (v) {
|
|
63
44
|
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'inteiros' ou 'real'.`);
|
|
64
45
|
}
|
|
65
46
|
}
|
|
66
47
|
if (declaracao.tipo === 'texto[]') {
|
|
67
|
-
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');
|
|
68
49
|
if (v) {
|
|
69
50
|
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', é esperado um vetor de 'texto'.`);
|
|
70
51
|
}
|
|
@@ -126,18 +107,6 @@ class AnalisadorSemantico {
|
|
|
126
107
|
}
|
|
127
108
|
return Promise.resolve();
|
|
128
109
|
}
|
|
129
|
-
visitarExpressaoLiteral(expressao) {
|
|
130
|
-
return Promise.resolve();
|
|
131
|
-
}
|
|
132
|
-
visitarExpressaoAgrupamento(expressao) {
|
|
133
|
-
return Promise.resolve();
|
|
134
|
-
}
|
|
135
|
-
visitarExpressaoUnaria(expressao) {
|
|
136
|
-
return Promise.resolve();
|
|
137
|
-
}
|
|
138
|
-
visitarExpressaoBinaria(expressao) {
|
|
139
|
-
return Promise.resolve();
|
|
140
|
-
}
|
|
141
110
|
visitarExpressaoDeChamada(expressao) {
|
|
142
111
|
var _a, _b;
|
|
143
112
|
if (expressao.entidadeChamada instanceof construtos_1.Variavel) {
|
|
@@ -157,8 +126,7 @@ class AnalisadorSemantico {
|
|
|
157
126
|
if (((_a = arg0.tipoDado) === null || _a === void 0 ? void 0 : _a.tipo) === 'texto' && typeof arg1.valor !== 'string') {
|
|
158
127
|
this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
|
|
159
128
|
}
|
|
160
|
-
else if (['inteiro', 'real'].includes((_b = arg0.tipoDado) === null || _b === void 0 ? void 0 : _b.tipo)
|
|
161
|
-
&& 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') {
|
|
162
130
|
this.erro(expressao.entidadeChamada.simbolo, `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`);
|
|
163
131
|
}
|
|
164
132
|
}
|
|
@@ -226,38 +194,8 @@ class AnalisadorSemantico {
|
|
|
226
194
|
}
|
|
227
195
|
}
|
|
228
196
|
}
|
|
229
|
-
|
|
230
|
-
return
|
|
231
|
-
}
|
|
232
|
-
visitarDeclaracaoDeExpressao(declaracao) {
|
|
233
|
-
return declaracao.expressao.aceitar(this);
|
|
234
|
-
}
|
|
235
|
-
visitarExpressaoLeia(expressao) {
|
|
236
|
-
return Promise.resolve();
|
|
237
|
-
}
|
|
238
|
-
visitarExpressaoLeiaMultiplo(expressao) {
|
|
239
|
-
return Promise.resolve();
|
|
240
|
-
}
|
|
241
|
-
visitarExpressaoLogica(expressao) {
|
|
242
|
-
return Promise.resolve();
|
|
243
|
-
}
|
|
244
|
-
visitarDeclaracaoPara(declaracao) {
|
|
245
|
-
return Promise.resolve();
|
|
246
|
-
}
|
|
247
|
-
visitarDeclaracaoParaCada(declaracao) {
|
|
248
|
-
return Promise.resolve();
|
|
249
|
-
}
|
|
250
|
-
visitarDeclaracaoSe(declaracao) {
|
|
251
|
-
return Promise.resolve();
|
|
252
|
-
}
|
|
253
|
-
visitarExpressaoFimPara(declaracao) {
|
|
254
|
-
return Promise.resolve();
|
|
255
|
-
}
|
|
256
|
-
visitarDeclaracaoFazer(declaracao) {
|
|
257
|
-
return Promise.resolve();
|
|
258
|
-
}
|
|
259
|
-
visitarExpressaoFormatacaoEscrita(declaracao) {
|
|
260
|
-
return Promise.resolve();
|
|
197
|
+
async visitarDeclaracaoDeExpressao(declaracao) {
|
|
198
|
+
return await declaracao.expressao.aceitar(this);
|
|
261
199
|
}
|
|
262
200
|
visitarDeclaracaoEscolha(declaracao) {
|
|
263
201
|
var _a, _b;
|
|
@@ -277,9 +215,6 @@ class AnalisadorSemantico {
|
|
|
277
215
|
}
|
|
278
216
|
return Promise.resolve();
|
|
279
217
|
}
|
|
280
|
-
visitarDeclaracaoTente(declaracao) {
|
|
281
|
-
return Promise.resolve();
|
|
282
|
-
}
|
|
283
218
|
visitarDeclaracaoEnquanto(declaracao) {
|
|
284
219
|
return this.verificarCondicao(declaracao.condicao);
|
|
285
220
|
}
|
|
@@ -304,7 +239,9 @@ class AnalisadorSemantico {
|
|
|
304
239
|
verificarVariavelBinaria(variavel) {
|
|
305
240
|
this.verificarVariavel(variavel);
|
|
306
241
|
const variavelHipotetica = this.variaveis[variavel.simbolo.lexema];
|
|
307
|
-
if (variavelHipotetica &&
|
|
242
|
+
if (variavelHipotetica &&
|
|
243
|
+
!(variavelHipotetica.valor instanceof construtos_1.Binario) &&
|
|
244
|
+
typeof variavelHipotetica.valor !== 'boolean') {
|
|
308
245
|
this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
|
|
309
246
|
}
|
|
310
247
|
return Promise.resolve();
|
|
@@ -354,7 +291,6 @@ class AnalisadorSemantico {
|
|
|
354
291
|
this.verificarBinario(lado);
|
|
355
292
|
return;
|
|
356
293
|
}
|
|
357
|
-
return;
|
|
358
294
|
}
|
|
359
295
|
verificarLogico(logio) {
|
|
360
296
|
this.verificarLadoLogico(logio.direita);
|
|
@@ -365,8 +301,8 @@ class AnalisadorSemantico {
|
|
|
365
301
|
let funcaoChamada = chamada.entidadeChamada;
|
|
366
302
|
if (!this.funcoes[funcaoChamada.simbolo.lexema]) {
|
|
367
303
|
this.erro(funcaoChamada.simbolo, `Chamada da função '${funcaoChamada.simbolo.lexema}' não existe.`);
|
|
368
|
-
return Promise.resolve();
|
|
369
304
|
}
|
|
305
|
+
return Promise.resolve();
|
|
370
306
|
}
|
|
371
307
|
verificarLadoLogico(lado) {
|
|
372
308
|
if (lado instanceof construtos_1.Variavel) {
|
|
@@ -374,12 +310,9 @@ class AnalisadorSemantico {
|
|
|
374
310
|
this.verificarVariavelBinaria(variavel);
|
|
375
311
|
}
|
|
376
312
|
}
|
|
377
|
-
visitarDeclaracaoImportar(declaracao) {
|
|
378
|
-
return Promise.resolve();
|
|
379
|
-
}
|
|
380
313
|
visitarDeclaracaoEscreva(declaracao) {
|
|
381
314
|
var _a;
|
|
382
|
-
const variaveis = declaracao.argumentos.filter(arg => arg instanceof construtos_1.Variavel);
|
|
315
|
+
const variaveis = declaracao.argumentos.filter((arg) => arg instanceof construtos_1.Variavel);
|
|
383
316
|
for (let variavel of variaveis) {
|
|
384
317
|
if (!this.variaveis[variavel.simbolo.lexema]) {
|
|
385
318
|
this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' não existe.`);
|
|
@@ -390,12 +323,6 @@ class AnalisadorSemantico {
|
|
|
390
323
|
}
|
|
391
324
|
return Promise.resolve();
|
|
392
325
|
}
|
|
393
|
-
visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
|
|
394
|
-
return Promise.resolve();
|
|
395
|
-
}
|
|
396
|
-
visitarExpressaoBloco(declaracao) {
|
|
397
|
-
return Promise.resolve();
|
|
398
|
-
}
|
|
399
326
|
visitarDeclaracaoConst(declaracao) {
|
|
400
327
|
this.verificarTipoAtribuido(declaracao);
|
|
401
328
|
if (this.variaveis.hasOwnProperty(declaracao.simbolo.lexema)) {
|
|
@@ -405,7 +332,7 @@ class AnalisadorSemantico {
|
|
|
405
332
|
this.variaveis[declaracao.simbolo.lexema] = {
|
|
406
333
|
imutavel: true,
|
|
407
334
|
tipo: declaracao.tipo,
|
|
408
|
-
valor: declaracao.inicializador.valor
|
|
335
|
+
valor: declaracao.inicializador.valor,
|
|
409
336
|
};
|
|
410
337
|
}
|
|
411
338
|
this.virificarTipoDeclaracaoConst(declaracao);
|
|
@@ -425,9 +352,6 @@ class AnalisadorSemantico {
|
|
|
425
352
|
}
|
|
426
353
|
return Promise.resolve();
|
|
427
354
|
}
|
|
428
|
-
visitarDeclaracaoConstMultiplo(declaracao) {
|
|
429
|
-
return Promise.resolve();
|
|
430
|
-
}
|
|
431
355
|
visitarDeclaracaoVar(declaracao) {
|
|
432
356
|
this.verificarTipoAtribuido(declaracao);
|
|
433
357
|
if (declaracao.inicializador instanceof construtos_1.FuncaoConstruto) {
|
|
@@ -439,34 +363,17 @@ class AnalisadorSemantico {
|
|
|
439
363
|
this.variaveis[declaracao.simbolo.lexema] = {
|
|
440
364
|
imutavel: false,
|
|
441
365
|
tipo: declaracao.tipo,
|
|
442
|
-
valor: declaracao.inicializador !== null
|
|
366
|
+
valor: declaracao.inicializador !== null
|
|
367
|
+
? declaracao.inicializador.valor !== undefined
|
|
368
|
+
? declaracao.inicializador.valor
|
|
369
|
+
: declaracao.inicializador
|
|
370
|
+
: undefined,
|
|
443
371
|
};
|
|
444
372
|
return Promise.resolve();
|
|
445
373
|
}
|
|
446
|
-
visitarDeclaracaoVarMultiplo(declaracao) {
|
|
447
|
-
return Promise.resolve();
|
|
448
|
-
}
|
|
449
|
-
visitarExpressaoContinua(declaracao) {
|
|
450
|
-
return Promise.resolve();
|
|
451
|
-
}
|
|
452
|
-
visitarExpressaoSustar(declaracao) {
|
|
453
|
-
return Promise.resolve();
|
|
454
|
-
}
|
|
455
374
|
visitarExpressaoRetornar(declaracao) {
|
|
456
375
|
return Promise.resolve(null);
|
|
457
376
|
}
|
|
458
|
-
visitarExpressaoDeleguaFuncao(expressao) {
|
|
459
|
-
return Promise.resolve();
|
|
460
|
-
}
|
|
461
|
-
visitarExpressaoAtribuicaoPorIndice(expressao) {
|
|
462
|
-
return Promise.resolve();
|
|
463
|
-
}
|
|
464
|
-
visitarExpressaoAcessoIndiceVariavel(expressao) {
|
|
465
|
-
return Promise.resolve();
|
|
466
|
-
}
|
|
467
|
-
visitarExpressaoDefinirValor(expressao) {
|
|
468
|
-
return Promise.resolve();
|
|
469
|
-
}
|
|
470
377
|
visitarDeclaracaoDefinicaoFuncao(declaracao) {
|
|
471
378
|
for (let parametro of declaracao.funcao.parametros) {
|
|
472
379
|
if (parametro.hasOwnProperty('tipoDado') && !parametro.tipoDado.tipo) {
|
|
@@ -507,28 +414,10 @@ class AnalisadorSemantico {
|
|
|
507
414
|
}
|
|
508
415
|
}
|
|
509
416
|
this.funcoes[declaracao.simbolo.lexema] = {
|
|
510
|
-
valor: declaracao.funcao
|
|
417
|
+
valor: declaracao.funcao,
|
|
511
418
|
};
|
|
512
419
|
return Promise.resolve();
|
|
513
420
|
}
|
|
514
|
-
visitarDeclaracaoClasse(declaracao) {
|
|
515
|
-
return Promise.resolve();
|
|
516
|
-
}
|
|
517
|
-
visitarExpressaoAcessoMetodo(expressao) {
|
|
518
|
-
return Promise.resolve();
|
|
519
|
-
}
|
|
520
|
-
visitarExpressaoIsto(expressao) {
|
|
521
|
-
return Promise.resolve();
|
|
522
|
-
}
|
|
523
|
-
visitarExpressaoDicionario(expressao) {
|
|
524
|
-
return Promise.resolve();
|
|
525
|
-
}
|
|
526
|
-
visitarExpressaoVetor(expressao) {
|
|
527
|
-
return Promise.resolve();
|
|
528
|
-
}
|
|
529
|
-
visitarExpressaoSuper(expressao) {
|
|
530
|
-
return Promise.resolve();
|
|
531
|
-
}
|
|
532
421
|
analisar(declaracoes) {
|
|
533
422
|
// this.pilhaVariaveis = new PilhaVariaveis();
|
|
534
423
|
// this.pilhaVariaveis.empilhar()
|