@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.
- package/analisador-semantico/analisador-semantico-birl.d.ts +132 -12
- package/analisador-semantico/analisador-semantico-birl.d.ts.map +1 -1
- package/analisador-semantico/analisador-semantico-birl.js +712 -21
- package/analisador-semantico/analisador-semantico-birl.js.map +1 -1
- package/package.json +2 -2
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
16
|
-
[
|
|
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
|
-
|
|
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,
|
|
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
|
|
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.
|
|
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
|
-
|
|
17
|
-
//
|
|
18
|
-
|
|
19
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
30
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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 ${
|
|
681
|
+
mensagem: `A variável ${nomeVariavel} não foi declarada.`,
|
|
44
682
|
hashArquivo: expressao.hashArquivo,
|
|
45
683
|
linha: expressao.linha,
|
|
46
|
-
severidade:
|
|
684
|
+
severidade: interfaces_1.DiagnosticoSeveridade.ERRO,
|
|
47
685
|
});
|
|
48
686
|
return Promise.resolve();
|
|
49
687
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
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 ${
|
|
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:
|
|
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
|
-
|
|
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.
|
|
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.
|
|
40
|
+
"@designliquido/delegua": "^0.66.0",
|
|
41
41
|
"lodash": "^4.17.21"
|
|
42
42
|
}
|
|
43
43
|
}
|