Un compilator este un program care traduce codul sursă pentru un alt program dintr-un limbaj de programare în cod executabil.
Codul sursă este de obicei într-un limbaj de programare la nivel înalt (de ex. Pascal, C, C ++, Java, Perl, C # etc.). Codul executabil poate fi o secvență de instrucțiuni ale mașinii care poate fi executată direct de CPU sau poate fi o reprezentare intermediară care este interpretată de o mașină virtuală (de exemplu, cod de octeți Java).
Pe scurt, un compilator convertește un program dintr-un format care poate fi citit de om într-un format care poate fi citit de mașină.
În ceea ce privește modul în care funcționează un compilator, acest lucru este într-adevăr complicat. Există cărți și cursuri universitare pe această temă. Voi încerca să schițez pe scurt etapele principale ale procesului, dar aceasta va fi o privire de ansamblu foarte scurtă.
- Lexing – împarte textul programului în „jetoane”. Jetoanele sunt „cuvintele” limbajului de programare, cum ar fi identificatori (cuvinte cheie, nume de variabile, nume de funcții etc.) sau operatori (=, *, & etc.) .
- Parsare – convertiți secvența de jetoane într-un arbore de analiză, care este o structură de date care reprezintă diverse construcții de limbă: declarații de tip, declarații de variabile, definiții de funcții, bucle, condiționare, expresii etc.
- Optimizare – evaluați expresii constante, optimizați variabilele neutilizate sau codul care nu poate fi accesat, derulați buclele, dacă este posibil, etc.
- Traduceți arborele de analiză în instrucțiuni ale mașinii (sau cod de octeți JVM).
Din nou, subliniez că aceasta este o descriere foarte scurtă. Compilatoarele moderne sunt foarte inteligente și, în consecință, foarte complicate.
Comentarii
Un compilator este un program de computer (sau un set de instrucțiuni) care transformă codul sursă scris într-un limbaj de programare (limbajul sursă) într-un alt limbaj de computer ( limbă țintă, având adesea o formă binară cunoscută sub numele de cod obiect). Cel mai frecvent motiv pentru care dorim să transformăm codul sursă este să creăm un program executabil.
Compilatoarele pun în legătură programele sursă în limbaje de nivel înalt cu hardware-ul de bază. Un compilator necesită:
- Determinarea corectitudinii sintaxei programelor
- Generarea unui cod obiect corect și eficient
- Organizare în timpul rulării
- Formatarea ieșirii conform convențiilor de asamblare și / sau linker.