Un compilator este un program care traduce codul sursă care poate fi citit de om în codul mașinii executabil de computer. Pentru a face acest lucru cu succes, codul care poate fi citit de om trebuie să respecte regulile de sintaxă ale oricărui limbaj de programare în care este scris. Compilatorul este doar un program și nu vă poate repara codul. Dacă faceți o greșeală, trebuie să corectați sintaxa sau aceasta nu va compila.
Complexitatea unui compilator depinde de sintaxa limbajului și de câtă abstracție oferă limbajul de programare. Un compilator C este mult mai simplu decât un compilator pentru C ++ sau C #.
Când compilați, compilatorul citește mai întâi un flux de caractere dintr-un fișier cu cod sursă și generează un flux de jetoane lexicale. De exemplu, codul C ++:
int C = (A * B) +10;
ar putea fi analizate ca aceste jetoane:
Ieșirea lexicală merge către partea analizatorului sintactic al compilatorului, care folosește regulile gramaticii pentru a decide dacă intrarea este valabilă sau nu. Cu excepția cazului în care variabilele A și B au fost declarate anterior și au fost de aplicare, compilatorul ar putea spune:
Dacă au fost declarați, dar nu inițializați. compilatorul emite un avertisment:
Nu ar trebui să ignorați niciodată avertismentele compilatorului. Vă pot sparge codul în mod ciudat și neașteptat. Fixează întotdeauna avertismentele compilatorului.
Unele limbaje de programare sunt scrise astfel încât un compilator poate citi codul sursă o singură dată și să genereze codul mașinii. Pascal este un astfel de limbaj. Mulți compilatori necesită cel puțin două pase. Uneori, se datorează declarațiilor înainte de funcții sau clase.
În C ++, o clasă poate fi declarată, dar nu este definită până mai târziu. Compilatorul nu este capabil să calculeze câtă memorie are nevoie de clasă până când compilează corpul clasei. Trebuie să recitească codul sursă înainte de a genera codul corect al mașinii.
Presupunând că compilatorul finalizează cu succes analizele lexicale și sintactice, etapa finală este generarea codului mașinii. Acesta este un proces complicat, în special cu procesoare moderne.