Faas vs Pass 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õrgel tasemel keel nagu C ++ ja sihtkeel oli madal keel, näiteks assamblee keel. Seega võib kompilaatoreid pidada tõlkijateks, kes tõlgivad ühest keelest teise. Pass ja Phase on kaks mõistet, mida kompilaatorites sageli kasutatakse. Kompilaatori läbimiste arv on mitu korda see läheb üle allika (või selle mingis vormis). Ehituse mugavuse huvides on koostaja osadeks jaotatud. Faasi kasutatakse sageli sellise üksiku kompilaatori iseseisva osa kutsumiseks.
Mis on koostajas pääs?
Standardne viis kompilaatorite klassifitseerimiseks on läbipääsude arv. Tavaliselt on kompileerimine suhteliselt ressursimahukas protsess ja esialgu polnud arvutitel piisavalt mälu, et mahutada sellist programmi, mis tegi kogu töö. Selle varajaste arvutite riistvararessursside piiratuse tõttu jaotati kompilaatorid väiksemateks alamprogrammideks, mis tegid oma osalise ülesande lähtekoodi üle minnes (tegid allika või mõne muu selle vormi üle) ja tegid analüüsi, teisendused ja tõlkeülesanded eraldi. Niisiis, sõltuvalt sellest klassifikatsioonist, identifitseeritakse koostajad ühe- või mitmekordse koostajana.
Nagu nimigi ütleb, kompileerivad ühe läbimisega koostajad ühe käiguga. Ühekäigulist kompilaatorit on lihtsam kirjutada ja ka need toimivad kiiremini kui mitmikpääsud. Seetõttu kujundati keeled isegi ajal, mil teil olid ressursside piirangud, nii, et neid oleks võimalik koostada ühe läbipääsuna (nt Pascal). Teisest küljest koosneb tüüpiline mitmepassiline kompilaator mitmest põhietapist. Esimene etapp on skanner (tuntud ka kui leksikaalne analüsaator). Skanner loeb programmi ja teisendab selle märgimärgiks. Teine etapp on parser. See teisendab märkide stringi sõelumispuuks (või abstraktseks süntaksipuuks), mis haarab programmi süntaktilise struktuuri. Järgmine etapp on see, mis tõlgendab süntaktilise struktuuri semantikat. Koodi optimeerimise etapid ja lõplik koodi loomise etapp järgivad seda.
Mis on kompilaatori etapp?
Termin faas tuleb sageli ette, kui räägite kompilaatori ehitamisest. Esialgu olid koostajad kõik lihtsad üksiku monoliitse tarkvara tükid, mille üks inimene kirjutas lihtsa keele koostamiseks. Kuid kui tõlgitava keele lähtekood muutub keerukaks ja suureks, jagati koostaja mitmeks (suhteliselt iseseisvaks) faasiks. Erinevate faaside eeliseks on see, et kompilaatori arendust saab jagada arendajate meeskonna vahel. Lisaks parandab see modulaarsust ja korduvkasutust, võimaldades kompilaatorisse lisada faasid täiustatud faasidega või lisada täiendavaid faase (näiteks täiendavaid optimeerimisi). Kompileerimise faasideks jaotamise protsessi tutvustas Carnegie Meloni ülikooli PQCC (Production Quality Compiler-Compiler Project). Nad tutvustasid mõisteid esiots, keskmine ots ja tagumine ots. Enamikul koostajatel on vähemalt kaks faasi. Kuid tavaliselt ümbritsevad tagumised ja esiotsa need faasid.
Mis vahe on kompilaatori Phase ja Pass vahel?
Phase ja Pass on kaks mõistet, mida kompilaatorite valdkonnas kasutatakse. Pass on ühekordne kord, kui kompilaator läheb üle (läbib) lähtekoodi või mõne muu selle kujutise. Tavaliselt on enamikul kompilaatoritel vähemalt kaks faasi, mida nimetatakse esiotsa ja tagaosaks, samas kui need võivad olla kas ühe- või mitmekordsed. Faasi kasutatakse kompilaatorite klassifitseerimiseks vastavalt konstruktsioonile, pass aga kompilaatorite klassifitseerimiseks vastavalt nende toimimisviisile.