# Symbool (informatica)

Een symbool in de informatica is een discrete waarde waaraan een semantische inhoud, dat wil zeggen een specifieke betekenis, is toegevoegd. Meer specifiek een associatie van een identifier met zijn eigenschappen, waaronder het geheugenadres, naam, type en taalafhankelijke restricties, voorbeelden hiervan zijn definities van klassen, variabelen, functies en constanten.

## Doel

Het doel van het gebruik van symbolen is vierledig:
* Symbolen zijn gemakkelijker te begrijpen, aangezien het lexeem, de tekst van het symbool, gebruikt kan worden voor verduidelijking. Een functienaam zoals calculate_error zegt meer dan een letterlijke instructie call $7FCE:D832.
* Een symbool kan onderscheid maken tussen verschillende betekenissen van dezelfde waarde. Als een tabel A en tabel B allebei 10 elementen bevatten, kan men aan een getal 10 niet zien of het op tabel A of B slaat. Het symbool TABLE_A_SIZE maakt echter zeer duidelijk welke tabel bedoeld wordt.
* Aangezien een symbool slechts op een plaats is gedefinieerd, hoeft er maar een wijziging te worden aangebracht als de waarde verandert. Is overal in het programma een letterlijke waarde gebruikt, moet deze waarde op vele plaatsen worden veranderd. In het bovenstaande voorbeeld hoeft alleen de waarde van TABLE_A_SIZE te worden veranderd en hoeft niet voor ieder voorkomen van het getal 10 te worden uitgezocht of deze waarde op Tabel A, Tabel B of iets anders betrekking heeft.
* Het loskoppelen van de waarde en de implementatie. Dit treedt bijvoorbeeld sterk op de voorgrond in object georiënteerde programmeertalen, waar een symbool, een method-call bijvoorbeeld, verschillende implementaties in verschillende klassen kan hebben, maar ook HTML-tags zijn een goed voorbeeld, aangezien het effect van een tag afhankelijk is van de browser, terwijl de tag zelf door alle browsers wordt begrepen.

## Verder gebruik

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 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 geheugenadres of een reeks van geheugenadressen en de symbolische naam, vereenvoudigt dit het vinden van fouten in de broncode, in de source.

## Primitieve symbolen

Een speciaal geval vormen 'primitieve' of 'axiomatische' symbolen. Deze worden, in tegenstelling tot normale symbolen, niet in de programmatekst gedefinieerd, maar zijn in de definitie van de taal vastgelegd. Alle andere symbolen worden gedefinieerd in termen van primitieve symbolen. Voorbeelden van primitieve symbolen zijn sleutelwoorden, zoals 'if' en 'else', en voorgedefinieerde types, zoals 'int' en 'float'.

## Voorbeelden van symbolen

* karakters
* identifiers en sleutelwoorden in verschillende computertalen
* HTML-tags
* M Marcotty en H Ledgard. Programming language landscape, Syntax, semantics, implementation, 1985. ISBN 978-0-574-21945-9
* AS Tanenbaum. Structured Computer Organisation, 1984. voor de Vrije Universiteit Amsterdam