@designliquido/delegua
Version:
Linguagem de programação simples e moderna usando português estruturado.
41 lines • 2.09 kB
TypeScript
import { SimboloInterface } from '../../../interfaces';
import { PilhaEscoposExecucao } from '../../pilha-escopos-execucao';
/**
* Pilha de escopos de execução específica para Pituguês.
*
* Diferentemente de Delégua, Pituguês segue a regra de escopo local-first do
* Python para atribuições dentro de funções:
*
* - Fora de uma função (escopo global, laços no nível global): o comportamento
* é o padrão — a pilha é percorrida para encontrar a variável e atualizá-la,
* ou ela é criada no escopo atual caso ainda não exista.
*
* - Dentro de uma função: a atribuição é sempre resolvida dentro da cadeia de
* escopos da própria função (do topo da pilha até o escopo de tipo 'funcao'
* inclusive), sem cruzar a fronteira para escopos ancestrais (globais). Se a
* variável não for encontrada nessa cadeia, ela é criada no escopo da função
* (não no escopo de laço interno, refletindo o comportamento do Python onde
* `if`/`while`/`for` não criam namespaces próprios).
*
* Leituras continuam percorrendo toda a pilha normalmente.
*/
export declare class PilhaEscoposExecucaoPitugues extends PilhaEscoposExecucao {
/**
* Retorna o índice do escopo de função mais recente na pilha, ou -1 se não
* houver nenhum (estamos no nível global).
*/
private indiceFuncaoAtual;
/**
* Atribui um valor a uma variável seguindo a semântica de escopo do Pituguês.
*
* Casos:
* 1. Atribuição indexada (`x[i] = v`) → comportamento padrão (percorre a pilha).
* 2. Fora de função → comportamento padrão com criação implícita se necessário.
* 3. Dentro de função:
* a. Variável encontrada na cadeia de escopos da função → atualiza lá.
* b. Variável não encontrada (só existe no escopo global, ou é nova) →
* cria no escopo da função (não no escopo de laço interno).
*/
atribuirVariavel(simbolo: SimboloInterface, valor: any, indice?: number): void;
}
//# sourceMappingURL=pilha-escopos-execucao-pitugues.d.ts.map