Phase vs Pass in Compiler
I allmänhet är kompilatorn ett datorprogram som läser ett program skrivet på ett språk, som kallas källspråket, och översätter det till ett annat språk, som kallas målspråket. Traditionellt var källspråk ett språk på hög nivå som C++ och målspråk var ett lågnivåspråk såsom Assembly-språk. Så i allmänhet kan kompilatorer ses som översättare som översätter från ett språk till ett annat. Pass och Phase är två termer som ofta används med kompilatorer. Antal pass för en kompilator är antalet gånger den går över källan (eller någon form av representation av den). En kompilator är uppdelad i delar för att underlätta konstruktionen. Fas används ofta för att anropa en sådan enskild oberoende del av en kompilator.
Vad är ett pass i en kompilator?
Ett standardsätt att klassificera kompilatorer är efter antalet "pass". Vanligtvis är kompilering en relativt resurskrävande process och från början hade datorer inte tillräckligt med minne för att hålla ett sådant program som gjorde hela jobbet. På grund av denna begränsning av hårdvaruresurser i tidiga datorer, bröts kompilatorerna ner i mindre underprogram som gjorde sitt partiella jobb genom att gå över källkoden (gjorde en "passering" över källan eller någon annan form av den) och utförde analys, transformationer och översättningsuppgifter separat. Så, beroende på denna klassificering, identifieras kompilatorer som enpass- eller multipasskompilatorer.
Som namnet antyder kompilerar enpassskompilatorer i ett enda pass. Det är lättare att skriva en enpassskompilator och dessutom presterar de snabbare än flerpasskompilatorer. Därför, även vid den tidpunkt då man hade resursbegränsningar, utformades språk så att de kunde kompileras i ett pass (t.ex. Pascal). Å andra sidan består en typisk multi-pass kompilator av flera huvudsteg. Det första steget är skannern (även känd som lexikalanalysatorn). Scanner läser programmet och konverterar det till en rad tokens. Det andra steget är analysen. Den konverterar strängen av tokens till ett analysträd (eller ett abstrakt syntaxträd), som fångar programmets syntaktiska struktur. Nästa steg är att tolka semantiken i den syntaktiska strukturen. Kodoptimeringsstegen och det sista kodgenereringssteget följer detta.
Vad är en fas i en kompilator?
Begreppsfasen kommer ofta upp när man pratar om kompilatorkonstruktion. Ursprungligen var kompilatorer alla enkla delar av en enda, monolitisk programvara skriven av en person för sammanställning av ett enkelt språk. Men när källkoden för språket som ska översättas blir komplex och stor, bröts kompilatorn upp i flera (relativt oberoende) faser. Fördelen med att ha olika faser är att utvecklingen av kompilatorn kan distribueras bland ett team av utvecklare. Dessutom förbättrar den modulariteten och återanvändningen genom att tillåta faser att ersättas av förbättrade eller ytterligare faser (som ytterligare optimeringar) som ska läggas till kompilatorn. Processen att dela upp sammanställningen i faser introducerades av PQCC (Production Quality Compiler-Compiler Project) vid Carnegie Melon University. De introducerade termerna front end, middle end och back end. De flesta kompilatorer har minst två faser. Men vanligtvis kapslar bakänden och frontänden in dessa faser.
Vad är skillnaden mellan Phase och Pass i kompilatorn?
Fas och Pass är två termer som används inom kompilatorområdet. Ett pass är en enda gång som kompilatorn passerar (går igenom) källkoden eller någon annan representation av den. Vanligtvis har de flesta kompilatorer minst två faser som kallas front-end och back end, medan de kan vara antingen en-pass eller multi-pass. Fas används för att klassificera kompilatorer efter konstruktion, medan pass används för att klassificera kompilatorer efter hur de fungerar.