Aula 15: Análise Semântica: Tabelas de Símbolos

Objetivos

  • Mapear identificadores para atributos.
  • Implementar Tabelas de Símbolos com escopo.

Conteúdo

Até agora, nosso compilador só sabe “forma” (sintaxe). Ele aceita x = y + 1 mesmo que y não exista ou x seja uma função. A Análise Semântica dá significado ao código.

A Tabela de Símbolos

É o banco de dados do compilador. Ela mapeia Nomes (Strings) \(\to\) Informações (Símbolos). Que informações? - Tipo (int, float, array). - Categoria (variável, função, classe). - Endereço de memória (offset na pilha ou endereço global). - Tamanho.

Gerenciamento de Escopo

A maioria das linguagens modernas tem escopo léxico (variáveis dentro de {} só existem lá). Implementação comum: 1. Pilha de Tabelas: - Ao entrar num bloco, empilha uma nova Tabela vazia. - Ao declarar variável, insere na tabela do topo. - Ao usar variável, busca do topo para a base (do mais local para o mais global). - Ao sair do bloco, desempilha (esquece as variáveis locais).

  1. Árvore de Escopos: Mantém os escopos linkados para permitir análises posteriores (ex: debugger precisa saber variáveis de blocos passados).

Referências

  • Aho, A. V., Lam, M. S., Sethi, R., & Ullman, J. D. (2006). Compilers: Principles, Techniques, and Tools.
  • Cooper, K., & Torczon, L. (2011). Engineering a Compiler.
Back to top