@designliquido/portugol-studio 0.6.6 → 0.7.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,4 +1,4 @@
1
- import { Const, Declaracao, EscrevaMesmaLinha, Expressao, FuncaoDeclaracao, Var } from '@designliquido/delegua/declaracoes';
1
+ import { Const, Declaracao, Enquanto, Escolha, Escreva, EscrevaMesmaLinha, Expressao, FuncaoDeclaracao, Retorna, Var } from '@designliquido/delegua/declaracoes';
2
2
  import { AnalisadorSemanticoBase } from '@designliquido/delegua/analisador-semantico/analisador-semantico-base';
3
3
  import { SimboloInterface } from '@designliquido/delegua/interfaces';
4
4
  import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from '@designliquido/delegua/interfaces/erros';
@@ -19,17 +19,105 @@ export declare class AnalisadorSemanticoPortugolStudio extends AnalisadorSemanti
19
19
  diagnosticos: DiagnosticoAnalisadorSemantico[];
20
20
  corpoMetodoPrincipal: any[];
21
21
  constructor();
22
+ /**
23
+ * Verifica o tipo atribuído a uma declaração
24
+ */
25
+ private verificarTipoAtribuido;
22
26
  adicionarDiagnostico(simbolo: SimboloInterface, mensagem: string, severidade?: DiagnosticoSeveridade): void;
27
+ /**
28
+ * Verifica interpolações de texto e marca variáveis como usadas
29
+ */
30
+ private verificarInterpolacaoTexto;
31
+ /**
32
+ * Verifica a existência de uma variável e marca como usada
33
+ */
34
+ private verificarVariavel;
35
+ /**
36
+ * Verifica condições em estruturas de controle
37
+ */
38
+ private verificarCondicao;
39
+ /**
40
+ * Verifica variável em contexto binário/condicional
41
+ */
42
+ private verificarVariavelBinaria;
43
+ /**
44
+ * Verifica expressões binárias
45
+ */
46
+ private verificarBinario;
47
+ /**
48
+ * Verifica operadores binários
49
+ */
50
+ private verificarOperadorBinario;
51
+ /**
52
+ * Verifica se os tipos dos operandos são compatíveis
53
+ */
54
+ private verificarTiposOperandos;
55
+ /**
56
+ * Verifica divisão por zero recursivamente
57
+ */
58
+ private verificarDivisaoPorZero;
59
+ /**
60
+ * Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
61
+ */
62
+ private avaliarExpressaoConstante;
63
+ /**
64
+ * Calcula o resultado de uma operação binária em tempo de compilação
65
+ */
66
+ private calcularOperacaoBinaria;
67
+ /**
68
+ * Obtém o tipo de uma expressão
69
+ */
70
+ private obterTipoExpressao;
71
+ /**
72
+ * Infere o tipo de resultado de uma operação binária
73
+ */
74
+ private inferirTipoBinario;
75
+ /**
76
+ * Verifica a existência de um construto
77
+ */
78
+ private verificarExistenciaConstruto;
79
+ /**
80
+ * Verifica expressões lógicas
81
+ */
82
+ private verificarLogico;
83
+ /**
84
+ * Verifica chamadas de função em condições
85
+ */
86
+ private verificarChamada;
87
+ /**
88
+ * Verifica o lado de uma expressão lógica
89
+ */
90
+ private verificarLadoLogico;
91
+ /**
92
+ * Verifica variáveis não usadas ao final da análise
93
+ */
94
+ private verificarVariaveisNaoUsadas;
23
95
  visitarDeclaracaoEscrevaMesmaLinha(declaracao: EscrevaMesmaLinha): Promise<any>;
24
96
  visitarDeclaracaoDefinicaoFuncao(declaracao: FuncaoDeclaracao): Promise<any>;
25
97
  visitarDeclaracaoVar(declaracao: Var): Promise<any>;
26
98
  visitarExpressaoDeVariavel(expressao: Variavel): Promise<any>;
27
99
  private validarCompatibilidadeTipos;
28
- visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<void>;
100
+ visitarExpressaoDeAtribuicao(expressao: Atribuir): Promise<any>;
29
101
  visitarExpressaoDeChamada(expressao: Chamada): Promise<any>;
30
102
  visitarExpressaoAtribuicaoPorIndice(expressao: AtribuicaoPorIndice): Promise<any>;
31
103
  visitarDeclaracaoDeExpressao(declaracao: Expressao): Promise<void>;
32
104
  visitarDeclaracaoConst(declaracao: Const): Promise<any>;
105
+ /**
106
+ * Visita declaração de escreva com validações adicionais
107
+ */
108
+ visitarDeclaracaoEscreva(declaracao: Escreva): Promise<void>;
109
+ /**
110
+ * Visita declaração de enquanto com validação de condição
111
+ */
112
+ visitarDeclaracaoEnquanto(declaracao: Enquanto): Promise<void>;
113
+ /**
114
+ * Visita declaração de escolha com validação de tipos
115
+ */
116
+ visitarDeclaracaoEscolha(declaracao: Escolha): Promise<void>;
117
+ /**
118
+ * Visita declaração de retorna
119
+ */
120
+ visitarExpressaoRetornar(declaracao: Retorna): Promise<any>;
33
121
  analisar(declaracoes: Declaracao[]): RetornoAnalisadorSemantico;
34
122
  }
35
123
  //# sourceMappingURL=analisador-semantico-portugol-studio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"analisador-semantico-portugol-studio.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-portugol-studio.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EACL,UAAU,EAEV,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,GAAG,EACN,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uEAAuE,CAAC;AAChH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,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;AAE9G,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EACH,mBAAmB,EACnB,QAAQ,EACR,OAAO,EAGP,QAAQ,EACX,MAAM,mCAAmC,CAAC;AAK3C,qBAAa,iCAAkC,SAAQ,uBAAuB;IAC1E,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;IAC/C,oBAAoB,QAAM;;IAW1B,oBAAoB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,qBAAkD,GAC/D,IAAI;IAUP,kCAAkC,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC;IAU/E,gCAAgC,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAoB5E,oBAAoB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAuCnD,0BAA0B,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAO7D,OAAO,CAAC,2BAA2B;IAkBnC,4BAA4B,CAAC,SAAS,EAAE,QAAQ;IAyDhD,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAyD3D,mCAAmC,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAYjF,4BAA4B,CAAC,UAAU,EAAE,SAAS;IAsBlD,sBAAsB,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAevD,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,0BAA0B;CA8BlE"}
