Faas vs läbimine kompilaatoris
Üldiselt on kompilaator arvutiprogramm, mis loeb ühes keeles kirjutatud programmi, mida nimetatakse lähtekeeleks, ja tõlgib selle teise keelde, mida nimetatakse sihtkeeleks. Traditsiooniliselt oli lähtekeel kõrgetasemeline keel (nt C++) ja sihtkeel madalatasemeline keel (nt assamblee keel). Seega võib koostajaid üldiselt vaadelda kui tõlkijaid, kes tõlgivad ühest keelest teise. Pass ja Phase on kaks terminit, mida sageli kasutatakse kompilaatorites. Kompilaatori läbimiste arv on mitu korda, kui ta läheb üle allika (või selle mingisuguse esituse). Ehitamise mugavuse huvides on kompilaator jagatud osadeks. Faasi kasutatakse sageli kompilaatori sellise üksiku iseseisva osa kutsumiseks.
Mis on kompilaatoris pass?
Tavaline viis kompilaatorite klassifitseerimiseks on läbimiste arvu järgi. Tavaliselt on kompileerimine suhteliselt ressursimahukas protsess ja algselt ei olnud arvutitel piisav alt mälu, et hoida sellist programmi, mis kogu töö ära tegi. Varasemate arvutite riistvararessursside piiratuse tõttu jaotati kompilaatorid väiksemateks alamprogrammideks, mis täitsid osaliselt oma töö, käies üle lähtekoodi (tegi allikast või mõnest muust vormist läbi) ja analüüsisid., teisendusi ja tõlkeülesandeid eraldi. Seega, olenev alt sellest klassifikatsioonist identifitseeritakse kompilaatorid ühe- või mitmekäigulisteks kompilaatoriteks.
Nagu nimigi ütleb, kompileerivad ühe käiguga kompilaatorid ühe käiguga. Ühekäigulise kompilaatori kirjutamine on lihtsam ja ka need töötavad kiiremini kui mitmekäigulised kompilaatorid. Seetõttu olid keeled isegi sel ajal, kui teil olid ressursipiirangud, loodud nii, et neid saaks koostada ühe käiguga (nt Pascal). Teisest küljest koosneb tüüpiline mitmekäiguline kompilaator mitmest põhietapist. Esimene etapp on skanner (tuntud ka kui leksikaalanalüsaator). Skänner loeb programmi ja teisendab selle žetoonide jadaks. Teine etapp on parser. See teisendab märkide stringi parsipuuks (või abstraktseks süntaksipuuks), mis jäädvustab programmi süntaktilise struktuuri. Järgmine etapp on süntaktilise struktuuri semantika tõlgendamine. Koodi optimeerimise etapid ja viimane koodi genereerimise etapp järgivad seda.
Mis on kompilaatori faas?
Termini faas kerkib sageli esile, kui räägite kompilaatori ehitamisest. Algselt olid kompilaatorid kõik lihtsad monoliitsed tarkvaratükid, mille kirjutas üks inimene lihtsa keele koostamiseks. Kui aga tõlgitava keele lähtekood muutub keeruliseks ja suureks, jagati kompilaator mitmeks (suhteliselt sõltumatuks) faasiks. Erinevate etappide eeliseks on see, et kompilaatori arendust saab jagada arendajate meeskonna vahel. Lisaks parandab see modulaarsust ja taaskasutust, võimaldades asendada faase täiustatud faasidega või lisada kompilaatorisse täiendavaid faase (näiteks täiendavaid optimeerimisi). Koostamise etappideks jagamise protsessi tutvustas Carnegie Meloni ülikooli PQCC (Tootmiskvaliteedi koostaja-kompilaatori projekt). Nad tutvustasid mõisteid esiots, keskmine ots ja tagaots. Enamikul kompilaatoritel on vähem alt kaks faasi. Kuid tavaliselt kapseldavad taga- ja esiots need faasid.
Mis vahe on kompilaatoris Phase ja Pass vahel?
Phase ja Pass on kaks mõistet, mida kasutatakse kompilaatorite valdkonnas. Läbimine on üks kord, kui kompilaator läbib (läbib) lähtekoodi või selle mõne muu esituse. Tavaliselt on enamikul kompilaatoritel vähem alt kaks faasi, mida nimetatakse esi- ja tagaotsaks, samas kui need võivad olla kas ühekäigulised või mitmekäigulised. Faasi kasutatakse kompilaatorite klassifitseerimiseks konstruktsiooni järgi, passi aga kompilaatorite klassifitseerimiseks nende tööpõhimõtte järgi.