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, näiteks C ++, ja sihtkeel oli madala taseme keel, näiteks assamblee keel. Nii et üldiselt võib kompilaatorit pidada tõlkijaks, kes tõlgib ühest keelest teise. Pass ja Phase on kaks mõistet, mida kompilaatorites sageli kasutatakse. Kompilaatori läbimiste arv on arv, mitu korda see ületab allika (või selle mingisuguse esitusviisi). Ehituse mugavuse huvides on kompilaator jagatud osadeks. Faasi kasutatakse sageli kompilaatori ühe iseseisva osa kutsumiseks.
Mis on kompilaatori pass?
Standardne kompilaatorite klassifitseerimise viis on läbitud arv. Tavaliselt on kompileerimine suhteliselt ressursimahukas protsess ja algselt ei olnud arvutitel piisavalt mälu, et hoida sellist programmi, mis tegi kogu töö. Kuna riistvara ressursid olid varasetes arvutites piiratud, jaotati kompilaatorid väiksemateks alamprogrammideks, mis tegid oma osalise töö, minnes üle lähtekoodile ("läksid" üle allikale või muule selle vormile) ja viisid läbi analüüsi , teisendused ja tõlkeülesanded eraldi. Niisiis, sõltuvalt sellest klassifikatsioonist, identifitseeritakse kompilaatorid ühe või mitme käigu kompilaatoritena.
Nagu nimigi ütleb, kompileeritakse ühekäigulised kompilaatorid ühe käiguga. Ühesuunalist kompilaatorit on lihtsam kirjutada ja ka need toimivad kiiremini kui mitmekäigulised kompilaatorid. Seetõttu kavandati keeled isegi ajal, mil teil oli ressursipiiranguid, nii, et neid saaks koostada ühe käiguga (nt Pascal). Teisest küljest koosneb tüüpiline mitme käiguga kompilaator mitmest põhietapist. Esimene etapp on skanner (tuntud ka kui leksikaalne analüsaator). Skanner loeb programmi ja teisendab selle tokenistringiks. Teine etapp on parser. See teisendab žetoonide stringi parsimispuuks (või abstraktseks süntaksipuuks), mis hõlmab programmi süntaktilist struktuuri. Järgmine etapp tõlgendab süntaktilise struktuuri semantikat. Koodi optimeerimise etapid ja koodi loomise viimane etapp järgivad seda.
Mis on kompilaatori faas?
Mõiste faas tuleb sageli esile, kui räägite kompilaatorite ehitamisest. Algselt olid kompilaatorid iga üksiku monoliitse tarkvara lihtsad tükid, mille kirjutas üks inimene lihtsa keele koostamiseks. Kuid kui tõlgitava keele lähtekood muutub keerukaks ja suureks, jaotati kompilaator mitmeks (suhteliselt sõltumatuks) faasiks. Erinevate faaside olemasolu eeliseks on see, et kompilaatori arengut saab jagada arendajate meeskonna vahel. Lisaks parandab see modulaarsust ja korduskasutamist, võimaldades etappide asendamist täiustatud või täiendavate faasidega (näiteks täiendavad optimeerimised), mis lisatakse kompilaatorile. Kompileerimise etappideks jagamise protsessi tutvustas Carnegie Meloni ülikoolis PQCC (Production Quality Compiler-Compiler Project). Nad tutvustasid termineid esi-, kesk- ja tagaosa. Enamikul kompilaatoritel on vähemalt kaks faasi. Kuid tavaliselt kapseldavad need faasid taga- ja esiotsa.
Mis vahe on faasis ja läbimisel kompilaatoris??
Phase ja Pass on kaks mõistet, mida kasutatakse kompilaatorite valdkonnas. Luba on üks kord, kui kompilaator annab lähtekoodi üle või läbib selle või kasutab seda mõnel muul viisil. Tavaliselt on enamikul kompilaatoritest vähemalt kaks faasi, mida nimetatakse esiosaks ja tagaosaks, ehkki need võivad olla kas ühe- või mitmekäigulised. Faasi kasutatakse kompilaatorite klassifitseerimisel vastavalt konstruktsioonile, ja faasi kasutatakse kompilaatorite klassifitseerimiseks vastavalt nende tööpõhimõttele.