@designliquido/mapler 0.3.7 → 0.4.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.
@@ -1,18 +1,17 @@
1
- import { Atribuir } from '@designliquido/delegua/construtos';
2
- import { Declaracao, Expressao, Retorna, Var } from '@designliquido/delegua/declaracoes';
3
- import { SimboloInterface } from '@designliquido/delegua/interfaces';
1
+ import { ArgumentoReferenciaFuncao, Atribuir, Chamada, Construto, FormatacaoEscrita, Literal, ReferenciaFuncao, TipoDe, Variavel } from '@designliquido/delegua/construtos';
2
+ import { Const, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, FuncaoDeclaracao, Retorna, Var } from '@designliquido/delegua/declaracoes';
3
+ import { ParametroInterface, SimboloInterface } from '@designliquido/delegua/interfaces';
4
4
  import { DiagnosticoAnalisadorSemantico } from '@designliquido/delegua/interfaces/erros';
5
5
  import { FuncaoHipoteticaInterface } from '@designliquido/delegua/interfaces/funcao-hipotetica-interface';
6
6
  import { RetornoAnalisadorSemantico } from '@designliquido/delegua/interfaces/retornos/retorno-analisador-semantico';
7
- import { VariavelHipoteticaInterface } from '@designliquido/delegua/interfaces/variavel-hipotetica-interface';
8
7
  import { RetornoQuebra } from '@designliquido/delegua/quebras';
9
8
  import { AnalisadorSemanticoBase } from '@designliquido/delegua/analisador-semantico/analisador-semantico-base';
10
9
  import { PilhaVariaveis } from '@designliquido/delegua/analisador-semantico/pilha-variaveis';
10
+ /**
11
+ * O Analisador Semântico de Mapler, baseado no Analisador Semântico de Delégua.
12
+ */
11
13
  export declare class AnalisadorSemanticoMapler extends AnalisadorSemanticoBase {
12
14
  pilhaVariaveis: PilhaVariaveis;
13
- variaveis: {
14
- [nomeVariavel: string]: VariavelHipoteticaInterface;
15
- };
16
15
  funcoes: {
17
16
  [nomeFuncao: string]: FuncaoHipoteticaInterface;
18
17
  };
@@ -21,10 +20,66 @@ export declare class AnalisadorSemanticoMapler extends AnalisadorSemanticoBase {
21
20
  constructor();
22
21
  erro(simbolo: SimboloInterface, mensagem: string): void;
23
22
  aviso(simbolo: SimboloInterface, mensagem: string): void;
23
+ verificarTipoAtribuido(declaracao: Var | Const): void;
24
+ visitarExpressaoTipoDe(expressao: TipoDe): Promise<any>;
25
+ private verificarTipoDe;
26
+ visitarExpressaoFalhar(expressao: Falhar): Promise<any>;
27
+ private verificarFalhar;
28
+ protected comparacaoArgumentosContraParametrosFuncao(simboloFuncao: SimboloInterface, parametros: ParametroInterface[], argumentos: Construto[]): void;
29
+ visitarChamadaPorArgumentoReferenciaFuncao(argumentoReferenciaFuncao: ArgumentoReferenciaFuncao, argumentos: Construto[]): void;
30
+ visitarChamadaPorReferenciaFuncao(referenciaFuncao: ReferenciaFuncao, argumentos: Construto[]): void;
31
+ visitarChamadaPorVariavel(entidadeChamadaVariavel: Variavel, argumentos: Construto[]): Promise<void>;
32
+ visitarExpressaoDeChamada(expressao: Chamada): Promise<void>;
24
33
  visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
25
34
  visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<any>;
35
+ visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
36
+ visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
37
+ private verificarCondicao;
38
+ private verificarVariavelBinaria;
39
+ private verificarVariavel;
40
+ private verificarBinario;
41
+ private verificarOperadorBinario;
42
+ /**
43
+ * Verifica se os tipos dos operandos são compatíveis
44
+ */
45
+ private verificarTiposOperandos;
46
+ /**
47
+ * Verifica divisão por zero recursivamente
48
+ */
49
+ private verificarDivisaoPorZero;
50
+ /**
51
+ * Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
52
+ * Retorna o valor se puder ser determinado, ou null caso contrário
53
+ */
54
+ private avaliarExpressaoConstante;
55
+ /**
56
+ * Calcula o resultado de uma operação binária em tempo de compilação
57
+ */
58
+ private calcularOperacaoBinaria;
59
+ /**
60
+ * Obtém o tipo de uma expressão (pode ser Literal, Variavel, ou Binario)
61
+ */
62
+ private obterTipoExpressao;
63
+ /**
64
+ * Infere o tipo de resultado de uma operação binária
65
+ */
66
+ private inferirTipoBinario;
67
+ private verificarExistenciaConstruto;
68
+ private verificarLogico;
69
+ private verificarChamada;
70
+ private verificarLadoLogico;
71
+ /**
72
+ * Verifica interpolações de texto e marca variáveis como usadas
73
+ */
74
+ protected verificarInterpolacaoTexto(texto: string, literal: Literal): void;
75
+ visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
76
+ visitarDeclaracaoConst(declaracao: Const): Promise<any>;
26
77
  visitarDeclaracaoVar(declaracao: Var): Promise<any>;
78
+ visitarExpressaoFormatacaoEscrita(expressao: FormatacaoEscrita): Promise<any>;
27
79
  visitarExpressaoRetornar(declaracao: Retorna): Promise<RetornoQuebra>;
80
+ visitarExpressaoDeVariavel(expressao: Variavel | Construto): Promise<any>;
81
+ visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<any>;
82
+ verificarVariaveisNaoUsadas(): void;
28
83
  analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
29
84
  }
30
85
  //# sourceMappingURL=analisador-semantico-mapler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analisador-semantico-mapler.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-mapler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAA4B,MAAM,mCAAmC,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAyB,MAAM,yCAAyC,CAAC;AAChH,OAAO,EAAE,yBAAyB,EAAE,MAAM,+DAA+D,CAAC;AAC1G,OAAO,EAAE,0BAA0B,EAAE,MAAM,yEAAyE,CAAC;AACrH,OAAO,EAAE,2BAA2B,EAAE,MAAM,iEAAiE,CAAC;AAC9G,OAAO,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uEAAuE,CAAC;AAChH,OAAO,EAAE,cAAc,EAAE,MAAM,6DAA6D,CAAC;AAG7F,qBAAa,yBAA0B,SAAQ,uBAAuB;IAClE,cAAc,EAAE,cAAc,CAAC;IAC/B,SAAS,EAAE;QAAE,CAAC,YAAY,EAAE,MAAM,GAAG,2BAA2B,CAAA;KAAE,CAAC;IACnE,OAAO,EAAE;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,yBAAyB,CAAA;KAAE,CAAC;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,8BAA8B,EAAE,CAAC;;IAW/C,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUvD,KAAK,CAAC,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAUxD,4BAA4B,CAAC,SAAS,EAAE,QAAQ;IAyDhD,4BAA4B,CAAC,UAAU,EAAE,SAAS;IAIlD,oBAAoB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAgBnD,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAIrE,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,0BAA0B;CAclE"}
1
+ {"version":3,"file":"analisador-semantico-mapler.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-mapler.ts"],"names":[],"mappings":"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"}
@@ -2,14 +2,19 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AnalisadorSemanticoMapler = void 0;
4
4
  const construtos_1 = require("@designliquido/delegua/construtos");
