2. O escopo de uma variável é a faixa de
comandos em que a mesma é visível
◦ Uma variável é visível em um comando se puder ser
referenciada naquele comando
◦ Uma variável é local a uma unidade de programa se
foi declarada nela
◦ Uma variável é não-local a uma unidade de
programa se for visível mas não tiver sido declarada
nela
Prof. Adriano Teixeira de Souza
3. As regras de escopo de uma linguagem
determinam:
◦ como uma ocorrência de um nome é associada a
uma variável
◦ como referências a variáveis declaradas fora da
unidade em execução são associadas a suas
declarações
Escopo pode ser:
◦ estático
◦ dinâmico
Prof. Adriano Teixeira de Souza
4. A vinculação do tipo de dados de uma
variável pode ser especificada de forma
estática ou dinâmica.
◦ Vinculação estática: quando a vinculação ocorrer
antes do tempo de execução e permanecer
inalterada durante todo o tempo de execução do
programa.
◦ Vinculação dinâmica: quando a vinculação ocorre
durante a execução ou é alterada durante a
execução do programa.
Prof. Adriano Teixeira de Souza
5. Em LPs com escopo estático (ou léxico), o
escopo é determinado através da estrutura
textual do programa.
Em LPs com escopo dinâmico, o escopo é
determinado através da linha de execução do
programa, sendo dependente portanto da
ordem de execução das rotinas.
Prof. Adriano Teixeira de Souza
6. Usando escopo estático, a vinculação de um
nome no ambiente é determinada pelo seguinte
algoritmo:
◦ i) Se o nome foi declarado no bloco em execução, aquela
vinculação será usada. Caso contrário,
◦ ii) Se o nome não foi declarado no bloco em execução,
ele deve ser buscado nos blocos que o envolvem, do
imediatamente envolvente até o mais distante. Se todos
os blocos envolventes tiverem sido verificados e a
declaração não encontrada,
◦ iii) Se o nome está no ambiente global, aquela
vinculação será usada, caso contrário não há vinculação
para aquele nome no ambiente.
Prof. Adriano Teixeira de Souza
7. Pode-se informalmente dizer que o trecho de
código onde um nome é visível é o bloco
onde foi declarado e todos os blocos
aninhados dentro dele, e por este motivo
muitas vezes usa-se “escopo léxico” como
sinônimo de “escopo estático”.
Prof. Adriano Teixeira de Souza
8. Usando escopo dinâmico, a vinculação válida
para um nome é a criada mais recentemente
durante a execução do programa.
Baseado em sequências de chamadas de
unidades de programas, não no leiaute
textual.
Referências a variáveis estão conectadas a
declarações através da busca invertida
através da sequência de chamadas de
subprogramas.
Prof. Adriano Teixeira de Souza
9. x: integer
procedure print_x()
begin
print(x);
end Se o escopo for dinâmico
procedure p2
x: integer;
o programa imprime 4
begin
x= 4; Se o escopo for estático, o
print_x();
end
programa imprime 3
begin
x = 3;
p2();
end
Prof. Adriano Teixeira de Souza