Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
-
Upload
adriano-teixeira-de-souza -
Category
Technology
-
view
5.057 -
download
0
Transcript of Paradigmas de Linguagens de Programação - Escopo estático/dinâmico
Prof. Adriano Teixeira de Souza
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
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
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
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
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
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
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
Se o escopo for dinâmico o programa imprime 4
Se o escopo for estático, o programa imprime 3
Prof. Adriano Teixeira de Souza
x: integer
procedure print_x()
begin
print(x);
end
procedure p2
x: integer;
begin
x= 4;
print_x();
end
begin
x = 3;
p2();
end