Symbol table

Een symbol table is in de informatica een datastructuur die voornamelijk gebruikt wordt in compilers en interpreters.

Een symbol table associeert met iedere identifier in de broncode een verzameling informatie over deze identifier, zoals het datatype van de variabele die door de identifier aangeduid wordt en de plaats in het geheugen waar de inhoud van de variabele te vinden is.

De implementatie van symbol tables wordt gecompliceerd door twee factoren:

  1. De informatie die bij een bepaalde identifier hoort verschilt voor de verschillende dingen die een identifier kan aanduiden. Bijvoorbeeld: voor een primitieve variabele worden het type en de plaats in het geheugen in de symbol table opgeslagen, voor een functie het aantal formele parameters en hun typen plus het returntype en voor een class de methoden en attributen die bij die class horen.
  2. Iedere identifier heeft een bereik. Sommige variabelen, functies of door de gebruiker gedefinieerde typen zijn alleen zichtbaar in een gedeelte van het programma. Daarnaast kan dezelfde identifier naar verschillende dingen verwijzen op verschillende plaatsen in de code. Bijvoorbeeld: in een functie met een lokale variabele a verwijst de identifier a naar een andere variabele dan buiten deze functie als er ook een globale variabele a is.

De in door de compiler samengestelde symbol table wordt in de regel in de objectcode opgeslagen. Deze tabel, samen met informatie over bestanden en regelnummers waar het symbool is gedefinieerd (de debug info), dient als basis voor zogeheten symbolic- of sourcelevel debuggers, die in tegenstelling tot klassieke debuggers niet alleen een geheugenadres, maar ook de naam van de variabele in de programmatekst weergeven. Omdat hiermee een rechtstreekse link kan worden gelegd tussen een (reeks van) geheugenadres(sen) en de symbolische naam, vereenvoudigt dit het vinden van fouten in de broncode (de source).