Fáza vs. Pass v kompilátore
Vo všeobecnosti je kompilátor počítačový program, ktorý číta program napísaný v jednom jazyku, ktorý sa nazýva zdrojový jazyk, a prekladá ho do iného jazyka, ktorý sa nazýva cieľový jazyk. Tradične bol zdrojovým jazykom jazyk vysokej úrovne, ako je C++, a cieľovým jazykom bol jazyk nízkej úrovne, ako je jazyk symbolických inštrukcií. Takže vo všeobecnosti možno kompilátory považovať za prekladateľov, ktorí prekladajú z jedného jazyka do druhého. Pass a Phase sú dva termíny, ktoré sa často používajú v kompilátoroch. Počet prechodov kompilátora je počet, koľkokrát prechádza cez zdroj (alebo nejakú formu jeho reprezentácie). Kompilátor je rozdelený na časti pre pohodlie konštrukcie. Fáza sa často používa na volanie takejto samostatnej časti kompilátora.
Čo je to Pass v kompilátore?
Štandardný spôsob klasifikácie kompilátorov je podľa počtu „prechodov“. Kompilácia je zvyčajne proces pomerne náročný na zdroje a počítače spočiatku nemali dostatok pamäte na uloženie takého programu, ktorý vykonal celú prácu. Kvôli tomuto obmedzeniu hardvérových zdrojov v raných počítačoch boli kompilátory rozdelené na menšie podprogramy, ktoré vykonali svoju čiastočnú prácu tým, že prešli zdrojový kód (urobili „prechod“cez zdroj alebo nejakú jeho inú formu) a vykonali analýzu., transformácie a prekladateľské úlohy samostatne. Takže v závislosti od tejto klasifikácie sú kompilátory identifikované ako jednopriechodové alebo viacpriechodové.
Ako už názov napovedá, jednopriechodové kompilátory kompilujú v jedinom prechode. Je jednoduchšie napísať jednopriechodový kompilátor a tiež funguje rýchlejšie ako viacpriechodové kompilátory. Preto aj v čase, keď ste mali obmedzenia zdrojov, jazyky boli navrhnuté tak, aby sa dali skompilovať v jednom prechode (napr. Pascal). Na druhej strane, typický viacpriechodový kompilátor pozostáva z niekoľkých hlavných etáp. Prvou fázou je skener (známy aj ako lexikálny analyzátor). Skener načíta program a skonvertuje ho na reťazec tokenov. Druhou fázou je syntaktický analyzátor. Konvertuje reťazec tokenov do stromu analýzy (alebo abstraktného stromu syntaxe), ktorý zachytáva syntaktickú štruktúru programu. Ďalšou fázou je interpretácia sémantiky syntaktickej štruktúry. Nasledujú fázy optimalizácie kódu a konečná fáza generovania kódu.
Čo je to fáza v kompilátore?
Fáza termínu sa často objavuje, keď hovoríte o konštrukcii kompilátora. Spočiatku boli kompilátory jednoduché kusy jedného, monolitického softvéru napísaného jednou osobou na kompiláciu jednoduchého jazyka. Keď sa však zdrojový kód jazyka, ktorý sa má preložiť, stane zložitým a veľkým, kompilátor bol rozdelený do viacerých (relatívne nezávislých) fáz. Výhodou rôznych fáz je, že vývoj kompilátora možno rozdeliť medzi tím vývojárov. Okrem toho zlepšuje modularitu a opätovné použitie tým, že umožňuje nahradiť fázy vylepšenými alebo pridať ďalšie fázy (napríklad ďalšie optimalizácie) do kompilátora. Proces rozdelenia kompilácie na fázy zaviedol PQCC (Production Quality Compiler-Compiler Project) na Carnegie Melon University. Zaviedli pojmy predný koniec, stredný koniec a zadný koniec. Väčšina kompilátorov má aspoň dve fázy. Ale zvyčajne zadné a predné časti zapuzdrujú tieto fázy.
Aký je rozdiel medzi fázou a prechodom v kompilátore?
Phase a Pass sú dva pojmy používané v oblasti kompilátorov. Prechod je jediný raz, keď kompilátor prejde (prejde) zdrojový kód alebo nejakú jeho inú reprezentáciu. Väčšina kompilátorov má zvyčajne aspoň dve fázy nazývané predná a zadná časť, pričom môžu byť buď jednopriechodové alebo viacpriechodové. Phase sa používa na klasifikáciu kompilátorov podľa konštrukcie, zatiaľ čo pass sa používa na klasifikáciu kompilátorov podľa toho, ako fungujú.