Definiția și scopul unui compilator

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.

Ce se întâmplă când compilați codul?

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 #.

Analiză lexicală

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:

  • tastați „int”
  • variabila "C"
  • equals
  • leftbracket
  • variabila "A"
  • ori
  • variabila "B"
  • rightbracket
  • la care se adauga
  • literal "10"

Analiza sintactică

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:

  • „A”: identificator nedeclarat.

Dacă au fost declarați, dar nu inițializați. compilatorul emite un avertisment:

  • variabila locală „A” folosită fără a fi inițializată.

Nu ar trebui să ignorați niciodată avertismentele compilatorului. Vă pot sparge codul în mod ciudat și neașteptat. Fixează întotdeauna avertismentele compilatorului.

O trecere sau două?

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.

Generarea codului 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.