1
+ {"version":3,"file":"analisador-semantico-portugol-studio.d.ts","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-portugol-studio.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EAChB,OAAO,EACP,GAAG,EACN,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uEAAuE,CAAC;AAEhH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,8BAA8B,EAAE,qBAAqB,EAAE,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;AAE9G,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAEH,mBAAmB,EACnB,QAAQ,EAER,OAAO,EAKP,QAAQ,EACX,MAAM,mCAAmC,CAAC;AAK3C,qBAAa,iCAAkC,SAAQ,uBAAuB;IAC1E,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;IAC/C,oBAAoB,QAAM;;IAY1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyD9B,oBAAoB,CAChB,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,qBAAkD,GAC/D,IAAI;IAUP;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAsClC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqBzB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAwBzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmBhC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAO/B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAsCjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAqB/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IAgBpC;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAM3B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAyBnC,kCAAkC,CAAC,UAAU,EAAE,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB/E,gCAAgC,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC;IAoB5E,oBAAoB,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IA6EnD,0BAA0B,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IAQ7D,OAAO,CAAC,2BAA2B;IAkBnC,4BAA4B,CAAC,SAAS,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC;IA4E/D,yBAAyB,CAAC,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAmE3D,mCAAmC,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAYjF,4BAA4B,CAAC,UAAU,EAAE,SAAS;IAsBlD,sBAAsB,CAAC,UAAU,EAAE,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IA+CvD;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IA2C5D;;OAEG;IACH,yBAAyB,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC5D;;OAEG;IACH,wBAAwB,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAI3D,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,0BAA0B;CAyClE"}
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AnalisadorSemanticoPortugolStudio = void 0;
7
7
  const declaracoes_1 = require("@designliquido/delegua/declaracoes");
8
8
  const analisador_semantico_base_1 = require("@designliquido/delegua/analisador-semantico/analisador-semantico-base");
9
+ const gerenciador_escopos_1 = require("@designliquido/delegua/analisador-semantico/gerenciador-escopos");
9
10
  const erros_1 = require("@designliquido/delegua/interfaces/erros");
10
11
  const pilha_variaveis_1 = require("./pilha-variaveis");
11
12
  const construtos_1 = require("@designliquido/delegua/construtos");
@@ -20,6 +21,54 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
20
21
  this.funcoes = {};
21
22
  this.atual = 0;
22
23
  this.diagnosticos = [];
