@designliquido/potigol 0.5.6 → 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.
@@ -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 { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade, SimboloInterface } from '@designliquido/delegua/interfaces';
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
- adicionarDiagnostico(simbolo: SimboloInterface, mensagem: string, severidade?: DiagnosticoSeveridade): void;
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
- visitarDeclaracaoConst(declaracao: Const): Promise<any>;
30
- visitarDeclaracaoVar(declaracao: Var): Promise<any>;
31
- visitarExpressaoDeVariavel(expressao: Variavel | Constante): Promise<any>;
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,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AACtG,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EACH,8BAA8B,EAC9B,qBAAqB,EACrB,gBAAgB,EACnB,MAAM,mCAAmC,CAAC;AAC3C,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,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAErE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,8BAA8B,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEtG,qBAAa,0BAA2B,SAAQ,uBAAwB,YAAW,8BAA8B;IAC7G,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;IAE/C,oBAAoB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,qBAAkD,GAC/D,IAAI;IAUP,4BAA4B,CAAC,UAAU,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAI1E,6BAA6B,CAAC,UAAU,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAI5E,0BAA0B,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAItE,yBAAyB,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAIpE,0BAA0B,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAItE,2BAA2B,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;IAIxE,qCAAqC,CAAC,UAAU,EAAE,oBAAoB,GAAG,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC;IAInF,sBAAsB,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAYvD,oBAAoB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAYnD,0BAA0B,CAAC,SAAS,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC;IAWlF,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,0BAA0B;CAalE"}
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 interfaces_1 = require("@designliquido/delegua/interfaces");
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
- adicionarDiagnostico(simbolo, mensagem, severidade = interfaces_1.DiagnosticoSeveridade.ERRO) {
8
- this.diagnosticos.push({
9
- simbolo: simbolo,
10
- mensagem: mensagem,
11
- hashArquivo: simbolo.hashArquivo,
12
- linha: simbolo.linha,
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
- visitarDeclaracaoLeiaInteiro(declaracao) {
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
- visitarDeclaracaoLeiaInteiros(declaracao) {
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
- visitarDeclaracaoLeiaReais(declaracao) {
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
- visitarDeclaracaoLeiaReal(declaracao) {
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
- visitarDeclaracaoLeiaTexto(declaracao) {
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
- visitarDeclaracaoLeiaTextos(declaracao) {
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
- visitarDeclaracaoReatribuicaoVariavel(declaracao) {
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.variaveis[declaracao.simbolo.lexema] = {
562
+ this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
563
+ nome: declaracao.simbolo.lexema,
39
564
  tipo: declaracao.tipo,
40
- subtipo: undefined,
41
- imutavel: false,
42
- valor: undefined,
43
- valorDefinido: true,
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.variaveis[declaracao.simbolo.lexema] = {
578
+ this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
579
+ nome: declaracao.simbolo.lexema,
49
580
  tipo: declaracao.tipo,
50
- subtipo: undefined,
51
- imutavel: true,
52
- valor: undefined,
53
- valorDefinido: true,
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 (!(expressao.simbolo.lexema in this.variaveis)) {
59
- this.adicionarDiagnostico(expressao.simbolo, `Variável '${expressao.simbolo.lexema}' ainda não foi declarada.`);
594
+ if (expressao instanceof delegua_1.Variavel) {
595
+ this.verificarVariavel(expressao);
60
596
  }
61
597
  return Promise.resolve();
62
598
  }
63
- visitarExpressaoTipoDe(expressao) {
64
- return Promise.resolve('');
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
- this.variaveis = {};
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.5.6",
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": "^0.64.0",
46
+ "@designliquido/delegua": "0.65.0",
47
47
  "lodash": "^4.17.21"
48
48
  }
49
49
  }