Kompilering är processen att konvertera källkod skriven i ett programmerings- eller märkningsspråk till körbar kod. Den innehåller olika steg, var och en omvandlar koden till en form på lägre nivå tills den slutliga körbara koden produceras. Här är en allmän översikt över sammanställningsprocessen:
1. Förbehandling:
– Det här är ett valfritt skede som inträffar innan själva sammanställningen.
- Förprocessorn bearbetar makron, villkorliga uttalanden och inkluderar direktiv för att förbereda källkoden för ytterligare kompilering.
2. Lexikal analys (skanning):
- Källkoden är uppdelad i individuella tokens, såsom nyckelord, identifierare, operatorer och skiljetecken.
- Den lexikaliska analysatorn, även känd som skannern, identifierar dessa tokens och omvandlar dem till en sekvens av meningsfulla symboler.
3. Syntaxanalys (analys):
- Syntaxanalysatorn eller analysatorn kontrollerar om sekvensen av tokens följer grammatikreglerna för programmerings- eller märkningsspråket.
- Den konstruerar en hierarkisk struktur som representerar programmets syntax och kontrollerar efter syntaxfel.
4. Semantisk analys:
- Kompilatorn utför semantisk analys för att säkerställa att programmet är semantiskt korrekt.
- Den kontrollerar för datatypers kompatibilitet, variabeldeklarationer och referenser, såväl som för logiska fel eller inkonsekvenser i koden.
5. Generation av mellanliggande representation (IR):
- Kompilatorn översätter källkoden till en mellanrepresentation (IR) såsom abstrakta syntaxträd (AST) eller treadresskod.
– IR är en språkoberoende representation av programmets struktur och semantik.
6. Optimering:
- Kompilatoroptimeringar tillämpas på IR för att förbättra effektiviteten hos den genererade koden.
- Optimering kan inkludera konstant spridning, slingupprullning, registerallokering och eliminering av död kod.
7. Kodgenerering:
- Den optimerade IR konverteras till assemblerspråk, som är en symbolisk representation på låg nivå av maskininstruktionerna.
- Assembly-koden är specifik för målprocessorns arkitektur.
8. Länka:
- För större program kombinerar länkningssteget objektfiler genererade från olika källfiler och externa bibliotek.
- Länkning löser symbolreferenser mellan moduler och säkerställer att alla beroenden är uppfyllda.
9. Montering:
- Assembleren omvandlar assemblerspråkkoden till maskinkod, som är binära instruktioner som datorn kan exekvera direkt.
10. Utförande:
- Den slutliga maskinkoden laddas in i datorns minne och exekveras av CPU:n.
Sammanställningsprocessen är en serie transformationer som gör att ett språkprogram på hög nivå skrivet av människor kan översättas till en form som direkt kan förstås av datorn. Varje steg i processen för koden närmare maskinens modersmål samtidigt som den säkerställer korrekthet och effektivitet.