@designliquido/potigol 0.5.7 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/analisador-semantico/analisador-semantico-potigol.d.ts +109 -12
- package/analisador-semantico/analisador-semantico-potigol.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-potigol.js +617 -33
- package/analisador-semantico/analisador-semantico-potigol.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,35 +1,132 @@
|
|
|
1
1
|
import { AnalisadorSemanticoBase, PilhaVariaveis } from '@designliquido/delegua/analisador-semantico';
|
|
2
|
-
import { Const, Declaracao, Var } from '@designliquido/delegua/declaracoes';
|
|
3
|
-
import {
|
|
2
|
+
import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Var } from '@designliquido/delegua/declaracoes';
|
|
3
|
+
import { Atribuir, Binario, Chamada, Construto, Literal, Variavel, Constante, TipoDe } from '@designliquido/delegua';
|
|
4
|
+
import { DiagnosticoAnalisadorSemantico, ParametroInterface, SimboloInterface } from '@designliquido/delegua/interfaces';
|
|
4
5
|
import { FuncaoHipoteticaInterface } from '@designliquido/delegua/interfaces/funcao-hipotetica-interface';
|
|
5
6
|
import { RetornoAnalisadorSemantico } from '@designliquido/delegua/interfaces/retornos/retorno-analisador-semantico';
|
|
6
|
-
import { VariavelHipoteticaInterface } from '@designliquido/delegua/interfaces/variavel-hipotetica-interface';
|
|
7
|
-
import { Constante, TipoDe, Variavel } from '@designliquido/delegua';
|
|
8
7
|
import { ReatribuicaoVariavel } from '../declaracoes';
|
|
9
8
|
import { VisitanteComumPotigolInterface } from '../interfaces';
|
|
10
9
|
import { LeiaInteiro, LeiaInteiros, LeiaReais, LeiaReal, LeiaTexto, LeiaTextos } from '../construtos';
|
|
10
|
+
/**
|
|
11
|
+
* Analisador Semântico do Potigol.
|
|
12
|
+
* Realiza verificações semânticas no código, como tipos, variáveis não declaradas,
|
|
13
|
+
* divisão por zero, e outras validações em tempo de compilação.
|
|
14
|
+
*/
|
|
11
15
|
export declare class AnalisadorSemanticoPotigol extends AnalisadorSemanticoBase implements VisitanteComumPotigolInterface {
|
|
12
16
|
pilhaVariaveis: PilhaVariaveis;
|
|
13
|
-
variaveis: {
|
|
14
|
-
[nomeVariavel: string]: VariavelHipoteticaInterface;
|
|
15
|
-
};
|
|
16
17
|
funcoes: {
|
|
17
18
|
[nomeFuncao: string]: FuncaoHipoteticaInterface;
|
|
18
19
|
};
|
|
19
20
|
atual: number;
|
|
20
21
|
diagnosticos: DiagnosticoAnalisadorSemantico[];
|
|
21
|
-
|
|
22
|
+
constructor();
|
|
23
|
+
/**
|
|
24
|
+
* Verifica o tipo atribuído a uma variável na declaração
|
|
25
|
+
*/
|
|
26
|
+
verificarTipoAtribuido(declaracao: Var | Const): void;
|
|
27
|
+
visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
|
|
28
|
+
/**
|
|
29
|
+
* Verifica recursivamente o tipo de uma expressão
|
|
30
|
+
*/
|
|
31
|
+
private verificarTipoDe;
|
|
32
|
+
visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
|
|
33
|
+
/**
|
|
34
|
+
* Verifica recursivamente a expressão de falha
|
|
35
|
+
*/
|
|
36
|
+
private verificarFalhar;
|
|
37
|
+
/**
|
|
38
|
+
* Compara argumentos passados contra os parâmetros esperados de uma função
|
|
39
|
+
*/
|
|
40
|
+
protected comparacaoArgumentosContraParametrosFuncao(simboloFuncao: SimboloInterface, parametros: ParametroInterface[], argumentos: Construto[]): void;
|
|
41
|
+
visitarExpressaoDeChamada(expressao: Chamada): Promise<any>;
|
|
42
|
+
visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
|
|
43
|
+
visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
|
|
44
|
+
visitarDeclaracaoEscolha(declaracao: Escolha): Promise<any>;
|
|
45
|
+
visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<any>;
|
|
46
|
+
/**
|
|
47
|
+
* Verifica recursivamente uma condição
|
|
48
|
+
*/
|
|
49
|
+
private verificarCondicao;
|
|
50
|
+
/**
|
|
51
|
+
* Verifica se uma variável é do tipo lógico/booleano
|
|
52
|
+
*/
|
|
53
|
+
private verificarVariavelBinaria;
|
|
54
|
+
/**
|
|
55
|
+
* Verifica se uma variável existe e foi inicializada
|
|
56
|
+
*/
|
|
57
|
+
private verificarVariavel;
|
|
58
|
+
/**
|
|
59
|
+
* Verifica uma expressão binária recursivamente
|
|
60
|
+
*/
|
|
61
|
+
private verificarBinario;
|
|
62
|
+
/**
|
|
63
|
+
* Verifica operadores binários e seus operandos
|
|
64
|
+
*/
|
|
65
|
+
private verificarOperadorBinario;
|
|
66
|
+
/**
|
|
67
|
+
* Verifica se os tipos dos operandos são compatíveis
|
|
68
|
+
*/
|
|
69
|
+
private verificarTiposOperandos;
|
|
70
|
+
/**
|
|
71
|
+
* Verifica divisão por zero em tempo de compilação
|
|
72
|
+
*/
|
|
73
|
+
private verificarDivisaoPorZero;
|
|
74
|
+
/**
|
|
75
|
+
* Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
|
|
76
|
+
* Retorna o valor se puder ser determinado, ou null caso contrário
|
|
77
|
+
*/
|
|
78
|
+
private avaliarExpressaoConstante;
|
|
79
|
+
/**
|
|
80
|
+
* Calcula o resultado de uma operação binária em tempo de compilação
|
|
81
|
+
*/
|
|
82
|
+
private calcularOperacaoBinaria;
|
|
83
|
+
/**
|
|
84
|
+
* Obtém o tipo de uma expressão
|
|
85
|
+
*/
|
|
86
|
+
private obterTipoExpressao;
|
|
87
|
+
/**
|
|
88
|
+
* Infere o tipo de resultado de uma operação binária
|
|
89
|
+
*/
|
|
90
|
+
private inferirTipoBinario;
|
|
91
|
+
/**
|
|
92
|
+
* Verifica se um construto existe (principalmente variáveis)
|
|
93
|
+
*/
|
|
94
|
+
private verificarExistenciaConstruto;
|
|
95
|
+
/**
|
|
96
|
+
* Verifica uma expressão lógica
|
|
97
|
+
*/
|
|
98
|
+
private verificarLogico;
|
|
99
|
+
/**
|
|
100
|
+
* Verifica uma chamada de função
|
|
101
|
+
*/
|
|
102
|
+
private verificarChamada;
|
|
103
|
+
/**
|
|
104
|
+
* Verifica o lado de uma expressão lógica
|
|
105
|
+
*/
|
|
106
|
+
private verificarLadoLogico;
|
|
107
|
+
/**
|
|
108
|
+
* Verifica interpolações de texto e marca variáveis como usadas
|
|
109
|
+
*/
|
|
110
|
+
protected verificarInterpolacaoTexto(texto: string, literal: Literal): void;
|
|
111
|
+
visitarDeclaracaoEscreva(declaracao: Escreva): Promise<any>;
|
|
112
|
+
/**
|
|
113
|
+
* Verifica variáveis não usadas no escopo atual
|
|
114
|
+
*/
|
|
115
|
+
private verificarVariaveisNaoUsadas;
|
|
116
|
+
visitarDeclaracaoConst(declaracao: Const): Promise<any>;
|
|
117
|
+
visitarDeclaracaoVar(declaracao: Var): Promise<any>;
|
|
118
|
+
visitarExpressaoDeVariavel(expressao: Variavel | Constante): Promise<any>;
|
|
22
119
|
visitarDeclaracaoLeiaInteiro(declaracao: LeiaInteiro): Promise<any> | void;
|
|
23
120
|
visitarDeclaracaoLeiaInteiros(declaracao: LeiaInteiros): Promise<any> | void;
|
|
24
121
|
visitarDeclaracaoLeiaReais(declaracao: LeiaReais): Promise<any> | void;
|
|
25
122
|
visitarDeclaracaoLeiaReal(declaracao: LeiaReal): Promise<any> | void;
|
|
26
123
|
visitarDeclaracaoLeiaTexto(declaracao: LeiaTexto): Promise<any> | void;
|
|
27
124
|
visitarDeclaracaoLeiaTextos(declaracao: LeiaTextos): Promise<any> | void;
|
|
125
|
+
visitarExpressaoBinaria(expressao: Binario): Promise<any>;
|
|
28
126
|
visitarDeclaracaoReatribuicaoVariavel(declaracao: ReatribuicaoVariavel): void | Promise<any>;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
visitarExpressaoTipoDe(expressao: TipoDe<string>): Promise<string>;
|
|
127
|
+
/**
|
|
128
|
+
* Método principal de análise semântica
|
|
129
|
+
*/
|
|
33
130
|
analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
|
|
34
131
|
}
|
|
35
132
|
//# sourceMappingURL=analisador-semantico-potigol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analisador-semantico-potigol.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-potigol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"analisador-semantico-potigol.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-potigol.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,75 +2,659 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AnalisadorSemanticoPotigol = void 0;
|
|
4
4
|
const analisador_semantico_1 = require("@designliquido/delegua/analisador-semantico");
|
|
5
|
-
const
|
|
5
|
+
const delegua_1 = require("@designliquido/delegua");
|
|
6
|
+
/**
|
|
7
|
+
* Analisador Semântico do Potigol.
|
|
8
|
+
* Realiza verificações semânticas no código, como tipos, variáveis não declaradas,
|
|
9
|
+
* divisão por zero, e outras validações em tempo de compilação.
|
|
10
|
+
*/
|
|
6
11
|
class AnalisadorSemanticoPotigol extends analisador_semantico_1.AnalisadorSemanticoBase {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
severidade: severidade,
|
|
14
|
-
});
|
|
12
|
+
constructor() {
|
|
13
|
+
super();
|
|
14
|
+
this.pilhaVariaveis = new analisador_semantico_1.PilhaVariaveis();
|
|
15
|
+
this.funcoes = {};
|
|
16
|
+
this.atual = 0;
|
|
17
|
+
this.diagnosticos = [];
|
|
15
18
|
}
|
|
16
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Verifica o tipo atribuído a uma variável na declaração
|
|
21
|
+
*/
|
|
22
|
+
verificarTipoAtribuido(declaracao) {
|
|
23
|
+
if (declaracao.tipo) {
|
|
24
|
+
if (['vetor', 'qualquer[]', 'inteiro[]', 'texto[]'].includes(declaracao.tipo)) {
|
|
25
|
+
if (declaracao.inicializador instanceof delegua_1.Vetor) {
|
|
26
|
+
const vetor = declaracao.inicializador;
|
|
27
|
+
const vetorSemSeparadores = vetor.valores.filter((v) => v.constructor !== delegua_1.Separador);
|
|
28
|
+
if (declaracao.tipo === 'inteiro[]') {
|
|
29
|
+
const apenasValores = vetorSemSeparadores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
|
|
30
|
+
if (apenasValores) {
|
|
31
|
+
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo vetor de inteiro ou real. Atual: ${vetor.tipo}.`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (declaracao.tipo === 'texto[]') {
|
|
35
|
+
const apenasValores = vetorSemSeparadores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
|
|
36
|
+
if (apenasValores) {
|
|
37
|
+
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo vetor de texto. Atual: ${vetor.tipo}.`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um vetor de elementos.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (declaracao.inicializador instanceof delegua_1.Literal) {
|
|
46
|
+
const literal = declaracao.inicializador;
|
|
47
|
+
if (declaracao.tipo === 'texto' && literal.tipo !== 'texto') {
|
|
48
|
+
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo texto. Atual: ${literal.tipo}.`);
|
|
49
|
+
}
|
|
50
|
+
if (['inteiro', 'número', 'real'].includes(declaracao.tipo) &&
|
|
51
|
+
!['inteiro', 'número', 'real'].includes(literal.tipo)) {
|
|
52
|
+
this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo número. Atual: ${literal.tipo}.`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
visitarExpressaoTipoDe(expressao) {
|
|
58
|
+
return this.verificarTipoDe(expressao.valor);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Verifica recursivamente o tipo de uma expressão
|
|
62
|
+
*/
|
|
63
|
+
verificarTipoDe(valor) {
|
|
64
|
+
switch (valor.constructor) {
|
|
65
|
+
case delegua_1.Agrupamento:
|
|
66
|
+
const valorAgrupamento = valor;
|
|
67
|
+
return this.verificarTipoDe(valorAgrupamento.expressao);
|
|
68
|
+
case delegua_1.Binario:
|
|
69
|
+
const valorBinario = valor;
|
|
70
|
+
this.verificarTipoDe(valorBinario.direita);
|
|
71
|
+
this.verificarTipoDe(valorBinario.esquerda);
|
|
72
|
+
break;
|
|
73
|
+
case delegua_1.Variavel:
|
|
74
|
+
const valorVariavel = valor;
|
|
75
|
+
return this.verificarVariavel(valorVariavel);
|
|
76
|
+
}
|
|
17
77
|
return Promise.resolve();
|
|
18
78
|
}
|
|
19
|
-
|
|
79
|
+
visitarExpressaoFalhar(expressao) {
|
|
80
|
+
return this.verificarFalhar(expressao.explicacao);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Verifica recursivamente a expressão de falha
|
|
84
|
+
*/
|
|
85
|
+
verificarFalhar(valor) {
|
|
86
|
+
if (valor instanceof delegua_1.Binario) {
|
|
87
|
+
this.verificarFalhar(valor.direita);
|
|
88
|
+
this.verificarFalhar(valor.esquerda);
|
|
89
|
+
}
|
|
90
|
+
if (valor instanceof delegua_1.Agrupamento) {
|
|
91
|
+
return this.verificarFalhar(valor.expressao);
|
|
92
|
+
}
|
|
93
|
+
if (valor instanceof delegua_1.Variavel) {
|
|
94
|
+
return this.verificarVariavel(valor);
|
|
95
|
+
}
|
|
20
96
|
return Promise.resolve();
|
|
21
97
|
}
|
|
22
|
-
|
|
98
|
+
/**
|
|
99
|
+
* Compara argumentos passados contra os parâmetros esperados de uma função
|
|
100
|
+
*/
|
|
101
|
+
comparacaoArgumentosContraParametrosFuncao(simboloFuncao, parametros, argumentos) {
|
|
102
|
+
if (parametros.length !== argumentos.length) {
|
|
103
|
+
this.erro(simboloFuncao, `Função '${simboloFuncao.lexema}' espera ${parametros.length} parâmetros. Atual: ${argumentos.length}.`);
|
|
104
|
+
}
|
|
105
|
+
for (let [indice, parametro] of parametros.entries()) {
|
|
106
|
+
const argumento = argumentos[indice];
|
|
107
|
+
if (argumento) {
|
|
108
|
+
if (parametro.tipoDado === 'texto' && argumento.tipo !== 'texto') {
|
|
109
|
+
this.erro(simboloFuncao, `O valor passado para o parâmetro '${parametro.nome.lexema}' (${parametro.tipoDado}) é diferente do esperado pela função (${argumento.tipo}).`);
|
|
110
|
+
}
|
|
111
|
+
else if (['inteiro', 'número', 'real'].includes(parametro.tipoDado)) {
|
|
112
|
+
// Conversões implícitas entre tipos numéricos são permitidas
|
|
113
|
+
if (!['inteiro', 'número', 'real'].includes(argumento.tipo)) {
|
|
114
|
+
this.erro(simboloFuncao, `O valor passado para o parâmetro '${parametro.nome.lexema}' (${parametro.tipoDado}) é diferente do esperado pela função (${argumento.tipo}).`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
visitarExpressaoDeChamada(expressao) {
|
|
121
|
+
// Marca argumentos como usados
|
|
122
|
+
for (const argumento of expressao.argumentos) {
|
|
123
|
+
if (argumento instanceof delegua_1.Variavel) {
|
|
124
|
+
this.gerenciadorEscopos.marcarComoUsada(argumento.simbolo.lexema);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
switch (expressao.entidadeChamada.constructor) {
|
|
128
|
+
case delegua_1.Variavel:
|
|
129
|
+
const entidadeChamadaVariavel = expressao.entidadeChamada;
|
|
130
|
+
const funcaoChamada = this.gerenciadorEscopos.buscar(entidadeChamadaVariavel.simbolo.lexema) ||
|
|
131
|
+
this.funcoes[entidadeChamadaVariavel.simbolo.lexema];
|
|
132
|
+
if (!funcaoChamada) {
|
|
133
|
+
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${entidadeChamadaVariavel.simbolo.lexema}' não existe.`);
|
|
134
|
+
return Promise.resolve();
|
|
135
|
+
}
|
|
136
|
+
const funcao = funcaoChamada.valor;
|
|
137
|
+
this.comparacaoArgumentosContraParametrosFuncao(entidadeChamadaVariavel.simbolo, funcao.parametros, expressao.argumentos);
|
|
138
|
+
break;
|
|
139
|
+
}
|
|
23
140
|
return Promise.resolve();
|
|
24
141
|
}
|
|
25
|
-
|
|
142
|
+
visitarExpressaoDeAtribuicao(expressao) {
|
|
143
|
+
let simboloAlvo;
|
|
144
|
+
switch (expressao.alvo.constructor) {
|
|
145
|
+
case delegua_1.Variavel:
|
|
146
|
+
const alvoVariavel = expressao.alvo;
|
|
147
|
+
simboloAlvo = alvoVariavel.simbolo;
|
|
148
|
+
break;
|
|
149
|
+
default:
|
|
150
|
+
return Promise.resolve();
|
|
151
|
+
}
|
|
152
|
+
const variavel = this.gerenciadorEscopos.buscar(simboloAlvo.lexema);
|
|
153
|
+
if (!variavel) {
|
|
154
|
+
this.erro(simboloAlvo, `Variável '${simboloAlvo.lexema}' ainda não foi declarada até este ponto.`);
|
|
155
|
+
return Promise.resolve();
|
|
156
|
+
}
|
|
157
|
+
if (variavel.imutavel) {
|
|
158
|
+
this.erro(simboloAlvo, `Constante '${simboloAlvo.lexema}' não pode ser modificada.`);
|
|
159
|
+
return Promise.resolve();
|
|
160
|
+
}
|
|
161
|
+
// Marca como inicializada após atribuição
|
|
162
|
+
this.gerenciadorEscopos.marcarComoInicializada(simboloAlvo.lexema, expressao.valor);
|
|
163
|
+
// Verificação de tipos
|
|
164
|
+
if (variavel.tipo) {
|
|
165
|
+
if (expressao.valor instanceof delegua_1.Literal && variavel.tipo.includes('[]')) {
|
|
166
|
+
this.erro(simboloAlvo, `Atribuição inválida, esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
167
|
+
return Promise.resolve();
|
|
168
|
+
}
|
|
169
|
+
if (expressao.valor instanceof delegua_1.Vetor && !variavel.tipo.includes('[]')) {
|
|
170
|
+
this.erro(simboloAlvo, `Atribuição inválida, esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
171
|
+
return Promise.resolve();
|
|
172
|
+
}
|
|
173
|
+
if (expressao.valor instanceof delegua_1.Literal) {
|
|
174
|
+
let valorLiteral = typeof expressao.valor.valor;
|
|
175
|
+
if (!['qualquer'].includes(variavel.tipo)) {
|
|
176
|
+
if (valorLiteral === 'string') {
|
|
177
|
+
if (variavel.tipo !== 'texto') {
|
|
178
|
+
this.erro(simboloAlvo, `Esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
179
|
+
return Promise.resolve();
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
if (valorLiteral === 'number') {
|
|
183
|
+
if (!['inteiro', 'número', 'real'].includes(variavel.tipo)) {
|
|
184
|
+
this.erro(simboloAlvo, `Esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
185
|
+
return Promise.resolve();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
if (expressao.valor instanceof delegua_1.Vetor) {
|
|
191
|
+
let valoresSemSeparador = expressao.valor.valores.filter((v) => v.constructor !== delegua_1.Separador);
|
|
192
|
+
if (!['qualquer[]'].includes(variavel.tipo)) {
|
|
193
|
+
if (variavel.tipo === 'texto[]') {
|
|
194
|
+
if (!valoresSemSeparador.every((v) => typeof v.valor === 'string')) {
|
|
195
|
+
this.erro(simboloAlvo, `Esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
196
|
+
return Promise.resolve();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (['inteiro[]', 'numero[]'].includes(variavel.tipo)) {
|
|
200
|
+
if (!valoresSemSeparador.every((v) => typeof v.valor === 'number')) {
|
|
201
|
+
this.erro(simboloAlvo, `Esperado tipo '${variavel.tipo}' na atribuição.`);
|
|
202
|
+
return Promise.resolve();
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
26
208
|
return Promise.resolve();
|
|
27
209
|
}
|
|
28
|
-
|
|
210
|
+
async visitarDeclaracaoDeExpressao(declaracao) {
|
|
211
|
+
return await declaracao.expressao.aceitar(this);
|
|
212
|
+
}
|
|
213
|
+
visitarDeclaracaoEscolha(declaracao) {
|
|
214
|
+
const identificadorOuLiteral = declaracao.identificadorOuLiteral;
|
|
215
|
+
const tipo = identificadorOuLiteral.tipo;
|
|
216
|
+
for (let caminho of declaracao.caminhos) {
|
|
217
|
+
for (let condicao of caminho.condicoes) {
|
|
218
|
+
switch (condicao.constructor) {
|
|
219
|
+
case delegua_1.Literal:
|
|
220
|
+
const condicaoLiteral = condicao;
|
|
221
|
+
if (condicaoLiteral.tipo !== tipo) {
|
|
222
|
+
this.erro({
|
|
223
|
+
lexema: condicaoLiteral.valor,
|
|
224
|
+
tipo: condicaoLiteral.tipo,
|
|
225
|
+
linha: condicaoLiteral.linha,
|
|
226
|
+
hashArquivo: condicaoLiteral.hashArquivo,
|
|
227
|
+
}, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
|
|
228
|
+
}
|
|
229
|
+
break;
|
|
230
|
+
case delegua_1.Variavel:
|
|
231
|
+
const condicaoVariavel = condicao;
|
|
232
|
+
this.verificarVariavel(condicaoVariavel);
|
|
233
|
+
const variavelHipotetica = this.gerenciadorEscopos.buscar(condicaoVariavel.simbolo.lexema);
|
|
234
|
+
if (variavelHipotetica && typeof variavelHipotetica.valor !== tipo) {
|
|
235
|
+
this.erro(condicaoVariavel.simbolo, `'caso ${condicaoVariavel.simbolo.lexema}:' não é do mesmo tipo esperado em 'escolha'`);
|
|
236
|
+
}
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
29
241
|
return Promise.resolve();
|
|
30
242
|
}
|
|
31
|
-
|
|
243
|
+
visitarDeclaracaoEnquanto(declaracao) {
|
|
244
|
+
return this.verificarCondicao(declaracao.condicao);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Verifica recursivamente uma condição
|
|
248
|
+
*/
|
|
249
|
+
verificarCondicao(condicao) {
|
|
250
|
+
if (condicao instanceof delegua_1.Agrupamento) {
|
|
251
|
+
return this.verificarCondicao(condicao.expressao);
|
|
252
|
+
}
|
|
253
|
+
if (condicao instanceof delegua_1.Variavel) {
|
|
254
|
+
return this.verificarVariavelBinaria(condicao);
|
|
255
|
+
}
|
|
256
|
+
if (condicao instanceof delegua_1.Binario) {
|
|
257
|
+
return this.verificarBinario(condicao);
|
|
258
|
+
}
|
|
259
|
+
if (condicao instanceof delegua_1.Logico) {
|
|
260
|
+
return this.verificarLogico(condicao);
|
|
261
|
+
}
|
|
262
|
+
if (condicao instanceof delegua_1.Chamada) {
|
|
263
|
+
return this.verificarChamada(condicao);
|
|
264
|
+
}
|
|
32
265
|
return Promise.resolve();
|
|
33
266
|
}
|
|
34
|
-
|
|
267
|
+
/**
|
|
268
|
+
* Verifica se uma variável é do tipo lógico/booleano
|
|
269
|
+
*/
|
|
270
|
+
verificarVariavelBinaria(variavel) {
|
|
271
|
+
this.verificarVariavel(variavel);
|
|
272
|
+
const variavelHipotetica = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
|
|
273
|
+
if (variavelHipotetica &&
|
|
274
|
+
!(variavelHipotetica.valor instanceof delegua_1.Binario) &&
|
|
275
|
+
typeof variavelHipotetica.valor !== 'boolean') {
|
|
276
|
+
this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
|
|
277
|
+
}
|
|
278
|
+
return Promise.resolve();
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Verifica se uma variável existe e foi inicializada
|
|
282
|
+
*/
|
|
283
|
+
verificarVariavel(variavel) {
|
|
284
|
+
const variavelEscopo = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
|
|
285
|
+
if (!variavelEscopo) {
|
|
286
|
+
this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' ainda não foi declarada até este ponto.`);
|
|
287
|
+
return Promise.resolve();
|
|
288
|
+
}
|
|
289
|
+
// Marca como usada
|
|
290
|
+
this.gerenciadorEscopos.marcarComoUsada(variavel.simbolo.lexema);
|
|
291
|
+
// Verifica se foi inicializada
|
|
292
|
+
if (!variavelEscopo.inicializada) {
|
|
293
|
+
this.aviso(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' pode não ter sido inicializada antes do uso.`);
|
|
294
|
+
}
|
|
295
|
+
return Promise.resolve();
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Verifica uma expressão binária recursivamente
|
|
299
|
+
*/
|
|
300
|
+
verificarBinario(binario) {
|
|
301
|
+
this.verificarExistenciaConstruto(binario.direita);
|
|
302
|
+
this.verificarExistenciaConstruto(binario.esquerda);
|
|
303
|
+
this.verificarOperadorBinario(binario);
|
|
35
304
|
return Promise.resolve();
|
|
36
305
|
}
|
|
306
|
+
/**
|
|
307
|
+
* Verifica operadores binários e seus operandos
|
|
308
|
+
*/
|
|
309
|
+
verificarOperadorBinario(binario) {
|
|
310
|
+
if (binario.esquerda instanceof delegua_1.Binario) {
|
|
311
|
+
this.verificarOperadorBinario(binario.esquerda);
|
|
312
|
+
}
|
|
313
|
+
if (binario.direita instanceof delegua_1.Binario) {
|
|
314
|
+
this.verificarOperadorBinario(binario.direita);
|
|
315
|
+
}
|
|
316
|
+
const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
|
|
317
|
+
if (operadoresMatematicos.includes(binario.operador.tipo)) {
|
|
318
|
+
this.verificarTiposOperandos(binario);
|
|
319
|
+
}
|
|
320
|
+
if (binario.operador.tipo === 'DIVISAO') {
|
|
321
|
+
this.verificarDivisaoPorZero(binario);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/**
|
|
325
|
+
* Verifica se os tipos dos operandos são compatíveis
|
|
326
|
+
*/
|
|
327
|
+
verificarTiposOperandos(binario) {
|
|
328
|
+
const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
|
|
329
|
+
const tipoDireita = this.obterTipoExpressao(binario.direita);
|
|
330
|
+
if (tipoEsquerda && tipoDireita && tipoEsquerda !== tipoDireita) {
|
|
331
|
+
// Verificar se são tipos numéricos compatíveis
|
|
332
|
+
const tiposNumericos = ['inteiro', 'número', 'real'];
|
|
333
|
+
const ambosNumericos = tiposNumericos.includes(tipoEsquerda) &&
|
|
334
|
+
tiposNumericos.includes(tipoDireita);
|
|
335
|
+
if (!ambosNumericos) {
|
|
336
|
+
this.aviso(binario.operador, `Operação entre tipos diferentes: tipo esquerdo '${tipoEsquerda}' e tipo direito '${tipoDireita}'. O resultado será resolvido implicitamente.`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Verifica divisão por zero em tempo de compilação
|
|
342
|
+
*/
|
|
343
|
+
verificarDivisaoPorZero(binario) {
|
|
344
|
+
const valorDireita = this.avaliarExpressaoConstante(binario.direita);
|
|
345
|
+
if (valorDireita === 0) {
|
|
346
|
+
this.erro(binario.operador, `Divisão por zero.`);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
|
|
351
|
+
* Retorna o valor se puder ser determinado, ou null caso contrário
|
|
352
|
+
*/
|
|
353
|
+
avaliarExpressaoConstante(expressao) {
|
|
354
|
+
if (expressao instanceof delegua_1.Literal) {
|
|
355
|
+
return expressao.valor;
|
|
356
|
+
}
|
|
357
|
+
if (expressao instanceof delegua_1.Variavel) {
|
|
358
|
+
const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
|
|
359
|
+
if (!variavel) {
|
|
360
|
+
return null;
|
|
361
|
+
}
|
|
362
|
+
if (variavel.imutavel && variavel.inicializada) {
|
|
363
|
+
return variavel.valor;
|
|
364
|
+
}
|
|
365
|
+
if (variavel.inicializada && variavel.valor !== undefined) {
|
|
366
|
+
return variavel.valor;
|
|
367
|
+
}
|
|
368
|
+
return null;
|
|
369
|
+
}
|
|
370
|
+
if (expressao instanceof delegua_1.Binario) {
|
|
371
|
+
const esquerda = this.avaliarExpressaoConstante(expressao.esquerda);
|
|
372
|
+
const direita = this.avaliarExpressaoConstante(expressao.direita);
|
|
373
|
+
if (esquerda !== null && direita !== null) {
|
|
374
|
+
return this.calcularOperacaoBinaria(expressao.operador.tipo, esquerda, direita);
|
|
375
|
+
}
|
|
376
|
+
}
|
|
377
|
+
if (expressao instanceof delegua_1.Agrupamento) {
|
|
378
|
+
return this.avaliarExpressaoConstante(expressao.expressao);
|
|
379
|
+
}
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Calcula o resultado de uma operação binária em tempo de compilação
|
|
384
|
+
*/
|
|
385
|
+
calcularOperacaoBinaria(operador, esquerda, direita) {
|
|
386
|
+
try {
|
|
387
|
+
switch (operador) {
|
|
388
|
+
case 'ADICAO':
|
|
389
|
+
return esquerda + direita;
|
|
390
|
+
case 'SUBTRACAO':
|
|
391
|
+
return esquerda - direita;
|
|
392
|
+
case 'MULTIPLICACAO':
|
|
393
|
+
return esquerda * direita;
|
|
394
|
+
case 'DIVISAO':
|
|
395
|
+
return esquerda / direita;
|
|
396
|
+
case 'MODULO':
|
|
397
|
+
return esquerda % direita;
|
|
398
|
+
case 'MAIOR':
|
|
399
|
+
return esquerda > direita;
|
|
400
|
+
case 'MAIOR_IGUAL':
|
|
401
|
+
return esquerda >= direita;
|
|
402
|
+
case 'MENOR':
|
|
403
|
+
return esquerda < direita;
|
|
404
|
+
case 'MENOR_IGUAL':
|
|
405
|
+
return esquerda <= direita;
|
|
406
|
+
case 'IGUAL':
|
|
407
|
+
return esquerda === direita;
|
|
408
|
+
case 'DIFERENTE':
|
|
409
|
+
return esquerda !== direita;
|
|
410
|
+
default:
|
|
411
|
+
return null;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
catch (e) {
|
|
415
|
+
return null;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Obtém o tipo de uma expressão
|
|
420
|
+
*/
|
|
421
|
+
obterTipoExpressao(expressao) {
|
|
422
|
+
if (expressao instanceof delegua_1.Literal) {
|
|
423
|
+
return expressao.tipo;
|
|
424
|
+
}
|
|
425
|
+
if (expressao instanceof delegua_1.Variavel) {
|
|
426
|
+
const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
|
|
427
|
+
return (variavel === null || variavel === void 0 ? void 0 : variavel.tipo) || null;
|
|
428
|
+
}
|
|
429
|
+
if (expressao instanceof delegua_1.Binario) {
|
|
430
|
+
return this.inferirTipoBinario(expressao);
|
|
431
|
+
}
|
|
432
|
+
if (expressao instanceof delegua_1.Agrupamento) {
|
|
433
|
+
return this.obterTipoExpressao(expressao.expressao);
|
|
434
|
+
}
|
|
435
|
+
return null;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Infere o tipo de resultado de uma operação binária
|
|
439
|
+
*/
|
|
440
|
+
inferirTipoBinario(binario) {
|
|
441
|
+
const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
|
|
442
|
+
const tipoDireita = this.obterTipoExpressao(binario.direita);
|
|
443
|
+
if (!tipoEsquerda || !tipoDireita) {
|
|
444
|
+
return null;
|
|
445
|
+
}
|
|
446
|
+
const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
|
|
447
|
+
const operadoresComparacao = ['MAIOR', 'MAIOR_IGUAL', 'MENOR', 'MENOR_IGUAL', 'IGUAL', 'DIFERENTE'];
|
|
448
|
+
if (operadoresComparacao.includes(binario.operador.tipo)) {
|
|
449
|
+
return 'lógico';
|
|
450
|
+
}
|
|
451
|
+
if (operadoresMatematicos.includes(binario.operador.tipo)) {
|
|
452
|
+
const tiposNumericos = ['inteiro', 'número', 'real'];
|
|
453
|
+
if (tiposNumericos.includes(tipoEsquerda) && tiposNumericos.includes(tipoDireita)) {
|
|
454
|
+
if (tipoEsquerda === 'real' || tipoDireita === 'real') {
|
|
455
|
+
return 'real';
|
|
456
|
+
}
|
|
457
|
+
return 'número';
|
|
458
|
+
}
|
|
459
|
+
if (tipoEsquerda === 'texto' || tipoDireita === 'texto') {
|
|
460
|
+
return 'texto';
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return 'qualquer';
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Verifica se um construto existe (principalmente variáveis)
|
|
467
|
+
*/
|
|
468
|
+
verificarExistenciaConstruto(construto) {
|
|
469
|
+
if (construto instanceof delegua_1.Variavel) {
|
|
470
|
+
if (!this.gerenciadorEscopos.buscar(construto.simbolo.lexema)) {
|
|
471
|
+
this.erro(construto.simbolo, `Variável ${construto.simbolo.lexema} ainda não foi declarada até este ponto.`);
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
this.gerenciadorEscopos.marcarComoUsada(construto.simbolo.lexema);
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
if (construto instanceof delegua_1.Binario) {
|
|
478
|
+
this.verificarBinario(construto);
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Verifica uma expressão lógica
|
|
483
|
+
*/
|
|
484
|
+
verificarLogico(logico) {
|
|
485
|
+
this.verificarLadoLogico(logico.direita);
|
|
486
|
+
this.verificarLadoLogico(logico.esquerda);
|
|
487
|
+
return Promise.resolve();
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Verifica uma chamada de função
|
|
491
|
+
*/
|
|
492
|
+
verificarChamada(chamada) {
|
|
493
|
+
switch (chamada.entidadeChamada.constructor) {
|
|
494
|
+
case delegua_1.Variavel:
|
|
495
|
+
let entidadeChamadaVariavel = chamada.entidadeChamada;
|
|
496
|
+
if (!this.funcoes[entidadeChamadaVariavel.simbolo.lexema]) {
|
|
497
|
+
this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${entidadeChamadaVariavel.simbolo.lexema}' não existe.`);
|
|
498
|
+
}
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
return Promise.resolve();
|
|
502
|
+
}
|
|
503
|
+
/**
|
|
504
|
+
* Verifica o lado de uma expressão lógica
|
|
505
|
+
*/
|
|
506
|
+
verificarLadoLogico(lado) {
|
|
507
|
+
if (lado instanceof delegua_1.Variavel) {
|
|
508
|
+
let variavel = lado;
|
|
509
|
+
this.verificarVariavelBinaria(variavel);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
/**
|
|
513
|
+
* Verifica interpolações de texto e marca variáveis como usadas
|
|
514
|
+
*/
|
|
515
|
+
verificarInterpolacaoTexto(texto, literal) {
|
|
516
|
+
// Regex para encontrar ${identificador}
|
|
517
|
+
const regexInterpolacao = /\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
|
|
518
|
+
let match;
|
|
519
|
+
while ((match = regexInterpolacao.exec(texto)) !== null) {
|
|
520
|
+
const nomeVariavel = match[1];
|
|
521
|
+
const variavel = this.gerenciadorEscopos.buscar(nomeVariavel);
|
|
522
|
+
const funcao = this.funcoes[nomeVariavel];
|
|
523
|
+
if (!variavel && !funcao) {
|
|
524
|
+
this.erro({
|
|
525
|
+
lexema: nomeVariavel,
|
|
526
|
+
tipo: 'IDENTIFICADOR',
|
|
527
|
+
linha: literal.linha,
|
|
528
|
+
hashArquivo: literal.hashArquivo
|
|
529
|
+
}, `Variável '${nomeVariavel}' usada em interpolação não foi declarada.`);
|
|
530
|
+
}
|
|
531
|
+
else if (variavel) {
|
|
532
|
+
this.gerenciadorEscopos.marcarComoUsada(nomeVariavel);
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
visitarDeclaracaoEscreva(declaracao) {
|
|
537
|
+
for (const argumento of declaracao.argumentos) {
|
|
538
|
+
if (argumento instanceof delegua_1.Literal && typeof argumento.valor === 'string') {
|
|
539
|
+
this.verificarInterpolacaoTexto(argumento.valor, argumento);
|
|
540
|
+
}
|
|
541
|
+
if (argumento instanceof delegua_1.Variavel) {
|
|
542
|
+
this.verificarVariavel(argumento);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
return Promise.resolve();
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Verifica variáveis não usadas no escopo atual
|
|
549
|
+
*/
|
|
550
|
+
verificarVariaveisNaoUsadas() {
|
|
551
|
+
const variaveisNaoUsadas = this.gerenciadorEscopos.obterVariaveisNaoUsadas();
|
|
552
|
+
for (const variavel of variaveisNaoUsadas) {
|
|
553
|
+
this.aviso({
|
|
554
|
+
lexema: variavel.nome,
|
|
555
|
+
tipo: 'IDENTIFICADOR',
|
|
556
|
+
linha: variavel.linha,
|
|
557
|
+
hashArquivo: variavel.hashArquivo
|
|
558
|
+
}, `Variável '${variavel.nome}' foi declarada mas nunca foi usada.`);
|
|
559
|
+
}
|
|
560
|
+
}
|
|
37
561
|
visitarDeclaracaoConst(declaracao) {
|
|
38
|
-
this.
|
|
562
|
+
this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
|
|
563
|
+
nome: declaracao.simbolo.lexema,
|
|
39
564
|
tipo: declaracao.tipo,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
565
|
+
imutavel: true,
|
|
566
|
+
valor: declaracao.inicializador,
|
|
567
|
+
inicializada: declaracao.inicializador !== undefined,
|
|
568
|
+
usada: false,
|
|
569
|
+
hashArquivo: declaracao.simbolo.hashArquivo,
|
|
570
|
+
linha: declaracao.simbolo.linha
|
|
571
|
+
});
|
|
572
|
+
if (declaracao.inicializador) {
|
|
573
|
+
this.verificarTipoAtribuido(declaracao);
|
|
574
|
+
}
|
|
45
575
|
return Promise.resolve();
|
|
46
576
|
}
|
|
47
577
|
visitarDeclaracaoVar(declaracao) {
|
|
48
|
-
this.
|
|
578
|
+
this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
|
|
579
|
+
nome: declaracao.simbolo.lexema,
|
|
49
580
|
tipo: declaracao.tipo,
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
581
|
+
imutavel: false,
|
|
582
|
+
valor: declaracao.inicializador,
|
|
583
|
+
inicializada: declaracao.inicializador !== undefined,
|
|
584
|
+
usada: false,
|
|
585
|
+
hashArquivo: declaracao.simbolo.hashArquivo,
|
|
586
|
+
linha: declaracao.simbolo.linha
|
|
587
|
+
});
|
|
588
|
+
if (declaracao.inicializador) {
|
|
589
|
+
this.verificarTipoAtribuido(declaracao);
|
|
590
|
+
}
|
|
55
591
|
return Promise.resolve();
|
|
56
592
|
}
|
|
57
593
|
visitarExpressaoDeVariavel(expressao) {
|
|
58
|
-
if (
|
|
59
|
-
this.
|
|
594
|
+
if (expressao instanceof delegua_1.Variavel) {
|
|
595
|
+
this.verificarVariavel(expressao);
|
|
60
596
|
}
|
|
61
597
|
return Promise.resolve();
|
|
62
598
|
}
|
|
63
|
-
|
|
64
|
-
|
|
599
|
+
// Visitadores específicos do Potigol
|
|
600
|
+
visitarDeclaracaoLeiaInteiro(declaracao) {
|
|
601
|
+
return Promise.resolve();
|
|
602
|
+
}
|
|
603
|
+
visitarDeclaracaoLeiaInteiros(declaracao) {
|
|
604
|
+
return Promise.resolve();
|
|
605
|
+
}
|
|
606
|
+
visitarDeclaracaoLeiaReais(declaracao) {
|
|
607
|
+
return Promise.resolve();
|
|
608
|
+
}
|
|
609
|
+
visitarDeclaracaoLeiaReal(declaracao) {
|
|
610
|
+
return Promise.resolve();
|
|
611
|
+
}
|
|
612
|
+
visitarDeclaracaoLeiaTexto(declaracao) {
|
|
613
|
+
return Promise.resolve();
|
|
614
|
+
}
|
|
615
|
+
visitarDeclaracaoLeiaTextos(declaracao) {
|
|
616
|
+
return Promise.resolve();
|
|
617
|
+
}
|
|
618
|
+
visitarExpressaoBinaria(expressao) {
|
|
619
|
+
this.verificarExistenciaConstruto(expressao.direita);
|
|
620
|
+
this.verificarExistenciaConstruto(expressao.esquerda);
|
|
621
|
+
this.verificarOperadorBinario(expressao);
|
|
622
|
+
return Promise.resolve();
|
|
623
|
+
}
|
|
624
|
+
visitarDeclaracaoReatribuicaoVariavel(declaracao) {
|
|
625
|
+
// Verifica se a variável existe
|
|
626
|
+
const variavel = this.gerenciadorEscopos.buscar(declaracao.simbolo.lexema);
|
|
627
|
+
if (!variavel) {
|
|
628
|
+
this.erro(declaracao.simbolo, `Variável '${declaracao.simbolo.lexema}' ainda não foi declarada até este ponto.`);
|
|
629
|
+
}
|
|
630
|
+
else if (variavel.imutavel) {
|
|
631
|
+
this.erro(declaracao.simbolo, `Constante '${declaracao.simbolo.lexema}' não pode ser modificada.`);
|
|
632
|
+
}
|
|
633
|
+
// Marca variáveis usadas na expressão de inicialização
|
|
634
|
+
if (declaracao.inicializador) {
|
|
635
|
+
this.marcarVariaveisUsadasEmExpressao(declaracao.inicializador);
|
|
636
|
+
}
|
|
637
|
+
// Marca como inicializada
|
|
638
|
+
if (declaracao.inicializador) {
|
|
639
|
+
this.gerenciadorEscopos.marcarComoInicializada(declaracao.simbolo.lexema, declaracao.inicializador);
|
|
640
|
+
}
|
|
641
|
+
return Promise.resolve();
|
|
65
642
|
}
|
|
643
|
+
/**
|
|
644
|
+
* Método principal de análise semântica
|
|
645
|
+
*/
|
|
66
646
|
analisar(declaracoes) {
|
|
67
|
-
|
|
647
|
+
// Reinicia o gerenciador de escopos
|
|
648
|
+
this.gerenciadorEscopos = new analisador_semantico_1.GerenciadorEscopos();
|
|
649
|
+
this.funcoes = {};
|
|
68
650
|
this.atual = 0;
|
|
69
651
|
this.diagnosticos = [];
|
|
70
652
|
while (this.atual < declaracoes.length) {
|
|
71
653
|
declaracoes[this.atual].aceitar(this);
|
|
72
654
|
this.atual++;
|
|
73
655
|
}
|
|
656
|
+
// Verifica variáveis não usadas ao final da análise
|
|
657
|
+
this.verificarVariaveisNaoUsadas();
|
|
74
658
|
return {
|
|
75
659
|
diagnosticos: this.diagnosticos,
|
|
76
660
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analisador-semantico-potigol.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-potigol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analisador-semantico-potigol.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-potigol.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@designliquido/potigol",
|
|
3
3
|
"description": "Dialeto de Potigol baseado em Delégua e TypeScript",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.6.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"bugs": {
|
|
7
7
|
"url": "https://github.com/DesignLiquido/potigol/issues"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"typescript": "^5.9.2"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@designliquido/delegua": "
|
|
46
|
+
"@designliquido/delegua": "0.65.0",
|
|
47
47
|
"lodash": "^4.17.21"
|
|
48
48
|
}
|
|
49
49
|
}
|