Professional Documents
Culture Documents
Aula 8
Aula 8
Aula Prática 7
Tabelas de símbolos
Eduardo Marques
DCC-Departamento de Ciência de Computadores
FCUP – Faculdade de Ciências da Universidade do Porto
Notas disponíveis em
http://www.dcc.fc.up.pt/~edrdo/compiladores
Tabelas de símbolos
● Uma tabela de símbolos é usado por um
compilador para manter informação sobre
construções da linguagem identificadas por um
nome:
– Variáveis
– Funções
– Tipos
● Que tipo de informação (além do nome)?
– Escopo, tipo, modificadores (depende da construção)
2
Interface a uma tabela de símbolos
● Semelhante ao de qualquer estrutura MAP genérica
MAP: Name → Symbol
● Provém duas operações básicas
– int stDefine(symbTree* st, char* name, symb* st)
– symb_t* stLookup(symbTree* st, char* name)
● stDefine()
– Chamada quando um novo símbolo é definido
● stLookup()
– Chamada para procurar um símbolo
● Outras duas pelo menos serão necessárias
– stCreate(), stFree() – para criação/libertação 3
Possíveis implementações
● As usuais para uma estrutura MAP
– Array (ou lista)
– Árvore (binária ou não)
– Hash tables ("flat" ou ligada)
● Geralmente combinadas com o uso de uma
"pool" de constantes - buffer único para guardar
os nomes (strings)
4
Array
0 1 2 3
info info info info
name name name name
'X' '\0' 'Y' '\0' 'A' 'B' 'C' '\0' 'D' 'E' 'F' '\0' .... ... ... ... ... ... ... ...
Constant
pool
5
6
Árvore (binária)
info name
left right
'X' '\0' 'Y' '\0' 'A' 'B' 'C' 'X' '\0' 'D' 'E' 'F' '\0' ....
'X' '\0' 'Y' '\0' 'A' 'B' 'C' '\0' 'D' 'E' 'F' '\0' ....
8
Eficiência (tempo)
● Array desordenados
● Inserção: O(1)
● Pesquisa: O(n)
● Array ordenado
● Inserção: O(n/2)
● Pesquisa: O(log n)
● Árvore - Inserção / Pesquisa : O(log n)
● Hash table ligada - Inserção / Pesquisa: O(N/B) para
B=número de buckets ~ O(1) para B suficientemente
grande e boa definição de função de "hashing"
9
● Eficiência em espaço: todas O(n) ...
...
Locais ao bloco interno
}
12
}
Escopo & ST
- possível implementação
● Tabela de símbolos globais (externos)
'V' '_' X' '\0' 'V' '_' 'Y'\0' 'A' 'R' 'G' '_' 'X''\0' ....
14
Exercícios
● 5. Indique as alterações gerais necessárias à
gramática bison (sintaxe e acções semânticas)
definida no exercício 4 para lidar com blocos
internos de instruções dentro de funções. Depois
implemente-as.
15