Tabela de Simbolos
Usada para guardar informações sobre os identificadores declarados em um programa, Tabela de Símbolos é pesquisada cada vez que um identificador é encontrado no programa fonte, A gerência da Tabela de Símbolos de um compilador deve ser implementada de forma a permitir inserções, eliminações e consultas da forma mais eficiente possível.
Objetivo no processo de compilação
Como pode ser implementado
Podem ser implementadas por:
- Listas lineares;
- Tabelas hash;
Lista linear: - fácil implementação; - desempenho pobre para N e E grandes.
Tabela hash. - melhor desempenho; - mais esforço de programação; - mais espaço para armazenamento.
Entradas
Cada entrada é a declaração de um nome.
- Formato pode não ser uniforme;
- As informações armazenadas para cada nome podem variar de acordo com o tipo/uso do nome;
Entradas podem ser implementadas como registros ("record" ou "struct") contendo campos (nome, tipo, classe, tamanho, escopo, etc.) que a qualificam.
Se o número máximo de caracteres em um nome for limitado e pequeno:
- Alocação estática;
Se o número máximo e limite não determinados:
- Alocação dinâmica;
Operações que realiza
- verificar se um dado nome está na Tabela de Símbolos; - inserir um nome na Tabela de Símbolos; - acessar a info. associada a um nome; - adicionar info. associada a nome; - eliminar 1 ou grupo de nomes;
Exemplo int x; struct x {float y, z;}; x: inteiro e rótulo de uma estrutura de campos.
Neste caso:
- léxico retorna ao sintático o nome (ou um apontador para o lexema que forma o nome);
- registro na tabela: criado quando o papel sintático do nome for detectado
- duas entradas para x: inteiro e estrutura.
Bibliografia http://www.di.ufpb.br/clauirton/Compiladores/5TabelaSimbolos.ppt http://www.inf.ufes.br/~novaes/material/compiladores/tabela%20de%20Simbolos.ppt