Kompilering er processen med at konvertere kildekode skrevet i et programmerings- eller opmærkningssprog til eksekverbar kode. Det inkluderer forskellige stadier, der hver transformerer koden til en form på lavere niveau, indtil den endelige eksekverbare kode er produceret. Her er en generel oversigt over kompileringsprocessen:
1. Forbehandling:
- Dette er et valgfrit trin, der finder sted før egentlig kompilering.
- Præprocessoren behandler makroer, betingede erklæringer og inkluderer direktiver for at forberede kildekoden til yderligere kompilering.
2. Leksikalsk analyse (scanning):
- Kildekoden er opdelt i individuelle tokens, såsom nøgleord, identifikatorer, operatorer og tegnsætning.
- Den leksikalske analysator, også kendt som scanneren, identificerer disse tokens og konverterer dem til en sekvens af meningsfulde symboler.
3. Syntaksanalyse (parsing):
- Syntaksanalysatoren eller parseren kontrollerer, om sekvensen af tokens følger grammatikreglerne for programmerings- eller markupsproget.
- Den konstruerer en hierarkisk struktur, der repræsenterer programmets syntaks og kontrollerer for syntaksfejl.
4. Semantisk analyse:
- Compileren udfører semantisk analyse for at sikre, at programmet er semantisk korrekt.
- Det tjekker for datatypers kompatibilitet, variable erklæringer og referencer samt for logiske fejl eller uoverensstemmelser i koden.
5. Generation af mellemrepræsentation (IR):
- Compileren oversætter kildekoden til en mellemrepræsentation (IR) såsom abstrakte syntakstræer (AST) eller tre-adressekode.
- IR er en sproguafhængig repræsentation af programmets struktur og semantik.
6. Optimering:
- Compiler-optimeringer anvendes til IR for at forbedre effektiviteten af den genererede kode.
- Optimeringer kan omfatte konstant udbredelse, sløjfeudrulning, registerallokering og eliminering af død kode.
7. Kodegenerering:
- Den optimerede IR konverteres til assemblersprog, som er en symbolsk repræsentation på lavt niveau af maskininstruktionerne.
- Assembly kode er specifik for målprocessorarkitekturen.
8. Linking:
- For større programmer kombinerer linkningsfasen objektfiler genereret fra forskellige kildefiler og eksterne biblioteker.
- Linking løser symbolreferencer mellem moduler og sikrer, at alle afhængigheder er opfyldt.
9. Montering:
- Assembleren konverterer assemblersprogkoden til maskinkode, som er binære instruktioner, som computeren kan udføre direkte.
10. Udførelse:
- Den endelige maskinkode indlæses i computerens hukommelse og udføres af CPU'en.
Kompileringsprocessen er en række transformationer, der gør det muligt at oversætte et sprogprogram på højt niveau skrevet af mennesker til en form, der kan forstås direkte af computeren. Hvert trin i processen bringer koden tættere på maskinens modersmål, samtidig med at den sikrer korrekthed og effektivitet.