5
+ const declaracoes_1 = require("@designliquido/delegua/declaracoes");
5
6
  const erros_1 = require("@designliquido/delegua/interfaces/erros");
6
7
  const analisador_semantico_base_1 = require("@designliquido/delegua/analisador-semantico/analisador-semantico-base");
8
+ const gerenciador_escopos_1 = require("@designliquido/delegua/analisador-semantico/gerenciador-escopos");
7
9
  const pilha_variaveis_1 = require("@designliquido/delegua/analisador-semantico/pilha-variaveis");
10
+ /**
11
+ * O Analisador Semântico de Mapler, baseado no Analisador Semântico de Delégua.
12
+ */
8
13
  class AnalisadorSemanticoMapler extends analisador_semantico_base_1.AnalisadorSemanticoBase {
9
14
  constructor() {
10
15
  super();
11
16
  this.pilhaVariaveis = new pilha_variaveis_1.PilhaVariaveis();
12
- this.variaveis = {};
17
+ this.gerenciadorEscopos = new gerenciador_escopos_1.GerenciadorEscopos();
13
18
  this.funcoes = {};
14
19
  this.atual = 0;
15
20
  this.diagnosticos = [];
@@ -32,19 +37,179 @@ class AnalisadorSemanticoMapler extends analisador_semantico_base_1.AnalisadorSe
32
37
  severidade: erros_1.DiagnosticoSeveridade.AVISO,
33
38
  });
34
39
  }
