Faza 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 limbă sursă, și îl traduce într-o altă limbă, numită limbă țintă. În mod tradițional, limbajul sursă era un limbaj de nivel înalt, cum ar fi C ++, iar limbajul țintă era un limbaj de nivel scăzut, cum ar fi limbajul de asamblare. Deci, în general, compilatoarele pot fi văzute ca traducători care traduc dintr-o limbă în alta. Pass și Phase sunt doi termeni des folosiți cu compilatoarele. Numărul de treceri ale unui compilator este de câte ori trece peste sursă (sau o formă de reprezentare a acestuia). Un compilator este împărțit în părți pentru confortul construcției. Faza este adesea utilizată pentru a apela o astfel de parte independentă a unui compilator.
Ce este un Pass într-un compilator?
O modalitate standard de clasificare a compilatoarelor 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 deține un astfel de program care a făcut treaba completă. Datorită acestei limitări a resurselor hardware din primele computere, compilatoarele au fost împărțite î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 acestuia) ș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 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 repede decât compilatoarele cu mai multe treceri. Prin urmare, chiar și în momentul în care aveți limitări de resurse, limbile 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 alcătuit din mai multe etape principale. Prima etapă este scanerul (cunoscut și sub numele de analizator lexical). Scanner citește programul și îl convertește într-un șir de jetoane. A doua etapă este analiza. 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. Etapele de optimizare a codului și etapa finală de generare a codului urmează acest lucru.
Ce este o fază într-un compilator?
Termenul de fază apare adesea când vorbiți despre construcția compilatorului. Inițial, compilatoarele erau toate piesele simple ale unui singur software monolitic, scrise de o singură persoană pentru compilarea unui limbaj simplu. Dar când codul sursă al limbii de tradus devine complex și mare, compilatorul a fost împărțit în faze multiple (relativ independente). Avantajul de a avea faze diferite 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 faze suplimentare (cum ar fi optimizări suplimentare) pentru a fi adăugate la compilator. Procesul de împărțire a compilației în faze a fost introdus de PQCC (Production Quality Compiler-Compiler Project) la Universitatea Carnegie Melon. Au introdus termenii capăt frontal, capăt mijlociu și capăt spate. Majoritatea compilatoarelor au cel puțin două faze. Dar, de obicei, partea din spate și partea din față încapsulează aceste faze.
Care este diferența dintre fază și trecere în compilator?
Faza și trecerea sunt doi termeni utilizați în zona compilatoarelor. O trecere este o singură dată când compilatorul trece (trece) peste codul sursă sau o altă reprezentare a acestuia. De obicei, majoritatea compilatoarelor au cel puțin două faze numite front end și back end, în timp ce ar putea fi fie cu o singură trecere, fie cu mai multe treceri. Faza este utilizată pentru a clasifica compilatoarele în funcție de construcție, în timp ce trecerea este utilizată pentru a clasifica compilatoarele în funcție de modul în care acestea funcționează.