Diferența dintre fază și trecerea în compilator

Phase vs Pass în compilator

În general, compilatorul este un program de calculator care citește un program scris într-o limbă, care se numește limba sursă, și o traduce într-o altă limbă, care se numește limba țintă. În mod tradițional, limba sursă a fost un limbaj de nivel înalt, cum ar fi C ++, iar limba țintă a fost un limbaj de nivel scăzut, cum ar fi limba Adunării. Deci, în general, compilatorii pot fi văzuți ca traducători care traduc dintr-o limbă în alta. Trecerea și faza sunt doi termeni folosiți adesea cu compilatorii. Numărul de treceri ale unui compilator este numărul de ori care trece peste sursa (sau o formă de reprezentare a acesteia). Un compilator este împărțit în părți pentru confortul construcției. Faza este adesea folosită pentru a apela o parte independentă a unui compilator.

Ce este un Pass într-un compilator?

O modalitate standard de a clasifica compilatorii este prin numărul de "passes". De obicei, compilarea este un proces relativ intensiv de resurse și, inițial, computerele nu aveau suficientă memorie pentru a organiza un astfel de program care a făcut treaba completă. Datorită acestei limitări a resurselor hardware pe computerele timpurii, compilatorii au fost defalcați în subprograme mai mici care și-au făcut treaba parțială trecând peste codul sursă (au făcut o "trecere" peste sursă sau o altă formă a acesteia) și au efectuat analize , transformări și sarcini de traducere separat. Deci, în funcție de această clasificare, compilatoarele sunt identificate ca compilatoare cu o singură trecere sau multi-pass.

După cum sugerează și numele, compilatoarele cu o singură trecere se compilează într-o singură trecere. Este mai ușor să scrieți un compilator de o singură trecere și, de asemenea, aceștia să efectueze mai repede decât compilatoarele cu mai multe treceri. Prin urmare, chiar și în momentul în care aveați limite de resurse, limbile au fost proiectate astfel încât să poată fi compilate într-o singură trecere (de exemplu, Pascal). Pe de altă parte, un compilator tipic multi-pass este alcătuit din mai multe etape principale. Prima etapă este scanerul (cunoscut și ca analizor lexical). Scanerul citește programul și îl convertește într-un șir de jetoane. A doua etapă este parserul. Convertește șirul de jetoane într-un arbore de analiză (sau un arbore de sintaxă abstractă), care surprinde structura sintactică a programului. Stadiul următor este cel care interpretează semantica structurii sintactice. Etapele optimizărilor codului și etapa de generare a codului final urmează acest lucru.

Ce este o fază într-un compilator?

Faza termenului apare adesea atunci când vorbiți despre construcția de compilatoare. Inițial, compilatorii au fost fiecare bucăți simple de software monolit, scrise de o persoană pentru compilarea unui limbaj simplu. Dar când codul sursă al limbii care trebuie tradus devine complex și mare, compilatorul a fost împărțit în mai multe faze (relativ independente). Avantajul de a avea diferite faze este acela că dezvoltarea compilatorului poate fi distribuită între o echipă de dezvoltatori. Mai mult, îmbunătățește modularitatea și reutilizarea, permițând înlocuirea fazelor cu cele îmbunătățite sau cu etapele suplimentare (cum ar fi optimizările ulterioare) care trebuie adăugate compilatorului. Procesul de împărțire a compilației la faze a fost introdus de către PQCC (Compilator de calitate a producției) la Universitatea Carnegie Melon. Ei au introdus termenii capătul din față, mijlocul și spatele. Majoritatea compilatoarelor au cel puțin două faze. Dar de obicei, capătul din spate și capătul frontal încapsulează aceste faze.

Care este diferența dintre Faza și Pass în Compilator?

Faza și Pass sunt doi termeni utilizați în domeniul compilatoarelor. O trecere este o singură dată când compilatorul trece peste (trece prin) codul surselor sau o altă reprezentare a acestuia. În mod obișnuit, majoritatea compilatoarelor au cel puțin două faze numite capăt frontal și spate, în timp ce acestea ar putea fi una sau mai multe treceri. Faza este folosită pentru clasificarea compilatoarelor în funcție de construcție, în timp ce trecerea este folosită pentru a clasifica compilatorii în funcție de modul în care funcționează.