En kompilator är ett program som översätter människoläsbar källkod till datorkörbar maskinkod. För att göra detta framgångsrikt måste den mänskliga läsbara koden följa syntaxreglerna för vilket programmeringsspråk det är skrivet i. Kompilatorn är bara ett program och kan inte fixa din kod för dig. Om du gör ett misstag måste du korrigera syntaxen, annars kommer den inte att kompilera.
En kompilators komplexitet beror på språkets syntax och hur mycket abstraktion som programmeringsspråk ger. En C-kompilator är mycket enklare än en kompilator för C ++ eller C #.
Vid sammanställning läser kompilatorn först en ström av tecken från en källkodfil och genererar en ström av lexikala token. Till exempel C ++ -koden:
int C = (A * B) +10;
kan analyseras som dessa symboler:
Den leksikala utgången går till den syntaktiska analysatordelen av kompilatorn, som använder grammatikreglerna för att avgöra om ingången är giltig eller inte. Såvida inte variablerna A och B tidigare deklarerats och omfattade, kan kompilatorn säga:
Om de deklarerades men inte initialiserades. kompilatorn ger en varning:
Du bör aldrig ignorera kompilatorvarningar. De kan bryta din kod på konstiga och oväntade sätt. Fixa alltid kompilatorvarningar.
Vissa programmeringsspråk är skrivna så att en kompilator kan läsa källkoden bara en gång och generera maskinkoden. Pascal är ett sådant språk. Många kompilatorer kräver minst två pass. Ibland beror det på framåtdeklarationer om funktioner eller klasser.
I C ++ kan en klass deklareras men inte definieras förrän senare. Kompilatorn kan inte räkna ut hur mycket minne klassen behöver förrän den sammanställer klassen. Den måste läsa om källkoden innan den skapar rätt maskinkod.
Förutsatt att kompilatorn framgångsrikt slutför de leksikala och syntaktiska analyserna, genererar det sista steget maskinkod. Detta är en komplicerad process, särskilt med moderna CPU: er.