Phase vs Pass në përpilues
Në përgjithësi, përpiluesi është një program kompjuterik që lexon një program të shkruar në një gjuhë, e cila quhet gjuha burimore, dhe e përkthen atë në një gjuhë tjetër, e cila quhet gjuha e synuar. Tradicionalisht, gjuha burimore ishte një gjuhë e nivelit të lartë si C++ dhe gjuha e synuar ishte një gjuhë e nivelit të ulët si gjuha Asambleje. Pra, në përgjithësi përpiluesit mund të shihen si përkthyes që përkthejnë nga një gjuhë në tjetrën. Kalimi dhe Faza janë dy terma që përdoren shpesh me përpiluesit. Numri i kalimeve të një përpiluesi është numri i herëve që kalon mbi burimin (ose ndonjë formë e paraqitjes së tij). Një përpilues ndahet në pjesë për lehtësinë e ndërtimit. Faza përdoret shpesh për të thirrur një pjesë të tillë të vetme të pavarur të një përpiluesi.
Çfarë është një kalim në një përpilues?
Një mënyrë standarde për të klasifikuar përpiluesit është nga numri i "kalimeve". Zakonisht, përpilimi është një proces relativisht intensiv i burimeve dhe fillimisht kompjuterët nuk kishin memorie të mjaftueshme për të mbajtur një program të tillë që bënte punën e plotë. Për shkak të këtij kufizimi të burimeve të harduerit në kompjuterët e hershëm, përpiluesit u ndanë në nënprograme më të vogla që kryenin punën e tyre të pjesshme duke kaluar mbi kodin burimor (bërën një "kalim" mbi burimin ose ndonjë formë tjetër të tij) dhe kryenin analiza, transformimet dhe detyrat e përkthimit veçmas. Pra, në varësi të këtij klasifikimi, përpiluesit identifikohen si përpilues me një kalim ose me shumë kalime.
Siç sugjeron emri, përpiluesit me një kalim përpilohen në një kalim të vetëm. Është më e lehtë të shkruash një përpilues me një kalim dhe gjithashtu ata performojnë më shpejt se përpiluesit me shumë kalime. Prandaj, edhe në kohën kur kishit kufizime burimesh, gjuhët ishin krijuar në mënyrë që ato të mund të përpiloheshin me një kalim (p.sh. Pascal). Nga ana tjetër, një përpilues tipik me shumë kalime përbëhet nga disa faza kryesore. Faza e parë është skaneri (i njohur edhe si analizues leksikor). Skaneri lexon programin dhe e konverton atë në një varg shenjash. Faza e dytë është analizuesi. Ai konverton vargun e shenjave në një pemë analizuese (ose një pemë sintaksore abstrakte), e cila kap strukturën sintaksore të programit. Faza tjetër është ajo që interpreton semantikën e strukturës sintaksore. Fazat e optimizimit të kodit dhe faza përfundimtare e gjenerimit të kodit ndjekin këtë.
Çfarë është një fazë në një përpilues?
Faza e termit shpesh shfaqet kur flisni për ndërtimin e përpiluesit. Fillimisht, përpiluesit ishin çdo pjesë e thjeshtë e softuerit të vetëm, monolit të shkruar nga një person për përpilimin e një gjuhe të thjeshtë. Por kur kodi burimor i gjuhës që do të përkthehet bëhet kompleks dhe i madh, përpiluesi ndahej në faza të shumta (relativisht të pavarura). Avantazhi i të paturit faza të ndryshme është se zhvillimi i përpiluesit mund të shpërndahet midis një ekipi zhvilluesish. Për më tepër, ai përmirëson modularitetin dhe ripërdorimin duke lejuar që fazat të zëvendësohen me ato të përmirësuara ose faza shtesë (të tilla si optimizimet e mëtejshme) që do të shtohen në përpilues. Procesi i ndarjes së përpilimit në faza u prezantua nga PQCC (Production Quality Compiler-Compiler Project) në Universitetin Carnegie Melon. Ata prezantuan termat fundi i përparmë, fundi i mesëm dhe fundi i pasëm. Shumica e përpiluesve kanë të paktën dy faza. Por zakonisht, pjesa e pasme dhe pjesa e përparme i përmbledhin këto faza.
Cili është ndryshimi midis Fazës dhe Kalimit në Përpilues?
Faza dhe Kalimi janë dy terma të përdorur në fushën e përpiluesve. Një kalim është një herë e vetme që përpiluesi kalon (përshkon) kodin burimor ose ndonjë paraqitje tjetër të tij. Në mënyrë tipike, shumica e përpiluesve kanë të paktën dy faza të quajtura fundi i përparmë dhe fundi i pasëm, ndërsa ato mund të jenë ose me një kalim ose me shumë kalime. Faza përdoret për të klasifikuar përpiluesit sipas konstruksionit, ndërsa kalimi përdoret për të klasifikuar përpiluesit sipas mënyrës se si funksionojnë.