@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
77 lines • 2.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GerenciadorEscopos = void 0;
class GerenciadorEscopos {
constructor() {
this.escopos = [];
// Escopo global
this.empilharEscopo();
}
empilharEscopo() {
this.escopos.push(new Map());
}
desempilharEscopo() {
return this.escopos.pop();
}
declarar(nome, variavel) {
const escopoAtual = this.escopos[this.escopos.length - 1];
// Verifica se já existe no escopo atual
if (escopoAtual.has(nome)) {
return false; // Já declarada no escopo atual
}
escopoAtual.set(nome, variavel);
return true;
}
buscar(nome) {
// Busca do escopo mais interno para o mais externo
for (let i = this.escopos.length - 1; i >= 0; i--) {
const variavel = this.escopos[i].get(nome);
if (variavel) {
return variavel;
}
}
return undefined;
}
buscarNoEscopoAtual(nome) {
const escopoAtual = this.escopos[this.escopos.length - 1];
return escopoAtual.get(nome);
}
marcarComoInicializada(nome, valor) {
const variavel = this.buscar(nome);
if (variavel) {
variavel.inicializada = true;
variavel.usada = true;
if (valor !== undefined) {
variavel.valor = this.extrairValor(valor);
}
}
}
extrairValor(construto) {
if (construto === null || construto === undefined) {
return undefined;
}
if (construto.hasOwnProperty('valor')) {
return construto.valor;
}
return construto;
}
marcarComoUsada(nome) {
const variavel = this.buscar(nome);
if (variavel) {
variavel.usada = true;
}
}
obterVariaveisNaoUsadas() {
const naoUsadas = [];
for (let escopo of this.escopos) {
for (let variavel of escopo.values()) {
if (!variavel.usada) {
naoUsadas.push(variavel);
}
}
}
return naoUsadas;
}
}
exports.GerenciadorEscopos = GerenciadorEscopos;
//# sourceMappingURL=gerenciador-escopos.js.map