40
+ verificarTipoAtribuido(declaracao) {
41
+ if (!declaracao.inicializador) {
42
+ return;
43
+ }
44
+ if (declaracao.tipo) {
45
+ if (['vetor', 'qualquer[]', 'inteiro[]', 'texto[]'].includes(declaracao.tipo)) {
46
+ if (declaracao.inicializador instanceof construtos_1.Vetor) {
47
+ const vetor = declaracao.inicializador;
48
+ const vetorSemSeparadores = vetor.valores.filter((v) => v.constructor !== construtos_1.Separador);
49
+ if (declaracao.tipo === 'inteiro[]') {
50
+ const apenasValores = vetorSemSeparadores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
51
+ if (apenasValores) {
52
+ 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}.`);
53
+ }
54
+ }
55
+ if (declaracao.tipo === 'texto[]') {
56
+ const apenasValores = vetorSemSeparadores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
57
+ if (apenasValores) {
58
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo vetor de texto. Atual: ${vetor.tipo}.`);
59
+ }
60
+ }
61
+ }
62
+ else {
63
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um vetor de elementos.`);
64
+ }
65
+ }
66
+ if (declaracao.inicializador instanceof construtos_1.Literal) {
67
+ const literal = declaracao.inicializador;
68
+ // Não verifica se o literal é do tipo 'qualquer' (usado para inicializadores implícitos)
69
+ if (literal.tipo === 'qualquer') {
70
+ return;
71
+ }
72
+ if (declaracao.tipo === 'texto' && literal.tipo !== 'texto') {
73
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo texto. Atual: ${literal.tipo}.`);
74
+ }
75
+ if (['inteiro', 'número', 'real'].includes(declaracao.tipo) &&
76
+ !['inteiro', 'número', 'real'].includes(literal.tipo)) {
77
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo número. Atual: ${literal.tipo}.`);
78
+ }
79
+ }
80
+ if (declaracao.inicializador instanceof construtos_1.Leia) {
81
+ if (!['qualquer', 'texto'].includes(declaracao.tipo)) {
82
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}', Função 'leia()' sempre retorna 'texto'.`);
83
+ }
84
+ }
85
+ }
86
+ }
87
+ visitarExpressaoTipoDe(expressao) {
88
+ return this.verificarTipoDe(expressao.valor);
89
+ }
90
+ verificarTipoDe(valor) {
91
+ switch (valor.constructor) {
92
+ case construtos_1.Agrupamento:
93
+ const valorAgrupamento = valor;
94
+ return this.verificarTipoDe(valorAgrupamento.expressao);
95
+ case construtos_1.Binario:
96
+ const valorBinario = valor;
97
+ this.verificarTipoDe(valorBinario.direita);
98
+ this.verificarTipoDe(valorBinario.esquerda);
99
+ break;
100
+ case construtos_1.Variavel:
101
+ const valorVariavel = valor;
102
+ return this.verificarVariavel(valorVariavel);
103
+ }
104
+ return Promise.resolve();
105
+ }
106
+ visitarExpressaoFalhar(expressao) {
107
+ return this.verificarFalhar(expressao.explicacao);
108
+ }
109
+ verificarFalhar(valor) {
110
+ if (valor instanceof construtos_1.Binario) {
111
+ this.verificarFalhar(valor.direita);
112
+ this.verificarFalhar(valor.esquerda);
113
+ }
114
+ if (valor instanceof construtos_1.Agrupamento) {
115
+ return this.verificarFalhar(valor.expressao);
116
+ }
117
+ if (valor instanceof construtos_1.Variavel) {
118
+ return this.verificarVariavel(valor);
119
+ }
120
+ return Promise.resolve();
121
+ }
122
+ comparacaoArgumentosContraParametrosFuncao(simboloFuncao, parametros, argumentos) {
123
+ if (parametros.length !== argumentos.length) {
124
+ this.erro(simboloFuncao, `Função '${simboloFuncao.lexema}' espera ${parametros.length} parâmetros. Atual: ${argumentos.length}.`);
125
+ }
126
+ for (let [indice, parametro] of parametros.entries()) {
127
+ // TODO: `argumento` pode ser Literal (tipo já resolvido) ou variável (tipo inferido em outra etapa).
128
+ const argumento = argumentos[indice];
129
+ if (argumento) {
130
+ if (parametro.tipoDado === 'texto' && argumento.tipo !== 'texto') {
131
+ this.erro(simboloFuncao, `O valor passado para o parâmetro '${parametro.nome.lexema}' (${parametro.tipoDado}) é diferente do esperado pela função (${argumento.tipo}).`);
132
+ }
133
+ else if (['inteiro', 'número', 'real'].includes(parametro.tipoDado)) {
134
+ // Aqui, se houver diferença entre os tipos do parâmetro e do argumento, não há erro,
135
+ // porque Delégua pode trabalhar com conversões implícitas.
136
+ // Isso pode ou não mudar no futuro.
137
+ if (!['inteiro', 'número', 'real'].includes(argumento.tipo)) {
138
+ this.erro(simboloFuncao, `O valor passado para o parâmetro '${parametro.nome.lexema}' (${parametro.tipoDado}) é diferente do esperado pela função (${argumento.tipo}).`);
139
+ }
140
+ }
141
+ }
142
+ }
143
+ }
144
+ visitarChamadaPorArgumentoReferenciaFuncao(argumentoReferenciaFuncao, argumentos) {
145
+ var _a;
146
+ const variavelCorrespondente = (_a = this.gerenciadorEscopos.buscar(argumentoReferenciaFuncao.simboloFuncao.lexema)) === null || _a === void 0 ? void 0 : _a.valor;
147
+ if (!variavelCorrespondente) {
148
+ return;
149
+ }
150
+ this.comparacaoArgumentosContraParametrosFuncao(argumentoReferenciaFuncao.simboloFuncao, variavelCorrespondente.parametros, argumentos);
151
+ }
152
+ visitarChamadaPorReferenciaFuncao(referenciaFuncao, argumentos) {
153
+ const funcaoCorrespondente = this.funcoes[referenciaFuncao.simboloFuncao.lexema];
154
+ if (!funcaoCorrespondente) {
155
+ return;
156
+ }
157
+ this.comparacaoArgumentosContraParametrosFuncao(referenciaFuncao.simboloFuncao, funcaoCorrespondente.valor.parametros, argumentos);
158
+ }
159
+ visitarChamadaPorVariavel(entidadeChamadaVariavel, argumentos) {
160
+ const variavel = entidadeChamadaVariavel;
161
+ const funcaoChamada = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema) || this.funcoes[variavel.simbolo.lexema];
162
+ if (!funcaoChamada) {
163
+ this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${entidadeChamadaVariavel.simbolo.lexema}' não existe.`);
164
+ return Promise.resolve();
165
+ }
166
+ const funcao = funcaoChamada.valor;
167
+ this.comparacaoArgumentosContraParametrosFuncao(entidadeChamadaVariavel.simbolo, funcao.parametros, argumentos);
168
+ }
169
+ visitarExpressaoDeChamada(expressao) {
170
+ for (const argumento of expressao.argumentos) {
171
+ if (argumento instanceof construtos_1.Variavel) {
172
+ this.gerenciadorEscopos.marcarComoUsada(argumento.simbolo.lexema);
173
+ }
174
+ }
175
+ switch (expressao.entidadeChamada.constructor) {
176
+ case construtos_1.ArgumentoReferenciaFuncao:
177
+ const entidadeChamadaArgumentoReferenciaFuncao = expressao.entidadeChamada;
178
+ this.visitarChamadaPorArgumentoReferenciaFuncao(entidadeChamadaArgumentoReferenciaFuncao, expressao.argumentos);
179
+ break;
180
+ case construtos_1.ReferenciaFuncao:
181
+ const entidadeChamadaReferenciaFuncao = expressao.entidadeChamada;
182
+ this.visitarChamadaPorReferenciaFuncao(entidadeChamadaReferenciaFuncao, expressao.argumentos);
183
+ break;
184
+ case construtos_1.Variavel:
185
+ const entidadeChamadaVariavel = expressao.entidadeChamada;
186
+ this.visitarChamadaPorVariavel(entidadeChamadaVariavel, expressao.argumentos);
187
+ break;
188
+ }
189
+ return Promise.resolve();
190
+ }
35
191
  visitarExpressaoDeAtribuicao(expressao) {
36
- // TODO: Readaptar para trabalhar com `expressao.alvo` sendo um construto.
37
192
  let simboloAlvo;
38
- switch (expressao.alvo.constructor.name) {
39
- case 'Variavel':
193
+ switch (expressao.alvo.constructor) {
194
+ case construtos_1.Variavel:
40
195
  const alvoVariavel = expressao.alvo;
41
196
  simboloAlvo = alvoVariavel.simbolo;
42
197
  break;
43
198
  default:
44
- // throw new Error(`Implementar atribuição para ${expressao.alvo.constructor.name}.`);
45
199
  return Promise.resolve();
46
200
  }
47
- let valor = this.variaveis[simboloAlvo.lexema];
201
+ const variavel = this.gerenciadorEscopos.buscar(simboloAlvo.lexema);
202
+ if (!variavel) {
203
+ this.erro(simboloAlvo, `Variável '${simboloAlvo.lexema}' ainda não foi declarada até este ponto.`);
204
+ return Promise.resolve();
205
+ }
206
+ if (variavel.imutavel) {
207
+ this.erro(simboloAlvo, `Constante '${simboloAlvo.lexema}' não pode ser modificada.`);
208
+ return Promise.resolve();
209
+ }
210
+ // Marca como inicializada após atribuição
211
+ this.gerenciadorEscopos.marcarComoInicializada(simboloAlvo.lexema, expressao.valor);
212
+ let valor = this.gerenciadorEscopos.buscar(simboloAlvo.lexema);
48
213
  if (!valor) {
49
214
  this.erro(simboloAlvo, `Variável ${simboloAlvo.lexema} ainda não foi declarada até este ponto.`);
50
215
  return Promise.resolve();
@@ -68,45 +233,520 @@ class AnalisadorSemanticoMapler extends analisador_semantico_base_1.AnalisadorSe
68
233
  }
69
234
  }
70
235
  if (valorLiteral === 'number') {
71
- if (!['inteiro', 'real'].includes(valor.tipo)) {
236
+ if (!['inteiro', 'número', 'real'].includes(valor.tipo)) {
237
+ this.erro(simboloAlvo, `Esperado tipo '${valor.tipo}' na atribuição.`);
238
+ return Promise.resolve();
239
+ }
240
+ }
241
+ }
242
+ }
243
+ if (expressao.valor instanceof construtos_1.Vetor) {
244
+ let valoresSemSeparador = expressao.valor.valores.filter((v) => v.constructor !== construtos_1.Separador);
245
+ if (!['qualquer[]'].includes(valor.tipo)) {
246
+ if (valor.tipo === 'texto[]') {
247
+ if (!valoresSemSeparador.every((v) => typeof v.valor === 'string')) {
72
248
  this.erro(simboloAlvo, `Esperado tipo '${valor.tipo}' na atribuição.`);
73
249
  return Promise.resolve();
74
250
  }
75
251
  }
252
+ if (['inteiro[]', 'numero[]'].includes(valor.tipo)) {
253
+ if (!valoresSemSeparador.every((v) => typeof v.valor === 'number')) {
254
+ this.erro(simboloAlvo, `Esperado tipo '${valor.tipo}' na atribuição.`);
255
+ return Promise.resolve();
256
+ }
257
+ }
258
+ }
259
+ }
260
+ }
261
+ }
262
+ async visitarDeclaracaoDeExpressao(declaracao) {
263
+ return await declaracao.expressao.aceitar(this);
264
+ }
265
+ visitarDeclaracaoEscolha(declaracao) {
266
+ const identificadorOuLiteral = declaracao.identificadorOuLiteral;
267
+ const tipo = identificadorOuLiteral.tipo;
268
+ for (let caminho of declaracao.caminhos) {
269
+ for (let condicao of caminho.condicoes) {
270
+ switch (condicao.constructor) {
271
+ case construtos_1.Literal:
272
+ const condicaoLiteral = condicao;
273
+ if (condicaoLiteral.tipo !== tipo) {
274
+ this.erro({
275
+ lexema: condicaoLiteral.valor,
276
+ tipo: condicaoLiteral.tipo,
277
+ linha: condicaoLiteral.linha,
278
+ hashArquivo: condicaoLiteral.hashArquivo,
279
+ }, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
280
+ }
281
+ break;
282
+ case construtos_1.Variavel:
283
+ const condicaoVariavel = condicao;
284
+ this.verificarVariavel(condicaoVariavel);
285
+ const variavelHipotetica = this.gerenciadorEscopos.buscar(condicaoVariavel.simbolo.lexema);
286
+ if (variavelHipotetica && typeof variavelHipotetica.valor !== tipo) {
287
+ this.erro(condicaoVariavel.simbolo, `'caso ${condicaoVariavel.simbolo.lexema}:' não é do mesmo tipo esperado em 'escolha'`);
288
+ }
289
+ break;
76
290
  }
77
291
  }
78
292
  }
79
- if (this.variaveis[simboloAlvo.lexema]) {
80
- this.variaveis[simboloAlvo.lexema].valor = expressao.valor;
293
+ return Promise.resolve();
294
+ }
295
+ visitarDeclaracaoEnquanto(declaracao) {
296
+ return this.verificarCondicao(declaracao.condicao);
297
+ }
298
+ verificarCondicao(condicao) {
299
+ if (condicao instanceof construtos_1.Agrupamento) {
300
+ return this.verificarCondicao(condicao.expressao);
301
+ }
302
+ if (condicao instanceof construtos_1.Variavel) {
303
+ return this.verificarVariavelBinaria(condicao);
304
+ }
305
+ if (condicao instanceof construtos_1.Binario) {
306
+ return this.verificarBinario(condicao);
307
+ }
308
+ if (condicao instanceof construtos_1.Logico) {
309
+ return this.verificarLogico(condicao);
81
310
  }
311
+ if (condicao instanceof construtos_1.Chamada) {
312
+ return this.verificarChamada(condicao);
313
+ }
314
+ return Promise.resolve();
82
315
  }
83
- visitarDeclaracaoDeExpressao(declaracao) {
84
- return declaracao.expressao.aceitar(this);
316
+ verificarVariavelBinaria(variavel) {
317
+ this.verificarVariavel(variavel);
318
+ const variavelHipotetica = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
319
+ if (variavelHipotetica &&
320
+ !(variavelHipotetica.valor instanceof construtos_1.Binario) &&
321
+ typeof variavelHipotetica.valor !== 'boolean') {
322
+ this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
323
+ }
324
+ return Promise.resolve();
325
+ }
326
+ verificarVariavel(variavel) {
327
+ const variavelEscopo = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
328
+ if (!variavelEscopo) {
329
+ this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' ainda não foi declarada até este ponto.`);
330
+ return Promise.resolve();
331
+ }
332
+ // Marca como usada
333
+ this.gerenciadorEscopos.marcarComoUsada(variavel.simbolo.lexema);
334
+ // Verifica se foi inicializada
335
+ if (!variavelEscopo.inicializada) {
336
+ this.aviso(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' pode não ter sido inicializada antes do uso.`);
337
+ }
338
+ return Promise.resolve();
339
+ }
340
+ verificarBinario(binario) {
341
+ this.verificarExistenciaConstruto(binario.direita);
342
+ this.verificarExistenciaConstruto(binario.esquerda);
343
+ this.verificarOperadorBinario(binario);
344
+ return Promise.resolve();
345
+ }
346
+ verificarOperadorBinario(binario) {
347
+ if (binario.esquerda instanceof construtos_1.Binario) {
348
+ this.verificarOperadorBinario(binario.esquerda);
349
+ }
350
+ if (binario.direita instanceof construtos_1.Binario) {
351
+ this.verificarOperadorBinario(binario.direita);
352
+ }
353
+ const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
354
+ if (operadoresMatematicos.includes(binario.operador.tipo)) {
355
+ this.verificarTiposOperandos(binario);
356
+ }
357
+ if (binario.operador.tipo === 'DIVISAO') {
358
+ this.verificarDivisaoPorZero(binario);
359
+ }
360
+ }
361
+ /**
362
+ * Verifica se os tipos dos operandos são compatíveis
363
+ */
364
+ verificarTiposOperandos(binario) {
365
+ const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
366
+ const tipoDireita = this.obterTipoExpressao(binario.direita);
367
+ if (tipoEsquerda && tipoDireita && tipoEsquerda !== tipoDireita) {
368
+ // Verificar se são tipos numéricos compatíveis
369
+ const tiposNumericos = ['inteiro', 'número', 'real'];
370
+ const ambosNumericos = tiposNumericos.includes(tipoEsquerda) &&
371
+ tiposNumericos.includes(tipoDireita);
372
+ if (!ambosNumericos) {
373
+ this.aviso(binario.operador, `Operação entre tipos diferentes: tipo esquerdo '${tipoEsquerda}' e tipo direito '${tipoDireita}'. O resultado será resolvido implicitamente.`);
374
+ }
375
+ }
376
+ }
377
+ /**
378
+ * Verifica divisão por zero recursivamente
379
+ */
380
+ verificarDivisaoPorZero(binario) {
381
+ const valorDireita = this.avaliarExpressaoConstante(binario.direita);
382
+ if (valorDireita === 0) {
383
+ this.erro(binario.operador, `Divisão por zero.`);
384
+ }
385
+ }
386
+ /**
387
+ * Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
388
+ * Retorna o valor se puder ser determinado, ou null caso contrário
389
+ */
390
+ avaliarExpressaoConstante(expressao) {
391
+ if (expressao instanceof construtos_1.Literal) {
392
+ return expressao.valor;
393
+ }
394
+ if (expressao instanceof construtos_1.Variavel) {
395
+ const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
396
+ if (!variavel) {
397
+ return null;
398
+ }
399
+ if (variavel.imutavel && variavel.inicializada) {
400
+ return variavel.valor;
401
+ }
402
+ if (variavel.inicializada && variavel.valor !== undefined) {
403
+ return variavel.valor;
404
+ }
405
+ return null;
406
+ }
407
+ if (expressao instanceof construtos_1.Binario) {
408
+ const esquerda = this.avaliarExpressaoConstante(expressao.esquerda);
409
+ const direita = this.avaliarExpressaoConstante(expressao.direita);
410
+ if (esquerda !== null && direita !== null) {
411
+ return this.calcularOperacaoBinaria(expressao.operador.tipo, esquerda, direita);
412
+ }
413
+ }
414
+ if (expressao instanceof construtos_1.Agrupamento) {
415
+ return this.avaliarExpressaoConstante(expressao.expressao);
416
+ }
417
+ return null;
418
+ }
419
+ /**
420
+ * Calcula o resultado de uma operação binária em tempo de compilação
421
+ */
422
+ calcularOperacaoBinaria(operador, esquerda, direita) {
423
+ try {
424
+ switch (operador) {
425
+ case 'ADICAO':
426
+ return esquerda + direita;
427
+ case 'SUBTRACAO':
428
+ return esquerda - direita;
429
+ case 'MULTIPLICACAO':
430
+ return esquerda * direita;
431
+ case 'DIVISAO':
432
+ return esquerda / direita;
433
+ case 'MODULO':
434
+ return esquerda % direita;
435
+ case 'MAIOR':
436
+ return esquerda > direita;
437
+ case 'MAIOR_IGUAL':
438
+ return esquerda >= direita;
439
+ case 'MENOR':
440
+ return esquerda < direita;
441
+ case 'MENOR_IGUAL':
442
+ return esquerda <= direita;
443
+ case 'IGUAL':
444
+ return esquerda === direita;
445
+ case 'DIFERENTE':
446
+ return esquerda !== direita;
447
+ default:
448
+ return null;
449
+ }
450
+ }
451
+ catch (e) {
452
+ return null;
453
+ }
454
+ }
455
+ /**
456
+ * Obtém o tipo de uma expressão (pode ser Literal, Variavel, ou Binario)
457
+ */
458
+ obterTipoExpressao(expressao) {
459
+ if (expressao instanceof construtos_1.Literal) {
460
+ return expressao.tipo;
461
+ }
462
+ if (expressao instanceof construtos_1.Variavel) {
463
+ const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
464
+ return (variavel === null || variavel === void 0 ? void 0 : variavel.tipo) || null;
465
+ }
466
+ if (expressao instanceof construtos_1.Binario) {
467
+ // Para binários, tentamos inferir o tipo baseado nos operandos
468
+ return this.inferirTipoBinario(expressao);
469
+ }
470
+ if (expressao instanceof construtos_1.Agrupamento) {
471
+ return this.obterTipoExpressao(expressao.expressao);
472
+ }
473
+ return null;
474
+ }
475
+ /**
476
+ * Infere o tipo de resultado de uma operação binária
477
+ */
478
+ inferirTipoBinario(binario) {
479
+ const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
480
+ const tipoDireita = this.obterTipoExpressao(binario.direita);
481
+ if (!tipoEsquerda || !tipoDireita) {
482
+ return null;
483
+ }
484
+ const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
485
+ const operadoresComparacao = ['MAIOR', 'MAIOR_IGUAL', 'MENOR', 'MENOR_IGUAL', 'IGUAL', 'DIFERENTE'];
486
+ if (operadoresComparacao.includes(binario.operador.tipo)) {
487
+ return 'lógico';
488
+ }
489
+ if (operadoresMatematicos.includes(binario.operador.tipo)) {
490
+ const tiposNumericos = ['inteiro', 'número', 'real'];
491
+ if (tiposNumericos.includes(tipoEsquerda) && tiposNumericos.includes(tipoDireita)) {
492
+ // Se um dos lados é 'real', o resultado é 'real'
493
+ if (tipoEsquerda === 'real' || tipoDireita === 'real') {
494
+ return 'real';
495
+ }
496
+ return 'número';
497
+ }
498
+ // Concatenação de textos
499
+ if (tipoEsquerda === 'texto' || tipoDireita === 'texto') {
500
+ return 'texto';
501
+ }
502
+ }
503
+ return 'qualquer';
504
+ }
505
+ verificarExistenciaConstruto(construto) {
506
+ if (construto instanceof construtos_1.Variavel) {
507
+ if (!this.gerenciadorEscopos.buscar(construto.simbolo.lexema)) {
508
+ this.erro(construto.simbolo, `Variável ${construto.simbolo.lexema} ainda não foi declarada até este ponto.`);
509
+ return;
510
+ }
511
+ this.gerenciadorEscopos.marcarComoUsada(construto.simbolo.lexema);
512
+ return;
513
+ }
514
+ if (construto instanceof construtos_1.Binario) {
515
+ this.verificarBinario(construto);
516
+ }
517
+ }
518
+ verificarLogico(logico) {
519
+ this.verificarLadoLogico(logico.direita);
520
+ this.verificarLadoLogico(logico.esquerda);
521
+ return Promise.resolve();
522
+ }
523
+ verificarChamada(chamada) {
524
+ switch (chamada.entidadeChamada.constructor) {
525
+ case construtos_1.Variavel:
526
+ let entidadeChamadaVariavel = chamada.entidadeChamada;
527
+ if (!this.funcoes[entidadeChamadaVariavel.simbolo.lexema]) {
528
+ this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${entidadeChamadaVariavel.simbolo.lexema}' não existe.`);
529
+ }
530
+ break;
531
+ }
532
+ return Promise.resolve();
533
+ }
534
+ verificarLadoLogico(lado) {
535
+ if (lado instanceof construtos_1.Variavel) {
536
+ let variavel = lado;
537
+ this.verificarVariavelBinaria(variavel);
538
+ }
539
+ }
540
+ /**
541
+ * Verifica interpolações de texto e marca variáveis como usadas
542
+ */
543
+ verificarInterpolacaoTexto(texto, literal) {
544
+ // Regex para encontrar ${identificador}
545
+ const regexInterpolacao = /\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
546
+ let match;
547
+ while ((match = regexInterpolacao.exec(texto)) !== null) {
548
+ const nomeVariavel = match[1];
549
+ // Verifica se a variável existe
550
+ const variavel = this.gerenciadorEscopos.buscar(nomeVariavel);
551
+ const funcao = this.funcoes[nomeVariavel];
552
+ if (!variavel && !funcao) {
553
+ this.erro({
554
+ lexema: nomeVariavel,
555
+ tipo: 'IDENTIFICADOR',
556
+ linha: literal.linha,
557
+ hashArquivo: literal.hashArquivo,
558
+ literal: null
559
+ }, `Variável ou função '${nomeVariavel}' usada em interpolação não existe.`);
560
+ }
561
+ else if (variavel) {
562
+ // Marca como usada
563
+ this.gerenciadorEscopos.marcarComoUsada(nomeVariavel);
564
+ // Verifica se foi inicializada
565
+ if (!variavel.inicializada) {
566
+ this.aviso({
567
+ lexema: nomeVariavel,
568
+ tipo: 'IDENTIFICADOR',
569
+ linha: literal.linha,
570
+ hashArquivo: literal.hashArquivo,
571
+ literal: null
572
+ }, `Variável '${nomeVariavel}' usada em interpolação pode não ter sido inicializada.`);
573
+ }
574
+ }
575
+ }
576
+ }
577
+ visitarDeclaracaoEscreva(declaracao) {
578
+ if (declaracao.argumentos.length === 0) {
579
+ const { linha, hashArquivo } = declaracao;
580
+ const simbolo = {
581
+ literal: '',
582
+ tipo: '',
583
+ lexema: 'escreva',
584
+ linha,
585
+ hashArquivo,
586
+ };
587
+ this.erro(simbolo, `É preciso ter um ou mais parametros para 'escreva(...)'`);
588
+ return Promise.resolve();
589
+ }
590
+ for (const argumento of declaracao.argumentos) {
591
+ this.marcarVariaveisUsadasEmExpressao(argumento);
592
+ if (argumento instanceof construtos_1.Literal && argumento.tipo === 'texto') {
593
+ this.verificarInterpolacaoTexto(argumento.valor, argumento);
594
+ }
595
+ if (argumento instanceof construtos_1.Variavel) {
596
+ const possivelVariavel = this.gerenciadorEscopos.buscar(argumento.simbolo.lexema);
597
+ const possivelFuncao = this.funcoes[argumento.simbolo.lexema];
598
+ if (!possivelVariavel && !possivelFuncao) {
599
+ this.erro(argumento.simbolo, `Variável ou função '${argumento.simbolo.lexema}' não existe.`);
600
+ continue;
601
+ }
602
+ if (possivelVariavel && possivelVariavel.valor === undefined) {
603
+ this.aviso(argumento.simbolo, `Variável '${argumento.simbolo.lexema}' não foi inicializada.`);
604
+ }
605
+ }
606
+ }
607
+ return Promise.resolve();
608
+ }
609
+ visitarDeclaracaoConst(declaracao) {
610
+ var _a;
611
+ this.verificarTipoAtribuido(declaracao);
612
+ if (declaracao.inicializador) {
613
+ this.marcarVariaveisUsadasEmExpressao(declaracao.inicializador);
614
+ }
615
+ const constanteCorrespondente = this.gerenciadorEscopos.buscarNoEscopoAtual(declaracao.simbolo.lexema);
616
+ if (constanteCorrespondente) {
617
+ this.erro(declaracao.simbolo, 'Declaração de constante já feita.');
618
+ return Promise.resolve();
619
+ }
620
+ this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
621
+ nome: declaracao.simbolo.lexema,
622
+ tipo: declaracao.tipo || 'qualquer',
623
+ imutavel: true,
624
+ valor: (_a = declaracao.inicializador) === null || _a === void 0 ? void 0 : _a.valor,
625
+ inicializada: true,
626
+ usada: false,
627
+ hashArquivo: declaracao.simbolo.hashArquivo,
628
+ linha: declaracao.simbolo.linha
629
+ });
630
+ return Promise.resolve();
85
631
  }
86
632
  visitarDeclaracaoVar(declaracao) {
87
- this.variaveis[declaracao.simbolo.lexema] = {
633
+ this.verificarTipoAtribuido(declaracao);
634
+ if (declaracao.inicializador) {
635
+ this.marcarVariaveisUsadasEmExpressao(declaracao.inicializador);
636
+ switch (declaracao.inicializador.constructor) {
637
+ case construtos_1.FuncaoConstruto:
638
+ const funcaoConstruto = declaracao.inicializador;
639
+ if (funcaoConstruto.parametros.length >= 255) {
640
+ this.erro(declaracao.simbolo, 'Função não pode ter mais de 255 parâmetros.');
641
+ }
642
+ break;
643
+ }
644
+ }
645
+ let valorInicializador = undefined;
646
+ if (declaracao.inicializador) {
647
+ if (declaracao.inicializador.hasOwnProperty('valor')) {
648
+ valorInicializador = declaracao.inicializador.valor;
649
+ }
650
+ else {
651
+ valorInicializador = declaracao.inicializador;
652
+ }
653
+ }
654
+ const variavel = {
655
+ nome: declaracao.simbolo.lexema,
656
+ tipo: declaracao.tipo || 'qualquer',
88
657
  imutavel: false,
89
- tipo: declaracao.tipo,
90
- valor: declaracao.inicializador !== null
91
- ? declaracao.inicializador.valor !== undefined
92
- ? declaracao.inicializador.valor
93
- : declaracao.inicializador
94
- : undefined,
95
- valorDefinido: true,
658
+ valor: valorInicializador,
659
+ inicializada: declaracao.inicializador !== null && declaracao.inicializador !== undefined,
660
+ usada: false,
661
+ hashArquivo: declaracao.simbolo.hashArquivo,
662
+ linha: declaracao.simbolo.linha
96
663
  };
664
+ const declaradaComSucesso = this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, variavel);
665
+ if (!declaradaComSucesso) {
666
+ const variavelExistente = this.gerenciadorEscopos.buscarNoEscopoAtual(declaracao.simbolo.lexema);
667
+ this.aviso(declaracao.simbolo, `Variável '${declaracao.simbolo.lexema}' já foi declarada na linha ${variavelExistente === null || variavelExistente === void 0 ? void 0 : variavelExistente.linha}.`);
668
+ }
669
+ return Promise.resolve();
670
+ }
671
+ visitarExpressaoFormatacaoEscrita(expressao) {
672
+ if (expressao.expressao) {
673
+ // Marcação de variáveis usadas em expressões de formatação
674
+ }
97
675
  return Promise.resolve();
98
676
  }
99
677
  visitarExpressaoRetornar(declaracao) {
100
678
  return Promise.resolve(null);
101
679
  }
680
+ visitarExpressaoDeVariavel(expressao) {
681
+ if (expressao instanceof construtos_1.Variavel) {
682
+ return this.verificarVariavel(expressao);
683
+ }
684
+ return Promise.resolve();
685
+ }
686
+ visitarDeclaracaoDefinicaoFuncao(declaracao) {
687
+ if (declaracao.funcao.tipo === undefined) {
688
+ this.erro(declaracao.simbolo, `Declaração de retorno da função é inválido.`);
689
+ }
690
+ if (declaracao.funcao.parametros.length >= 255) {
691
+ this.erro(declaracao.simbolo, 'Função não pode ter mais de 255 parâmetros.');
692
+ }
693
+ let tipoRetornoFuncao = declaracao.funcao.tipo;
694
+ if (tipoRetornoFuncao) {
695
+ if (!['vazio', 'qualquer'].includes(tipoRetornoFuncao)) {
696
+ const todosOsCaminhosRetornam = this.todosOsCaminhosRetornam(declaracao.funcao.corpo);
697
+ if (!todosOsCaminhosRetornam) {
698
+ this.erro(declaracao.simbolo, `Função '${declaracao.simbolo.lexema}' deve retornar '${tipoRetornoFuncao}' em todos os caminhos de execução.`);
699
+ }
700
+ }
701
+ let funcaoContemRetorno = declaracao.funcao.corpo.find((c) => c instanceof declaracoes_1.Retorna);
702
+ if (funcaoContemRetorno && funcaoContemRetorno.valor) {
703
+ if (tipoRetornoFuncao === 'vazio') {
704
+ this.erro(declaracao.simbolo, `A função não pode ter nenhum tipo de retorno.`);
705
+ }
706
+ else {
707
+ const tipoValor = typeof funcaoContemRetorno.valor.valor;
708
+ if (!['qualquer'].includes(tipoRetornoFuncao)) {
709
+ if (tipoValor === 'string' && tipoRetornoFuncao !== 'texto') {
710
+ this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
711
+ }
712
+ if (tipoValor === 'number' && !['inteiro', 'real', 'número'].includes(tipoRetornoFuncao)) {
713
+ this.erro(declaracao.simbolo, `Esperado retorno do tipo '${tipoRetornoFuncao}' dentro da função.`);
714
+ }
715
+ }
716
+ }
717
+ }
718
+ }
719
+ this.funcoes[declaracao.simbolo.lexema] = {
720
+ valor: declaracao.funcao,
721
+ };
722
+ return Promise.resolve();
723
+ }
724
+ verificarVariaveisNaoUsadas() {
725
+ // Não reporta variáveis não usadas se houver erros no código
726
+ const temErros = this.diagnosticos.some(d => d.severidade === erros_1.DiagnosticoSeveridade.ERRO);
727
+ if (temErros) {
728
+ return;
729
+ }
730
+ const naoUsadas = this.gerenciadorEscopos.obterVariaveisNaoUsadas();
731
+ for (let variavel of naoUsadas) {
732
+ this.aviso({
733
+ lexema: variavel.nome,
734
+ linha: variavel.linha,
735
+ tipo: variavel.tipo,
736
+ hashArquivo: variavel.hashArquivo
737
+ }, `Variável '${variavel.nome}' foi declarada mas nunca usada.`);
738
+ }
739
+ }
102
740
  analisar(declaracoes) {
103
- this.variaveis = {};
741
+ this.gerenciadorEscopos = new gerenciador_escopos_1.GerenciadorEscopos();
104
742
  this.atual = 0;
105
743
  this.diagnosticos = [];
106
744
  while (this.atual < declaracoes.length) {
107
745
  declaracoes[this.atual].aceitar(this);
108
746
  this.atual++;
109
747
  }
748
+ // Verifica variáveis não usadas ao final
749
+ this.verificarVariaveisNaoUsadas();
110
750
  return {
111
751
  diagnosticos: this.diagnosticos,
112
752
  };
@@ -1 +1 @@
1
- {"version":3,"file":"analisador-semantico-mapler.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-mapler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analisador-semantico-mapler.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-mapler.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designliquido/mapler",
3
3
  "description": "Dialeto de Mapler baseado em Delégua e TypeScript",
4
- "version": "0.3.7",
4
+ "version": "0.4.0",
5
5
  "license": "MIT",
6
6
  "bugs": {
7
7
  "url": "https://github.com/DesignLiquido/mapler/issues"
@@ -24,7 +24,7 @@
24
24
  "deixar-codigo-bonito": "yarn prettier --config .prettierrc --write fontes/**/*.ts"
25
25
  },
26
26
  "dependencies": {
27
- "@designliquido/delegua": "^0.64.1",
27
+ "@designliquido/delegua": "0.65.0",
28
28
  "lodash": "^4.17.21",
29
29
  "node-fetch": "2"
30
30
  },