Phase vs Pass in Compiler
Generelt er compiler et computerprogram, der læser et program skrevet på ét sprog, som kaldes kildesproget, og oversætter det til et andet sprog, som kaldes målsproget. Traditionelt var kildesprog et sprog på højt niveau, såsom C++, og målsprog var et sprog på lavt niveau, såsom Assembly-sprog. Så generelt kan kompilatorer ses som oversættere, der oversætter fra et sprog til et andet. Pass og Phase er to udtryk, der ofte bruges med compilere. Antallet af gennemløb af en compiler er antallet af gange, den går over kilden (eller en form for repræsentation af den). En compiler er opdelt i dele af hensyn til konstruktionen. Fase bruges ofte til at kalde sådan en enkelt uafhængig del af en compiler.
Hvad er et pass i en compiler?
En standard måde at klassificere kompilatorer på er ved antallet af "pass". Norm alt er kompilering en relativt ressourcekrævende proces, og i begyndelsen havde computere ikke nok hukommelse til at holde et sådant program, der klarede hele jobbet. På grund af denne begrænsning af hardwareressourcer i tidlige computere blev compilere opdelt i mindre underprogrammer, der gjorde sit delvise job ved at gå over kildekoden (foretog et "pass" over kilden eller en anden form for den) og udførte analyse, transformationer og oversættelsesopgaver hver for sig. Så afhængigt af denne klassifikation identificeres compilere som one-pass eller multi-pass compilere.
Som navnet antyder, kompilerer one-pass compilere i et enkelt pas. Det er lettere at skrive en one-pass compiler, og de udfører også hurtigere end multi-pass compilere. Derfor, selv på det tidspunkt, hvor man havde ressourcebegrænsninger, blev sprog designet, så de kunne kompileres i et enkelt pas (f.eks. Pascal). På den anden side består en typisk multi-pass compiler af flere hovedtrin. Den første fase er scanneren (også kendt som den leksikale analysator). Scanner læser programmet og konverterer det til en række tokens. Det andet trin er parseren. Det konverterer strengen af tokens til et parsetræ (eller et abstrakt syntakstræ), som fanger programmets syntaktiske struktur. Næste trin er den, der fortolker semantikken i den syntaktiske struktur. Kodeoptimeringsstadierne og det sidste kodegenereringstrin følger dette.
Hvad er en fase i en compiler?
Begrebsfasen dukker ofte op, når man taler om compilerkonstruktion. Oprindeligt var compilere alle enkle stykker af enkelt, monolitisk software skrevet af én person til kompilering af et simpelt sprog. Men når kildekoden til det sprog, der skal oversættes, bliver kompleks og stor, blev compileren opdelt i flere (relativt uafhængige) faser. Fordelen ved at have forskellige faser er, at udviklingen af compileren kan fordeles blandt et team af udviklere. Ydermere forbedrer det modulariteten og genbrugen ved at tillade, at faser erstattes af forbedrede eller yderligere faser (såsom yderligere optimeringer) kan tilføjes til compileren. Processen med at opdele kompileringen i faser blev introduceret af PQCC (Production Quality Compiler-Compiler Project) ved Carnegie Melon University. De introducerede begreberne front end, middle end og back end. De fleste compilere har mindst to faser. Men norm alt indkapsler bagenden og frontenden disse faser.
Hvad er forskellen mellem Phase og Pass i Compiler?
Phase og Pass er to udtryk, der bruges inden for compilere. Et pass er en enkelt gang, som compileren passerer (gennemgår) kildekoden eller en anden repræsentation af den. Typisk har de fleste compilere mindst to faser kaldet frontend og backend, mens de kan være enten one-pass eller multi-pass. Fase bruges til at klassificere compilere efter konstruktionen, mens pass bruges til at klassificere compilere efter hvordan de fungerer.