Fază vs trecere î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 îl traduce într-o altă limbă, care se numește limba țintă. În mod tradițional, limbajul sursă era un limbaj de nivel în alt, cum ar fi C++, iar limba țintă era un limbaj de nivel scăzut, cum ar fi limbajul asamblare. Deci, în general, compilatorii pot fi văzuți ca traducători care traduc dintr-o limbă în alta. Pass și Phase sunt doi termeni folosiți adesea cu compilatoare. Numărul de treceri ale unui compilator este de câte ori trece peste sursa (sau o formă de reprezentare a acesteia). Un compilator este împărțit în părți pentru confortul construcției. Phase este adesea folosit pentru a apela o astfel de singură parte independentă a unui compilator.
Ce este un permis într-un compilator?
Un mod standard de clasificare a compilatorilor este după numărul de „pase”. De obicei, compilarea este un proces relativ intensiv în resurse și inițial computerele nu aveau suficientă memorie pentru a ține un astfel de program care făcea treaba completă. Datorită acestei limitări a resurselor hardware din primele computere, compilatoarele au fost împărțite în sub-programe mai mici care și-au făcut treaba parțială trecând peste codul sursă (făcând o „trecere” peste sursă sau o altă formă a acestuia) și efectuarea unei analize., transformări și sarcini de traducere separat. Deci, în funcție de această clasificare, compilatorii sunt identificați ca compilatori cu o singură trecere sau cu mai multe treceri.
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 cu o singură trecere și, de asemenea, funcționează mai rapid decât compilatoarele cu mai multe treceri. Prin urmare, chiar și în momentul în care aveai limitări de resurse, limbajele au fost concepute astfel încât să poată fi compilate într-o singură trecere (de exemplu, Pascal). Pe de altă parte, un compilator tipic multi-pass este format din mai multe etape principale. Prima etapă este scanerul (cunoscut și ca analizor lexical). Scannerul citește programul și îl convertește într-un șir de jetoane. A doua etapă este analizatorul. Acesta convertește șirul de jetoane într-un arbore de analiză (sau un arbore de sintaxă abstractă), care surprinde structura sintactică a programului. Următoarea etapă este cea care interpretează semantica structurii sintactice. Urmează etapele de optimizare a codului și etapa finală de generare a codului.
Ce este o fază într-un compilator?
Termenul de fază apare adesea când vorbiți despre construcția compilatorului. Inițial, compilatoarele erau fiecare bucăți simple de software unic, monolitic, scrise de o singură persoană pentru compilarea unui limbaj simplu. Dar când codul sursă al limbajului de tradus devine complex și mare, compilatorul a fost împărțit în mai multe faze (relativ independente). Avantajul de a avea diferite faze este că dezvoltarea compilatorului poate fi distribuită între o echipă de dezvoltatori. În plus, îmbunătățește modularitatea și reutilizarea, permițând înlocuirea fazelor cu altele îmbunătățite sau adăugarea de faze suplimentare (cum ar fi optimizări suplimentare) la compilator. Procesul de împărțire a compilației pe faze a fost introdus de PQCC (Proiectul Compilator-Compilator de Calitatea Producției) de la Universitatea Carnegie Melon. Au introdus termenii front end, middle end și back end. Majoritatea compilatoarelor au cel puțin două faze. Dar, de obicei, back end și front end încapsulează aceste faze.
Care este diferența dintre faza și trecerea în compilator?
Phase și Pass sunt doi termeni folosiți în zona compilatoarelor. O trecere este o singură dată când compilatorul trece peste (trece prin) codul sursă sau o altă reprezentare a acestuia. În mod obișnuit, majoritatea compilatoarelor au cel puțin două faze numite front end și back end, în timp ce acestea pot fi fie cu o singură trecere, fie cu mai multe treceri. Phase este folosit pentru a clasifica compilatorii în funcție de construcție, în timp ce pass este folosit pentru a clasifica compilatorii în funcție de modul în care funcționează.