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