24
+ this.gerenciadorEscopos = new gerenciador_escopos_1.GerenciadorEscopos();
25
+ }
26
+ /**
27
+ * Verifica o tipo atribuído a uma declaração
28
+ */
29
+ verificarTipoAtribuido(declaracao) {
30
+ if (!declaracao.tipo || !declaracao.inicializador) {
31
+ return;
32
+ }
33
+ // Verifica vetores tipados
34
+ if (['vetor', 'qualquer[]', 'inteiro[]', 'texto[]'].includes(declaracao.tipo)) {
35
+ if (declaracao.inicializador instanceof construtos_1.Vetor) {
36
+ const vetor = declaracao.inicializador;
37
+ // Ignora vetores vazios (declarações como inteiro numeros[10])
38
+ if (vetor.valores.length === 0) {
39
+ return;
40
+ }
41
+ if (declaracao.tipo === 'inteiro[]') {
42
+ const apenasValores = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'number');
43
+ if (apenasValores) {
44
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo vetor de inteiro ou real.`);
45
+ }
46
+ }
47
+ if (declaracao.tipo === 'texto[]') {
48
+ const apenasValores = vetor.valores.find((v) => typeof (v === null || v === void 0 ? void 0 : v.valor) !== 'string');
49
+ if (apenasValores) {
50
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo vetor de texto.`);
51
+ }
52
+ }
53
+ }
54
+ // NOTA: Não reportamos erro se o inicializador não for um Vetor, pois pode ser
55
+ // uma declaração de array vazio (inteiro numeros[10]) ou uma variável
56
+ }
57
+ // Verifica literais - mas ignora se o tipo do literal é "qualquer" (não determinado ainda)
58
+ if (declaracao.inicializador instanceof construtos_1.Literal) {
59
+ const literal = declaracao.inicializador;
60
+ // Ignora validação se o tipo do literal não foi determinado
61
+ if (literal.tipo === 'qualquer') {
62
+ return;
63
+ }
64
+ if (declaracao.tipo === 'texto' && literal.tipo !== 'texto') {
65
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo texto. Atual: ${literal.tipo}.`);
66
+ }
67
+ if (['inteiro', 'número', 'real'].includes(declaracao.tipo) &&
68
+ !['inteiro', 'número', 'real', 'qualquer'].includes(literal.tipo)) {
69
+ this.erro(declaracao.simbolo, `Atribuição inválida para '${declaracao.simbolo.lexema}': é esperado um valor do tipo número. Atual: ${literal.tipo}.`);
70
+ }
71
+ }
23
72
  }
24
73
  adicionarDiagnostico(simbolo, mensagem, severidade = erros_1.DiagnosticoSeveridade.ERRO) {
25
74
  this.diagnosticos.push({
@@ -30,10 +79,326 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
30
79
  severidade: severidade,
31
80
  });
32
81
  }
82
+ /**
83
+ * Verifica interpolações de texto e marca variáveis como usadas
84
+ */
85
+ verificarInterpolacaoTexto(texto, literal) {
86
+ // Regex para encontrar ${identificador}
87
+ const regexInterpolacao = /\$\{([a-zA-Z_][a-zA-Z0-9_]*)\}/g;
88
+ let match;
89
+ while ((match = regexInterpolacao.exec(texto)) !== null) {
90
+ const nomeVariavel = match[1];
91
+ // Verifica se a variável existe
92
+ const variavel = this.gerenciadorEscopos.buscar(nomeVariavel);
93
+ const funcao = this.funcoes[nomeVariavel];
94
+ if (!variavel && !funcao) {
95
+ this.erro({
96
+ lexema: nomeVariavel,
97
+ tipo: 'IDENTIFICADOR',
98
+ linha: literal.linha,
99
+ hashArquivo: literal.hashArquivo,
100
+ literal: null
101
+ }, `Variável ou função '${nomeVariavel}' usada em interpolação não existe.`);
102
+ }
103
+ else if (variavel) {
104
+ // Marca como usada
105
+ this.gerenciadorEscopos.marcarComoUsada(nomeVariavel);
106
+ // Verifica se foi inicializada
107
+ if (!variavel.inicializada) {
108
+ this.aviso({
109
+ lexema: nomeVariavel,
110
+ tipo: 'IDENTIFICADOR',
111
+ linha: literal.linha,
112
+ hashArquivo: literal.hashArquivo,
113
+ literal: null
114
+ }, `Variável '${nomeVariavel}' usada em interpolação pode não ter sido inicializada.`);
115
+ }
116
+ }
117
+ }
118
+ }
119
+ /**
120
+ * Verifica a existência de uma variável e marca como usada
121
+ */
122
+ verificarVariavel(variavel) {
123
+ const variavelEscopo = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
124
+ if (!variavelEscopo) {
125
+ this.erro(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' ainda não foi declarada até este ponto.`);
126
+ return Promise.resolve();
127
+ }
128
+ // Marca como usada
129
+ this.gerenciadorEscopos.marcarComoUsada(variavel.simbolo.lexema);
130
+ // Verifica se foi inicializada
131
+ if (!variavelEscopo.inicializada) {
132
+ this.aviso(variavel.simbolo, `Variável '${variavel.simbolo.lexema}' pode não ter sido inicializada antes do uso.`);
133
+ }
134
+ return Promise.resolve();
135
+ }
136
+ /**
137
+ * Verifica condições em estruturas de controle
138
+ */
139
+ verificarCondicao(condicao) {
140
+ if (condicao instanceof construtos_1.Agrupamento) {
141
+ return this.verificarCondicao(condicao.expressao);
142
+ }
143
+ if (condicao instanceof construtos_1.Variavel) {
144
+ return this.verificarVariavelBinaria(condicao);
145
+ }
146
+ if (condicao instanceof construtos_1.Binario) {
147
+ return this.verificarBinario(condicao);
148
+ }
149
+ if (condicao instanceof construtos_1.Logico) {
150
+ return this.verificarLogico(condicao);
151
+ }
152
+ if (condicao instanceof construtos_1.Chamada) {
153
+ return this.verificarChamada(condicao);
154
+ }
155
+ return Promise.resolve();
156
+ }
157
+ /**
158
+ * Verifica variável em contexto binário/condicional
159
+ */
160
+ verificarVariavelBinaria(variavel) {
161
+ this.verificarVariavel(variavel);
162
+ const variavelHipotetica = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema);
163
+ if (variavelHipotetica &&
164
+ !(variavelHipotetica.valor instanceof construtos_1.Binario) &&
165
+ typeof variavelHipotetica.valor !== 'boolean') {
166
+ this.erro(variavel.simbolo, `Esperado tipo 'lógico' na condição do 'enquanto'.`);
167
+ }
168
+ return Promise.resolve();
169
+ }
170
+ /**
171
+ * Verifica expressões binárias
172
+ */
173
+ verificarBinario(binario) {
174
+ this.verificarExistenciaConstruto(binario.direita);
175
+ this.verificarExistenciaConstruto(binario.esquerda);
176
+ this.verificarOperadorBinario(binario);
177
+ return Promise.resolve();
178
+ }
179
+ /**
180
+ * Verifica operadores binários
181
+ */
182
+ verificarOperadorBinario(binario) {
183
+ if (binario.esquerda instanceof construtos_1.Binario) {
184
+ this.verificarOperadorBinario(binario.esquerda);
185
+ }
186
+ if (binario.direita instanceof construtos_1.Binario) {
187
+ this.verificarOperadorBinario(binario.direita);
188
+ }
189
+ const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
190
+ if (operadoresMatematicos.includes(binario.operador.tipo)) {
191
+ this.verificarTiposOperandos(binario);
192
+ }
193
+ if (binario.operador.tipo === 'DIVISAO') {
194
+ this.verificarDivisaoPorZero(binario);
195
+ }
196
+ }
197
+ /**
198
+ * Verifica se os tipos dos operandos são compatíveis
199
+ */
200
+ verificarTiposOperandos(binario) {
201
+ const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
202
+ const tipoDireita = this.obterTipoExpressao(binario.direita);
203
+ if (tipoEsquerda && tipoDireita && tipoEsquerda !== tipoDireita) {
204
+ // Verificar se são tipos numéricos compatíveis
205
+ const tiposNumericos = ['inteiro', 'número', 'real'];
206
+ const ambosNumericos = tiposNumericos.includes(tipoEsquerda) &&
207
+ tiposNumericos.includes(tipoDireita);
208
+ if (!ambosNumericos) {
209
+ this.aviso(binario.operador, `Operação entre tipos diferentes: tipo esquerdo '${tipoEsquerda}' e tipo direito '${tipoDireita}'. O resultado será resolvido implicitamente.`);
210
+ }
211
+ }
212
+ }
213
+ /**
214
+ * Verifica divisão por zero recursivamente
215
+ */
216
+ verificarDivisaoPorZero(binario) {
217
+ const valorDireita = this.avaliarExpressaoConstante(binario.direita);
218
+ if (valorDireita === 0) {
219
+ this.erro(binario.operador, `Divisão por zero.`);
220
+ }
221
+ }
222
+ /**
223
+ * Tenta avaliar uma expressão em tempo de compilação para detectar valores constantes
224
+ */
225
+ avaliarExpressaoConstante(expressao) {
226
+ if (expressao instanceof construtos_1.Literal) {
227
+ return expressao.valor;
228
+ }
229
+ if (expressao instanceof construtos_1.Variavel) {
230
+ const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
231
+ if (!variavel) {
232
+ return null;
233
+ }
234
+ if (variavel.imutavel && variavel.inicializada) {
235
+ return variavel.valor;
236
+ }
237
+ if (variavel.inicializada && variavel.valor !== undefined) {
238
+ return variavel.valor;
239
+ }
240
+ return null;
241
+ }
242
+ if (expressao instanceof construtos_1.Binario) {
243
+ const esquerda = this.avaliarExpressaoConstante(expressao.esquerda);
244
+ const direita = this.avaliarExpressaoConstante(expressao.direita);
245
+ if (esquerda !== null && direita !== null) {
246
+ return this.calcularOperacaoBinaria(expressao.operador.tipo, esquerda, direita);
247
+ }
248
+ }
249
+ if (expressao instanceof construtos_1.Agrupamento) {
250
+ return this.avaliarExpressaoConstante(expressao.expressao);
251
+ }
252
+ return null;
253
+ }
254
+ /**
255
+ * Calcula o resultado de uma operação binária em tempo de compilação
256
+ */
257
+ calcularOperacaoBinaria(operador, esquerda, direita) {
258
+ try {
259
+ switch (operador) {
260
+ case 'ADICAO': return esquerda + direita;
261
+ case 'SUBTRACAO': return esquerda - direita;
262
+ case 'MULTIPLICACAO': return esquerda * direita;
263
+ case 'DIVISAO': return esquerda / direita;
264
+ case 'MODULO': return esquerda % direita;
265
+ case 'MAIOR': return esquerda > direita;
266
+ case 'MAIOR_IGUAL': return esquerda >= direita;
267
+ case 'MENOR': return esquerda < direita;
268
+ case 'MENOR_IGUAL': return esquerda <= direita;
269
+ case 'IGUAL': return esquerda === direita;
270
+ case 'DIFERENTE': return esquerda !== direita;
271
+ default: return null;
272
+ }
273
+ }
274
+ catch (e) {
275
+ return null;
276
+ }
277
+ }
278
+ /**
279
+ * Obtém o tipo de uma expressão
280
+ */
281
+ obterTipoExpressao(expressao) {
282
+ if (expressao instanceof construtos_1.Literal) {
283
+ return expressao.tipo;
284
+ }
285
+ if (expressao instanceof construtos_1.Variavel) {
286
+ const variavel = this.gerenciadorEscopos.buscar(expressao.simbolo.lexema);
287
+ return (variavel === null || variavel === void 0 ? void 0 : variavel.tipo) || null;
288
+ }
289
+ if (expressao instanceof construtos_1.Binario) {
290
+ return this.inferirTipoBinario(expressao);
291
+ }
292
+ if (expressao instanceof construtos_1.Agrupamento) {
293
+ return this.obterTipoExpressao(expressao.expressao);
294
+ }
295
+ return null;
296
+ }
297
+ /**
298
+ * Infere o tipo de resultado de uma operação binária
299
+ */
300
+ inferirTipoBinario(binario) {
301
+ const tipoEsquerda = this.obterTipoExpressao(binario.esquerda);
302
+ const tipoDireita = this.obterTipoExpressao(binario.direita);
303
+ if (!tipoEsquerda || !tipoDireita) {
304
+ return null;
305
+ }
306
+ const operadoresMatematicos = ['ADICAO', 'SUBTRACAO', 'MULTIPLICACAO', 'DIVISAO', 'MODULO'];
307
+ const operadoresComparacao = ['MAIOR', 'MAIOR_IGUAL', 'MENOR', 'MENOR_IGUAL', 'IGUAL', 'DIFERENTE'];
308
+ if (operadoresComparacao.includes(binario.operador.tipo)) {
309
+ return 'lógico';
310
+ }
311
+ if (operadoresMatematicos.includes(binario.operador.tipo)) {
312
+ const tiposNumericos = ['inteiro', 'número', 'real'];
313
+ if (tiposNumericos.includes(tipoEsquerda) && tiposNumericos.includes(tipoDireita)) {
314
+ // Se um dos lados é 'real', o resultado é 'real'
315
+ if (tipoEsquerda === 'real' || tipoDireita === 'real') {
316
+ return 'real';
317
+ }
318
+ return 'número';
319
+ }
320
+ // Concatenação de textos
321
+ if (tipoEsquerda === 'texto' || tipoDireita === 'texto') {
322
+ return 'texto';
323
+ }
324
+ }
325
+ return 'qualquer';
326
+ }
327
+ /**
328
+ * Verifica a existência de um construto
329
+ */
330
+ verificarExistenciaConstruto(construto) {
331
+ if (construto instanceof construtos_1.Variavel) {
332
+ if (!this.gerenciadorEscopos.buscar(construto.simbolo.lexema)) {
333
+ this.erro(construto.simbolo, `Variável ${construto.simbolo.lexema} ainda não foi declarada até este ponto.`);
334
+ return;
335
+ }
336
+ this.gerenciadorEscopos.marcarComoUsada(construto.simbolo.lexema);
337
+ return;
338
+ }
339
+ if (construto instanceof construtos_1.Binario) {
340
+ this.verificarBinario(construto);
341
+ }
342
+ }
343
+ /**
344
+ * Verifica expressões lógicas
345
+ */
346
+ verificarLogico(logico) {
347
+ this.verificarLadoLogico(logico.direita);
348
+ this.verificarLadoLogico(logico.esquerda);
349
+ return Promise.resolve();
350
+ }
351
+ /**
352
+ * Verifica chamadas de função em condições
353
+ */
354
+ verificarChamada(chamada) {
355
+ if (chamada.entidadeChamada instanceof construtos_1.Variavel) {
356
+ const entidadeChamadaVariavel = chamada.entidadeChamada;
357
+ if (!this.funcoes[entidadeChamadaVariavel.simbolo.lexema]) {
358
+ this.erro(entidadeChamadaVariavel.simbolo, `Chamada da função '${entidadeChamadaVariavel.simbolo.lexema}' não existe.`);
359
+ }
360
+ }
361
+ return Promise.resolve();
362
+ }
363
+ /**
364
+ * Verifica o lado de uma expressão lógica
365
+ */
366
+ verificarLadoLogico(lado) {
367
+ if (lado instanceof construtos_1.Variavel) {
368
+ this.verificarVariavelBinaria(lado);
369
+ }
370
+ }
371
+ /**
372
+ * Verifica variáveis não usadas ao final da análise
373
+ */
374
+ verificarVariaveisNaoUsadas() {
375
+ const naoUsadas = this.gerenciadorEscopos.obterVariaveisNaoUsadas();
376
+ for (let variavel of naoUsadas) {
377
+ // Verifica se já existe um erro associado à variável
378
+ const temErro = this.diagnosticos.some(d => d.severidade === erros_1.DiagnosticoSeveridade.ERRO &&
379
+ d.simbolo.lexema === variavel.nome);
380
+ // Se a variável já tem um erro associado, não emitir aviso de não usada
381
+ if (temErro) {
382
+ continue;
383
+ }
384
+ this.aviso({
385
+ lexema: variavel.nome,
386
+ linha: variavel.linha,
387
+ tipo: variavel.tipo,
388
+ hashArquivo: variavel.hashArquivo,
389
+ literal: null
390
+ }, `Variável '${variavel.nome}' foi declarada mas nunca usada.`);
391
+ }
392
+ }
33
393
  visitarDeclaracaoEscrevaMesmaLinha(declaracao) {
34
394
  declaracao.argumentos.forEach((argumento) => {
35
- if (argumento instanceof construtos_1.Variavel && !this.variaveis[argumento.simbolo.lexema]) {
36
- this.adicionarDiagnostico(argumento.simbolo, `Variável não declarada: ${argumento.simbolo.lexema}`);
395
+ // Marca variáveis como usadas
396
+ this.marcarVariaveisUsadasEmExpressao(argumento);
397
+ if (argumento instanceof construtos_1.Variavel) {
398
+ const variavelExistente = this.gerenciadorEscopos.buscar(argumento.simbolo.lexema);
399
+ if (!variavelExistente) {
400
+ this.erro(argumento.simbolo, `Variável não declarada: ${argumento.simbolo.lexema}`);
401
+ }
37
402
  }
38
403
  });
39
404
  return Promise.resolve();
@@ -54,38 +419,71 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
54
419
  }
55
420
  visitarDeclaracaoVar(declaracao) {
56
421
  const { simbolo, inicializador } = declaracao;
57
- if (inicializador instanceof construtos_1.Variavel) {
58
- const { simbolo: simboloInicializador } = inicializador;
59
- const variavelExistente = this.variaveis[simboloInicializador.lexema];
60
- if (!variavelExistente) {
61
- this.adicionarDiagnostico(simboloInicializador, `Variável não declarada: ${simboloInicializador.lexema}.`);
62
- return Promise.resolve();
63
- }
64
- const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(variavelExistente.valor);
65
- if (tipoInferido !== declaracao.tipo) {
66
- const erroTipo = this.validarCompatibilidadeTipos(tipoInferido, declaracao.tipo);
67
- if (erroTipo) {
68
- this.adicionarDiagnostico(simbolo, erroTipo);
422
+ // verifica tipo atribuído se houver inicializador
423
+ if (inicializador) {
424
+ this.verificarTipoAtribuido(declaracao);
425
+ }
426
+ // Marca variáveis usadas no inicializador
427
+ if (inicializador) {
428
+ this.marcarVariaveisUsadasEmExpressao(inicializador);
429
+ // Verifica se inicializador é uma variável
430
+ if (inicializador instanceof construtos_1.Variavel) {
431
+ const { simbolo: simboloInicializador } = inicializador;
432
+ const variavelExistente = this.gerenciadorEscopos.buscar(simboloInicializador.lexema);
433
+ if (!variavelExistente) {
434
+ this.erro(simboloInicializador, `Variável não declarada: ${simboloInicializador.lexema}.`);
69
435
  return Promise.resolve();
70
436
  }
437
+ const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(variavelExistente.valor);
438
+ if (tipoInferido !== declaracao.tipo) {
439
+ const erroTipo = this.validarCompatibilidadeTipos(tipoInferido, declaracao.tipo);
440
+ if (erroTipo) {
441
+ this.erro(simbolo, erroTipo);
442
+ return Promise.resolve();
443
+ }
444
+ }
445
+ }
446
+ }
447
+ // Determina o valor do inicializador
448
+ let valorInicializador = undefined;
449
+ if (inicializador) {
450
+ if (inicializador.hasOwnProperty('valor')) {
451
+ valorInicializador = inicializador.valor;
452
+ }
453
+ else {
454
+ valorInicializador = inicializador;
71
455
  }
72
456
  }
457
+ // Declara a variável usando GerenciadorEscopos
458
+ const variavel = {
459
+ nome: simbolo.lexema,
460
+ tipo: declaracao.tipo || 'qualquer',
461
+ imutavel: false,
462
+ valor: valorInicializador,
463
+ inicializada: inicializador !== null && inicializador !== undefined,
464
+ usada: false,
465
+ hashArquivo: simbolo.hashArquivo,
466
+ linha: simbolo.linha
467
+ };
468
+ const declaradaComSucesso = this.gerenciadorEscopos.declarar(simbolo.lexema, variavel);
469
+ if (!declaradaComSucesso) {
470
+ const variavelExistente = this.gerenciadorEscopos.buscarNoEscopoAtual(simbolo.lexema);
471
+ this.aviso(simbolo, `Variável '${simbolo.lexema}' já foi declarada na linha ${variavelExistente === null || variavelExistente === void 0 ? void 0 : variavelExistente.linha}.`);
472
+ }
473
+ // Mantém compatibilidade com o dicionário antigo
73
474
  this.variaveis[simbolo.lexema] = {
74
475
  imutavel: false,
75
476
  tipo: declaracao.tipo,
76
- valor: inicializador !== null
77
- ? inicializador.valor !== undefined
78
- ? inicializador.valor
79
- : inicializador
80
- : undefined,
477
+ valor: valorInicializador,
81
478
  valorDefinido: true,
82
479
  };
83
480
  return Promise.resolve();
84
481
  }
85
482
  visitarExpressaoDeVariavel(expressao) {
86
- /* TODO - Atualmente o tipo "caracter vem como instância de variável,
87
- causando assim erros como reportado na issue #31
88
- */
483
+ // Verifica a variável e marca como usada
484
+ if (expressao instanceof construtos_1.Variavel) {
485
+ return this.verificarVariavel(expressao);
486
+ }
89
487
  return Promise.resolve();
90
488
  }
91
489
  validarCompatibilidadeTipos(tipoInferido, tipoEsperado) {
@@ -107,88 +505,112 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
107
505
  }
108
506
  visitarExpressaoDeAtribuicao(expressao) {
109
507
  const { valor, alvo } = expressao;
110
- let simboloAlvo = null;
111
- let nomeVariavel = null;
508
+ let simboloAlvo;
509
+ // Determina o símbolo do alvo
112
510
  switch (alvo.constructor.name) {
113
511
  case 'Variavel':
114
512
  const alvoVariavel = alvo;
115
513
  simboloAlvo = alvoVariavel.simbolo;
116
- nomeVariavel = simboloAlvo.lexema;
117
514
  break;
118
515
  default:
119
- return Promise.reject('Terminar');
120
- }
121
- if (valor instanceof construtos_1.Variavel) {
122
- const variavelExistente = this.variaveis[valor.simbolo.lexema];
123
- if (!variavelExistente) {
124
- this.adicionarDiagnostico(valor.simbolo, `Variável não declarada: ${valor.simbolo.lexema}.`);
125
516
  return Promise.resolve();
126
- }
127
- const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(variavelExistente.valor);
128
- if (tipoInferido !== variavelExistente.tipo) {
129
- const erroTipo = this.validarCompatibilidadeTipos(variavelExistente.tipo, tipoInferido);
130
- if (erroTipo) {
131
- this.adicionarDiagnostico(valor.simbolo, erroTipo);
132
- return Promise.resolve();
133
- }
134
- }
135
517
  }
136
- const variavel = this.variaveis[nomeVariavel];
518
+ // Busca a variável no gerenciador de escopos
519
+ const variavel = this.gerenciadorEscopos.buscar(simboloAlvo.lexema);
137
520
  if (!variavel) {
138
- this.adicionarDiagnostico(simboloAlvo, `Variável não declarada: ${simboloAlvo.lexema}.`);
521
+ this.erro(simboloAlvo, `Variável '${simboloAlvo.lexema}' ainda não foi declarada até este ponto.`);
139
522
  return Promise.resolve();
140
523
  }
524
+ // Verifica se é uma constante
141
525
  if (variavel.imutavel) {
142
- this.adicionarDiagnostico(simboloAlvo, 'Não é possível alterar o valor de uma constante.');
526
+ this.erro(simboloAlvo, `Constante '${simboloAlvo.lexema}' não pode ser modificada.`);
143
527
  return Promise.resolve();
144
528
  }
145
- if (variavel.tipo && valor instanceof construtos_1.Literal) {
146
- const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(valor.valor);
147
- if (tipoInferido !== variavel.tipo) {
148
- const erroTipo = this.validarCompatibilidadeTipos(tipoInferido, variavel.tipo);
149
- if (erroTipo) {
150
- this.adicionarDiagnostico(simboloAlvo, erroTipo);
529
+ // Marca como inicializada após atribuição
530
+ this.gerenciadorEscopos.marcarComoInicializada(simboloAlvo.lexema, valor);
531
+ // Verifica o tipo do valor sendo atribuído
532
+ if (variavel.tipo) {
533
+ if (valor instanceof construtos_1.Literal) {
534
+ const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(valor.valor);
535
+ if (tipoInferido !== variavel.tipo) {
536
+ const erroTipo = this.validarCompatibilidadeTipos(tipoInferido, variavel.tipo);
537
+ if (erroTipo) {
538
+ this.erro(simboloAlvo, erroTipo);
539
+ return Promise.resolve();
540
+ }
541
+ }
542
+ }
543
+ if (valor instanceof construtos_1.Variavel) {
544
+ const variavelValor = this.gerenciadorEscopos.buscar(valor.simbolo.lexema);
545
+ if (!variavelValor) {
546
+ this.erro(valor.simbolo, `Variável não declarada: ${valor.simbolo.lexema}.`);
151
547
  return Promise.resolve();
152
548
  }
549
+ const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(variavelValor.valor);
550
+ if (tipoInferido !== variavel.tipo) {
551
+ const erroTipo = this.validarCompatibilidadeTipos(tipoInferido, variavel.tipo);
552
+ if (erroTipo) {
553
+ this.erro(valor.simbolo, erroTipo);
554
+ return Promise.resolve();
555
+ }
556
+ }
153
557
  }
558
+ // Verifica vetores
559
+ if (valor instanceof construtos_1.Vetor && !variavel.tipo.includes('[]')) {
560
+ this.erro(simboloAlvo, `Atribuição inválida, esperado tipo '${variavel.tipo}' na atribuição.`);
561
+ return Promise.resolve();
562
+ }
563
+ }
564
+ // Mantém compatibilidade com o dicionário antigo
565
+ if (this.variaveis[simboloAlvo.lexema]) {
566
+ this.variaveis[simboloAlvo.lexema].valor = valor;
154
567
  }
155
- this.variaveis[nomeVariavel].valor = valor;
568
+ return Promise.resolve();
156
569
  }
157
570
  visitarExpressaoDeChamada(expressao) {
571
+ // Marca argumentos como usados
572
+ for (const argumento of expressao.argumentos) {
573
+ if (argumento instanceof construtos_1.Variavel) {
574
+ this.gerenciadorEscopos.marcarComoUsada(argumento.simbolo.lexema);
575
+ }
576
+ }
158
577
  if (expressao.entidadeChamada instanceof construtos_1.Variavel) {
159
578
  const variavel = expressao.entidadeChamada;
160
- const funcaoChamada = this.variaveis[variavel.simbolo.lexema] || this.funcoes[variavel.simbolo.lexema];
579
+ const funcaoChamada = this.gerenciadorEscopos.buscar(variavel.simbolo.lexema) || this.funcoes[variavel.simbolo.lexema];
161
580
  if (!funcaoChamada) {
162
- this.adicionarDiagnostico(variavel.simbolo, `Função não declarada: ${variavel.simbolo.lexema}`);
581
+ this.erro(variavel.simbolo, `Função não declarada: ${variavel.simbolo.lexema}`);
163
582
  return Promise.resolve();
164
583
  }
165
584
  const funcao = funcaoChamada.valor;
166
585
  if (funcao.parametros.length != expressao.argumentos.length) {
167
- this.adicionarDiagnostico(variavel.simbolo, `Esperava ${funcao.parametros.length} ${funcao.parametros.length > 1 ? 'parâmetros' : 'parâmetro'}, mas foi passado ${expressao.argumentos.length}.`);
586
+ this.erro(variavel.simbolo, `Esperava ${funcao.parametros.length} ${funcao.parametros.length > 1 ? 'parâmetros' : 'parâmetro'}, mas foi passado ${expressao.argumentos.length}.`);
168
587
  }
169
588
  for (let [indice, argumento] of expressao.argumentos.entries()) {
170
589
  const parametroCorrespondente = funcao.parametros[indice];
171
- if (parametroCorrespondente.tipoDado) {
590
+ if (parametroCorrespondente && parametroCorrespondente.tipoDado) {
172
591
  const tipoDadoParametro = parametroCorrespondente.tipoDado.toLowerCase();
173
592
  if (argumento instanceof construtos_1.Variavel) {
174
593
  const lexemaVariavelCorrespondente = argumento.simbolo.lexema;
175
- const tipoVariavelCorrespondente = this.variaveis[lexemaVariavelCorrespondente].tipo.toLowerCase();
176
- if (tipoVariavelCorrespondente !== tipoDadoParametro) {
177
- this.adicionarDiagnostico(variavel.simbolo, `O tipo do valor passado para o parâmetro '${parametroCorrespondente.nome.lexema}' (${tipoVariavelCorrespondente}) é diferente do esperado pela função (${tipoDadoParametro}).`);
594
+ const variavelCorrespondente = this.gerenciadorEscopos.buscar(lexemaVariavelCorrespondente);
595
+ if (variavelCorrespondente) {
596
+ const tipoVariavelCorrespondente = variavelCorrespondente.tipo.toLowerCase();
597
+ if (tipoVariavelCorrespondente !== tipoDadoParametro) {
598
+ this.erro(variavel.simbolo, `O tipo do valor passado para o parâmetro '${parametroCorrespondente.nome.lexema}' (${tipoVariavelCorrespondente}) é diferente do esperado pela função (${tipoDadoParametro}).`);
599
+ }
178
600
  }
179
601
  }
180
602
  if (argumento instanceof construtos_1.Literal) {
181
603
  switch (argumento.valor.constructor.name) {
182
604
  case 'Number':
183
605
  if (!['inteiro', 'real'].includes(tipoDadoParametro)) {
184
- this.adicionarDiagnostico(variavel.simbolo, `O tipo do valor passado para o parâmetro '${parametroCorrespondente.nome.lexema}' (inteiro ou real) é diferente do esperado pela função (${tipoDadoParametro}).`);
606
+ this.erro(variavel.simbolo, `O tipo do valor passado para o parâmetro '${parametroCorrespondente.nome.lexema}' (inteiro ou real) é diferente do esperado pela função (${tipoDadoParametro}).`);
185
607
  }
186
608
  break;
187
609
  }
188
610
  }
189
611
  }
190
- else {
191
- this.adicionarDiagnostico(variavel.simbolo, 'Tipo de dados não especificado');
612
+ else if (parametroCorrespondente && !parametroCorrespondente.tipoDado) {
613
+ this.aviso(variavel.simbolo, 'Tipo de dados não especificado');
192
614
  }
193
615
  }
194
616
  }
@@ -200,17 +622,17 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
200
622
  return Promise.resolve();
201
623
  }
202
624
  visitarDeclaracaoDeExpressao(declaracao) {
203
- switch (declaracao.expressao.constructor.name) {
204
- case 'Atribuir':
625
+ switch (declaracao.expressao.constructor) {
626
+ case construtos_1.Atribuir:
205
627
  this.visitarExpressaoDeAtribuicao(declaracao.expressao);
206
628
  break;
207
- case 'Chamada':
629
+ case construtos_1.Chamada:
208
630
  this.visitarExpressaoDeChamada(declaracao.expressao);
209
631
  break;
210
- case 'Variavel':
632
+ case construtos_1.Variavel:
211
633
  this.visitarExpressaoDeVariavel(declaracao.expressao);
212
634
  break;
213
- case 'AtribuicaoPorIndice':
635
+ case construtos_1.AtribuicaoPorIndice:
214
636
  this.visitarExpressaoAtribuicaoPorIndice(declaracao.expressao);
215
637
  break;
216
638
  default:
@@ -220,20 +642,134 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
220
642
  return Promise.resolve();
221
643
  }
222
644
  visitarDeclaracaoConst(declaracao) {
645
+ // Só verifica tipo atribuído se houver inicializador
646
+ if (declaracao.inicializador) {
647
+ this.verificarTipoAtribuido(declaracao);
648
+ this.marcarVariaveisUsadasEmExpressao(declaracao.inicializador);
649
+ }
650
+ // Verifica se já existe
651
+ const constanteCorrespondente = this.gerenciadorEscopos.buscarNoEscopoAtual(declaracao.simbolo.lexema);
652
+ if (constanteCorrespondente) {
653
+ this.erro(declaracao.simbolo, 'Declaração de constante já feita.');
654
+ return Promise.resolve();
655
+ }
656
+ // Determina o valor do inicializador
657
+ let valorInicializador = undefined;
658
+ if (declaracao.inicializador) {
659
+ if (declaracao.inicializador.hasOwnProperty('valor')) {
660
+ valorInicializador = declaracao.inicializador.valor;
661
+ }
662
+ else {
663
+ valorInicializador = declaracao.inicializador;
664
+ }
665
+ }
666
+ // Declara a constante usando GerenciadorEscopos
667
+ this.gerenciadorEscopos.declarar(declaracao.simbolo.lexema, {
668
+ nome: declaracao.simbolo.lexema,
669
+ tipo: declaracao.tipo || 'qualquer',
670
+ imutavel: true,
671
+ valor: valorInicializador,
672
+ inicializada: true,
673
+ usada: false,
674
+ hashArquivo: declaracao.simbolo.hashArquivo,
675
+ linha: declaracao.simbolo.linha
676
+ });
677
+ // Mantém compatibilidade com o dicionário antigo
223
678
  this.variaveis[declaracao.simbolo.lexema] = {
224
679
  imutavel: true,
225
680
  tipo: declaracao.tipo,
226
- valor: declaracao.inicializador !== null
227
- ? declaracao.inicializador.valor !== undefined
228
- ? declaracao.inicializador.valor
229
- : declaracao.inicializador
230
- : undefined,
681
+ valor: valorInicializador,
231
682
  valorDefinido: true,
232
683
  };
233
684
  return Promise.resolve();
234
685
  }
686
+ /**
687
+ * Visita declaração de escreva com validações adicionais
688
+ */
689
+ visitarDeclaracaoEscreva(declaracao) {
690
+ if (declaracao.argumentos.length === 0) {
691
+ const { linha, hashArquivo } = declaracao;
692
+ const simbolo = {
693
+ literal: '',
694
+ tipo: '',
695
+ lexema: 'escreva',
696
+ linha,
697
+ hashArquivo,
698
+ };
699
+ this.erro(simbolo, `É preciso ter um ou mais parametros para 'escreva(...)'`);
700
+ return Promise.resolve();
701
+ }
702
+ for (const argumento of declaracao.argumentos) {
703
+ this.marcarVariaveisUsadasEmExpressao(argumento);
704
+ // Verifica interpolação de texto
705
+ if (argumento instanceof construtos_1.Literal && argumento.tipo === 'texto') {
706
+ this.verificarInterpolacaoTexto(argumento.valor, argumento);
707
+ }
708
+ // Verifica se variáveis existem
709
+ if (argumento instanceof construtos_1.Variavel) {
710
+ const possivelVariavel = this.gerenciadorEscopos.buscar(argumento.simbolo.lexema);
711
+ const possivelFuncao = this.funcoes[argumento.simbolo.lexema];
712
+ if (!possivelVariavel && !possivelFuncao) {
713
+ this.erro(argumento.simbolo, `Variável ou função '${argumento.simbolo.lexema}' não existe.`);
714
+ continue;
715
+ }
716
+ if (possivelVariavel && possivelVariavel.valor === undefined) {
717
+ this.aviso(argumento.simbolo, `Variável '${argumento.simbolo.lexema}' não foi inicializada.`);
718
+ }
719
+ }
720
+ }
721
+ return Promise.resolve();
722
+ }
723
+ /**
724
+ * Visita declaração de enquanto com validação de condição
725
+ */
726
+ visitarDeclaracaoEnquanto(declaracao) {
727
+ return this.verificarCondicao(declaracao.condicao);
728
+ }
729
+ /**
730
+ * Visita declaração de escolha com validação de tipos
731
+ */
732
+ visitarDeclaracaoEscolha(declaracao) {
733
+ const identificadorOuLiteral = declaracao.identificadorOuLiteral;
734
+ const tipo = identificadorOuLiteral.tipo;
735
+ for (let caminho of declaracao.caminhos) {
736
+ for (let condicao of caminho.condicoes) {
737
+ switch (condicao.constructor) {
738
+ case construtos_1.Literal:
739
+ const condicaoLiteral = condicao;
740
+ if (condicaoLiteral.tipo !== tipo) {
741
+ this.erro({
742
+ lexema: condicaoLiteral.valor,
743
+ tipo: condicaoLiteral.tipo,
744
+ linha: condicaoLiteral.linha,
745
+ hashArquivo: condicaoLiteral.hashArquivo,
746
+ }, `'caso ${condicaoLiteral.valor}:' não é do mesmo tipo esperado em 'escolha' (esperado: ${tipo}, atual: ${condicaoLiteral.tipo}).`);
747
+ }
748
+ break;
749
+ case construtos_1.Variavel:
750
+ const condicaoVariavel = condicao;
751
+ this.verificarVariavel(condicaoVariavel);
752
+ const variavelHipotetica = this.gerenciadorEscopos.buscar(condicaoVariavel.simbolo.lexema);
753
+ if (variavelHipotetica && typeof variavelHipotetica.valor !== tipo) {
754
+ this.erro(condicaoVariavel.simbolo, `'caso ${condicaoVariavel.simbolo.lexema}:' não é do mesmo tipo esperado em 'escolha'`);
755
+ }
756
+ break;
757
+ }
758
+ }
759
+ }
760
+ return Promise.resolve();
761
+ }
762
+ /**
763
+ * Visita declaração de retorna
764
+ */
765
+ visitarExpressaoRetornar(declaracao) {
766
+ return Promise.resolve(null);
767
+ }
235
768
  analisar(declaracoes) {
769
+ // Inicializa o estado do analisador
770
+ this.gerenciadorEscopos = new gerenciador_escopos_1.GerenciadorEscopos();
236
771
  this.variaveis = {};
772
+ this.funcoes = {};
237
773
  this.atual = 0;
238
774
  this.diagnosticos = [];
239
775
  this.corpoMetodoPrincipal = [];
@@ -241,17 +777,23 @@ class AnalisadorSemanticoPortugolStudio extends analisador_semantico_base_1.Anal
241
777
  if (declaracaoMetodoPrincipal) {
242
778
  this.corpoMetodoPrincipal = declaracaoMetodoPrincipal.funcao.corpo;
243
779
  }
780
+ // Processa declarações globais (exceto o método principal)
244
781
  for (const declaracao of declaracoes) {
245
- if (declaracao instanceof declaracoes_1.FuncaoDeclaracao || declaracao instanceof declaracoes_1.Var) {
782
+ if (declaracao instanceof declaracoes_1.FuncaoDeclaracao || declaracao instanceof declaracoes_1.Var || declaracao instanceof declaracoes_1.Const) {
246
783
  if (declaracao.simbolo.lexema !== 'inicio') {
247
784
  declaracao.aceitar(this);
248
785
  }
249
786
  }
250
787
  }
788
+ // Processa o corpo do método principal
251
789
  while (this.atual < this.corpoMetodoPrincipal.length) {
252
790
  this.corpoMetodoPrincipal[this.atual].aceitar(this);
253
791
  this.atual++;
254
792
  }
793
+ // Verifica variáveis não usadas ao final da análise
794
+ // NOTA: Este recurso está comentado para manter compatibilidade com testes existentes.
795
+ // Descomente para habilitar avisos sobre variáveis não utilizadas.
796
+ // this.verificarVariaveisNaoUsadas();
255
797
  return {
256
798
  diagnosticos: this.diagnosticos,
257
799
  };
@@ -1 +1 @@
1
- {"version":3,"file":"analisador-semantico-portugol-studio.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-portugol-studio.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analisador-semantico-portugol-studio.js","sourceRoot":"","sources":["../../fontes/analisador-semantico/analisador-semantico-portugol-studio.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designliquido/portugol-studio",
3
3
  "description": "Dialeto de Portugol Studio baseado em Delégua e TypeScript",
4
- "version": "0.6.6",
4
+ "version": "0.7.0",
5
5
  "license": "MIT",
6
6
  "bugs": {
7
7
  "url": "https://github.com/DesignLiquido/portugol-studio/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.0",
27
+ "@designliquido/delegua": "0.65.0",
28
28
  "lodash": "^4.17.21",
29
29
  "node-fetch": "2",
30
30
  "xml2js": "^0.6.2"