Phase vs Pass in Compiler
Uopšteno govoreći, kompajler je kompjuterski program koji čita program napisan na jednom jeziku, koji se zove izvorni jezik, i prevodi ga na drugi jezik, koji se naziva ciljni jezik. Tradicionalno, izvorni jezik je bio jezik visokog nivoa kao što je C++, a ciljni jezik jezik niskog nivoa kao što je jezik asemblera. Dakle, generalno se prevodioci mogu posmatrati kao prevodioci koji prevode sa jednog jezika na drugi. Prolaz i faza su dva termina koji se često koriste kod kompajlera. Broj prolaza kompajlera je broj puta koji prelazi preko izvora (ili nekog oblika njegovog predstavljanja). Kompajler je raščlanjen na dijelove radi pogodnosti konstrukcije. Faza se često koristi za pozivanje takvog jednog nezavisnog dijela kompajlera.
Šta je prolaz u kompajleru?
Standardni način klasifikacije kompajlera je po broju "prolaza". Obično je kompajliranje relativno intenzivan proces i u početku računari nisu imali dovoljno memorije da drže takav program koji je obavio kompletan posao. Zbog ovog ograničenja hardverskih resursa na ranim računarima, kompajleri su razbijeni na manje podprograme koji su svoj djelomični posao obavljali tako što su prelazili preko izvornog koda (napravili „prelazak“preko izvornog ili nekog drugog oblika) i obavljali analizu, transformacije i prevodilačke zadatke zasebno. Dakle, u zavisnosti od ove klasifikacije, prevodioci se identifikuju kao kompajleri sa jednim prolazom ili sa više prolaza.
Kao što ime govori, kompajleri sa jednim prolazom kompajliraju se u jednom prolazu. Lakše je napisati kompajler sa jednim prolazom, a oni rade brže od višeprolaznih kompajlera. Stoga, čak i u vrijeme kada ste imali ograničenja u resursima, jezici su dizajnirani tako da se mogu kompajlirati u jednom prolazu (npr. Pascal). S druge strane, tipičan multi-pass kompajler se sastoji od nekoliko glavnih faza. Prva faza je skener (također poznat kao leksički analizator). Skener čita program i pretvara ga u niz tokena. Druga faza je parser. Konvertuje niz tokena u stablo raščlanjivanja (ili apstraktno stablo sintakse), koje hvata sintaksičku strukturu programa. Sljedeća faza je ona koja tumači semantiku sintaksičke strukture. Faze optimizacije koda i faza finalne generacije koda slijede ovo.
Šta je faza u kompajleru?
Izraz faza se često pojavljuje kada govorite o konstrukciji kompajlera. U početku, kompajleri su bili svaki jednostavni komadi jednog, monolitnog softvera koji je napisala jedna osoba za kompilaciju jednostavnog jezika. Ali kada izvorni kod jezika koji treba prevesti postane složen i velik, kompajler je razbijen na više (relativno nezavisnih) faza. Prednost postojanja različitih faza je u tome što se razvoj kompajlera može distribuirati među timom programera. Nadalje, poboljšava modularnost i ponovnu upotrebu dozvoljavajući da se faze zamijene poboljšanim ili da se dodatne faze (kao što su dalje optimizacije) dodaju kompajleru. Proces podjele kompilacije na faze uveo je PQCC (Production Quality Compiler-Compiler Project) na Univerzitetu Carnegie Melon. Uveli su pojmove prednji kraj, srednji kraj i zadnji kraj. Većina kompajlera ima najmanje dvije faze. Ali obično zadnji i prednji kraj obuhvataju ove faze.
Koja je razlika između faze i prolaza u kompajleru?
Phase i Pass su dva termina koja se koriste u oblasti kompajlera. Prolaz je jedan put kada kompajler prijeđe (prođe) izvorni kod ili neki drugi njegov prikaz. Obično većina kompajlera ima najmanje dvije faze koje se nazivaju front end i back end, dok one mogu biti jednoprolazne ili višeprolazne. Faza se koristi za klasifikaciju kompajlera prema konstrukciji, dok se prolaz koristi za klasifikaciju kompajlera prema tome kako rade.