Diferență între fază și pass în compilator

Anonim

Faza vs Pass în Compilator

În general, compilatorul este un program de calculator care citește program scris într-o limbă, care este numită limba sursă, și o traduce într-o altă limbă, care se numește limba țintă. În mod tradițional, limbajul 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 pas într-un compilator?

Un mod standard de a clasifica compilatorii este 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 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 de o singură trecere 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 multi-pass. Prin urmare, chiar și în momentul în care aveați limitări 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?

Termenul de fază apare adesea atunci când vorbiți despre construirea compilatorului. 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 defalcat î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 în 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 diferenta dintre Faza si Pass in Compiler?

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 a clasifica compilatoarele în funcție de construcție, în timp ce trecerea este utilizată pentru a clasifica compilatorii în funcție de modul în care funcționează.