@designliquido/birl 0.2.22 → 0.3.1

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