Você está na página 1de 2

. Tabela de Símbolos: .

- A Tabela de Símbolos é um componente essencial na tradução de programas de


computador.
- Ela funciona como um catálogo organizado para registrar informações sobre nomes
declarados no código fonte.
- Nomes incluem variáveis, funções, classes e outros identificadores.
- A tabela armazena associações relevantes, como tipos de dados, escopos de declaração
e, às vezes, endereços de memória.
- Na análise semântica, a Tabela de Símbolos assegura que as referências aos nomes
estejam corretamente associadas às suas declarações.

Construção da Tabela de Símbolos:

- A construção da Tabela de Símbolos envolve a organização de informações para cada


nome declarado.
- Cada nome tem seu próprio "escopo", que define onde ele é válido.
- Escopos podem ser disjuntos (não se sobrepõem) ou aninhados (um escopo dentro de
outro).
- Para gerenciar referências válidas que não pertencem ao escopo atual, usa-se uma pilha
de escopos.
- Ao analisar o programa, um dicionário de símbolos é empilhado para cada novo escopo
encontrado e desempilhado ao sair do escopo.

Algoritmo para Tratar Referências Não-locais:

- A resolução de referências não-locais envolve encontrar nomes que não pertencem ao


escopo atual.
- Utiliza-se um algoritmo baseado na pilha de escopos.
- Cada novo escopo gera um dicionário que é empilhado no topo.
- Ao encontrar uma referência a um nome, verifica-se o dicionário do escopo atual.
- Se o nome não for encontrado, a busca continua nos dicionários abaixo na pilha.
- Caso não seja localizado em nenhum dicionário, um erro é gerado indicando que o nome
não foi declarado.

Exemplo de Uso da Pilha de Dicionários:

Imagine um programa C com funções aninhadas e variáveis de diferentes escopos. Cada função
tem seu próprio dicionário de símbolos. Ao analisar, empilha-se um dicionário para cada novo
escopo. Ao encontrar uma referência, a busca começa no dicionário do escopo atual (topo da
pilha). A busca desce até encontrar o nome ou atingir a base da pilha. Isso permite resolver
referências válidas em diferentes escopos aninhados
R Resolução de Referências: m

Resolução de Referências:

A resolução de referências determina a associação correta para um nome referenciado.


O ambiente de referências inclui o escopo de declaração e escopos aninhados.
O tradutor busca a declaração apropriada mesmo quando o nome não está no escopo atual.
Importante quando nomes idênticos estão em partes distintas do programa.
A pilha de escopos e busca sequencial nos dicionários permitem resolução precisa e eficiente.

. Escopo Dinâmico: .

Escopo Dinâmico: Construção, Gerenciamento e Resolução:

Escopo dinâmico constrói Tabela de Símbolos na compilação e gerencia pilha de escopos na


execução.
Escopos são empilhados e desempilhados conforme funções são chamadas e retornam.
Resolução de nomes baseada no histórico de chamadas de funções durante a execução.
Dicionários de símbolos das funções chamadas têm prioridade na resolução, permitindo
tratamento de referências não-locais.
Tradutor usa histórico de chamadas para determinar qual dicionário deve ser consultado.

Escopo Estático e Exceções:

Escopo estático mais comum em linguagens modernas.


Tabela de Símbolos e gerenciamento de escopos ocorrem na compilação.
Resolução de nomes baseada em análise do código fonte, sem histórico de chamadas.
Algumas linguagens, como Common Lisp e Perl, suportam escopo dinâmico por razões históricas
e específicas.

Você também pode gostar