Une table de symboles est une centralisation des informations rattachées aux identificateurs d'un programme informatique. C'est une fonction accélératrice de compilation, dont l'efficacité dépend de la conception. Dans une table des symboles, on retrouve des informations comme : le type, l'emplacement mémoire, la portée, la visibilité, etc.
Généralement, la table est créée dynamiquement. Une première portion est créée au début de la compilation. Puis, de façon opportuniste, en fonction des besoins, elle est complétée.
La première fois qu'un symbole est vu (au sens des règles de visibilité du langage), une entrée est créée dans la table.
Le remplissage de cette table (la collecte des informations) a lieu lors des phases d'analyse.
L'identification est le processus de recherche d'un identificateur dans la table des symboles.
La table des symboles réunit des informations sur les identificateurs : nature, type, valeur initiale, propriétés d'allocation :
Pour toute variable, elle garde l’information de : son nom, son type, sa portée et son adresse en mémoire ;
Pour toute fonction ou procédure, elle garde l’information de : son nom, sa portée, le nom et le type de ses arguments, ainsi que leur mode de passage, et éventuellement le type du résultat qu’elle fournit ;
Pour permettre un accès rapide, la table des symboles est indexée par le nom de l'identificateur (chaîne de caractères), d'où l'utilisation d'une table de hachage ;
Lors de la définition d'un identificateur, on insère une entrée dans la table de symboles. Cette déclaration est généralement unique, à moins d'une surcharge ;
Lors de l'utilisation d'un identificateur, on le recherche dans la table ;
Dans certains compilateurs, les mots-clés du langage ne font pas partie de la syntaxe mais sont insérés dans la table des symboles ;
Les propriétés d'un identificateur peuvent être des structures complexes (arbres, tables, listes, champs...).