Phase vs Pass in Compiler
Generelt sett er kompilator et dataprogram som leser et program skrevet på ett språk, som kalles kildespråket, og oversetter det til et annet språk, som kalles målspråket. Tradisjonelt var kildespråk et språk på høyt nivå som C++ og målspråk var et språk på lavt nivå som forsamlingsspråk. Så generelt kan kompilatorer sees på som oversettere som oversetter fra ett språk til et annet. Pass og Phase er to begreper som ofte brukes med kompilatorer. Antall passeringer av en kompilator er antall ganger den går over kilden (eller en form for representasjon av den). En kompilator er delt opp i deler for enkel konstruksjon. Fase brukes ofte til å kalle en slik enkelt uavhengig del av en kompilator.
Hva er et pass i en kompilator?
En standard måte å klassifisere kompilatorer er etter antall "pass". Vanligvis er kompilering en relativt ressurskrevende prosess, og i utgangspunktet hadde ikke datamaskiner nok minne til å holde et slikt program som gjorde hele jobben. På grunn av denne begrensningen av maskinvareressurser i tidlige datamaskiner, ble kompilatorer brutt ned i mindre underprogrammer som gjorde sin delvise jobb ved å gå over kildekoden (foretok en "passering" over kilden eller en annen form for den) og utførte analyse, transformasjoner og oversettelsesoppgaver hver for seg. Så, avhengig av denne klassifiseringen, identifiseres kompilatorer som enpass- eller flerpasskompilatorer.
Som navnet antyder, kompilerer kompilatorer med ett pass i ett enkelt pass. Det er lettere å skrive en ettpass kompilator, og de utfører også raskere enn multipass kompilatorer. Derfor, selv på den tiden da du hadde ressursbegrensninger, ble språk utformet slik at de kunne kompileres i ett pass (f.eks. Pascal). På den annen side består en typisk flerpasskompilator av flere hovedtrinn. Det første trinnet er skanneren (også kjent som den leksikale analysatoren). Skanner leser programmet og konverterer det til en rekke tokens. Det andre trinnet er parseren. Den konverterer strengen med tokens til et parse-tre (eller et abstrakt syntakstre), som fanger opp den syntaktiske strukturen til programmet. Neste trinn er som tolker semantikken til den syntaktiske strukturen. Kodeoptimaliseringsstadiene og det siste kodegenereringsstadiet følger dette.
Hva er en fase i en kompilator?
Begrepsfasen kommer ofte opp når man snakker om kompilatorkonstruksjon. Opprinnelig var kompilatorer alle enkle deler av enkelt, monolittisk programvare skrevet av én person for kompilering av et enkelt språk. Men når kildekoden til språket som skal oversettes blir kompleks og stor, ble kompilatoren delt opp i flere (relativt uavhengige) faser. Fordelen med å ha ulike faser er at utviklingen av kompilatoren kan distribueres mellom et team av utviklere. Videre forbedrer den modulariteten og gjenbruken ved å tillate at faser erstattes av forbedrede eller tilleggsfaser (som ytterligere optimaliseringer) kan legges til kompilatoren. Prosessen med å dele opp kompileringen i faser ble introdusert av PQCC (Production Quality Compiler-Compiler Project) ved Carnegie Melon University. De introduserte begrepene front end, middle end og back end. De fleste kompilatorer har minst to faser. Men vanligvis innkapsler bakenden og frontenden disse fasene.
Hva er forskjellen mellom Phase og Pass i Compiler?
Phase og Pass er to termer som brukes innen kompilatorer. Et pass er en enkelt gang kompilatoren går over (går gjennom) kildekoden eller en annen representasjon av den. Vanligvis har de fleste kompilatorer minst to faser k alt front-end og back-end, mens de kan være enten en-pass eller multi-pass. Fase brukes til å klassifisere kompilatorer i henhold til konstruksjonen, mens pass brukes til å klassifisere kompilatorer etter hvordan de fungerer.