Phase vs Pass in Compiler
Sa pangkalahatan, ang compiler ay isang computer program na nagbabasa ng program na nakasulat sa isang wika, na tinatawag na source language, at isinasalin ito sa ibang wika, na tinatawag na target na wika. Ayon sa kaugalian, ang pinagmulang wika ay isang mataas na antas ng wika tulad ng C++ at ang target na wika ay isang mababang antas ng wika tulad ng Assembly language. Kaya, sa pangkalahatan, ang mga compiler ay makikita bilang mga tagasalin na nagsasalin mula sa isang wika patungo sa isa pa. Ang Pass at Phase ay dalawang termino na kadalasang ginagamit sa mga compiler. Ang bilang ng mga pass ng isang compiler ay ang dami ng beses na lumampas ito sa source (o ilang anyo ng representasyon nito). Ang isang compiler ay pinaghiwa-hiwalay sa mga bahagi para sa kaginhawahan ng pagtatayo. Ang phase ay kadalasang ginagamit upang tawagan ang isang independiyenteng bahagi ng isang compiler.
Ano ang Pass sa isang Compiler?
Ang karaniwang paraan ng pag-uuri ng mga compiler ay sa pamamagitan ng bilang ng mga “passes”. Karaniwan, ang pag-compile ay isang medyo resource intensive na proseso at sa una ay walang sapat na memorya ang mga computer para hawakan ang naturang programa na gumawa ng kumpletong trabaho. Dahil sa limitasyong ito ng mga mapagkukunan ng hardware sa mga unang computer, ang mga compiler ay pinaghiwa-hiwalay sa mas maliliit na sub program na ginawa ang bahagyang trabaho nito sa pamamagitan ng paglampas sa source code (gumawa ng "pass" sa source o iba pang anyo nito) at nagsagawa ng pagsusuri, mga pagbabago at mga gawain sa pagsasalin nang hiwalay. Kaya, depende sa klasipikasyong ito, ang mga compiler ay tinutukoy bilang one-pass o multi-pass compiler.
Tulad ng iminumungkahi ng pangalan, ang mga one-pass compiler ay nag-compile sa isang pass. Mas madaling magsulat ng one-pass compiler at mas mabilis din silang gumanap kaysa sa multi-pass compiler. Samakatuwid, kahit na sa oras na mayroon kang mga limitasyon sa mapagkukunan, ang mga wika ay idinisenyo upang ma-compile ang mga ito sa isang one-pass (hal. Pascal). Sa kabilang banda, ang isang tipikal na multi-pass compiler ay binubuo ng ilang pangunahing yugto. Ang unang yugto ay ang scanner (kilala rin bilang lexical analyzer). Binabasa ng scanner ang program at iko-convert ito sa isang string ng mga token. Ang ikalawang yugto ay ang parser. Kino-convert nito ang string ng mga token sa isang parse tree (o abstract syntax tree), na kumukuha ng syntactic na istraktura ng programa. Ang susunod na yugto ay ang nagbibigay-kahulugan sa mga semantika ng istrukturang sintaktik. Ang mga yugto ng pag-optimize ng code at huling yugto ng pagbuo ng code ay sumusunod dito.
Ano ang Phase sa isang Compiler?
Ang terminong yugto ay madalas na lumalabas kapag pinag-uusapan mo ang tungkol sa pagbuo ng compiler. Sa una, ang mga compiler ay bawat simpleng piraso ng solong, monolitikong software na isinulat ng isang tao para sa pagsasama-sama ng isang simpleng wika. Ngunit kapag ang source code ng wikang isasalin ay naging kumplikado at malaki, ang compiler ay hinati-hati sa maramihang (medyo independyente) na mga yugto. Ang bentahe ng pagkakaroon ng iba't ibang mga yugto ay ang pagbuo ng compiler ay maaaring ipamahagi sa isang pangkat ng mga developer. Higit pa rito, pinapabuti nito ang modularity at muling paggamit sa pamamagitan ng pagpapahintulot sa mga phase na mapalitan ng mga pinabuting phase o karagdagang mga phase (tulad ng karagdagang mga pag-optimize) na idaragdag sa compiler. Ang proseso ng paghahati ng compilation sa mga phase ay ipinakilala ng PQCC (Production Quality Compiler-Compiler Project) sa Carnegie Melon University. Ipinakilala nila ang mga terminong front end, middle end at back end. Karamihan sa mga compiler ay may hindi bababa sa dalawang yugto. Ngunit kadalasan, ang back end at front end ay nakapaloob sa mga phase na ito.
Ano ang pagkakaiba ng Phase at Pass sa Compiler?
Ang Phase at Pass ay dalawang terminong ginagamit sa lugar ng mga compiler. Ang pass ay isang beses na dumaan ang compiler sa source code o iba pang representasyon nito. Karaniwan, ang karamihan sa mga compiler ay may hindi bababa sa dalawang phase na tinatawag na front end at back end, habang maaari silang maging one-pass o multi-pass. Ginagamit ang phase para i-classify ang mga compiler ayon sa construction, habang ginagamit ang pass para i-classify ang mga compiler ayon sa kung paano gumagana ang mga ito.