Documente Academic
Documente Profesional
Documente Cultură
Un compilator este un program de computer care traduce codul computerului scris dintr- un limbaj de
programare (limba sursă) intr-o altă limbă (limba țintă). Numele de Compilator este utilizat în principal pentru
programele care traduc codul sursă dintr-un limbaj de programare la un nivel înalt într-un limbaj de nivel
inferior pentru a crea un program executabil.
Cu toate acestea, există multe tipuri diferite de compilatoare.
Dacă programul compilat poate rula pe un computer al cărui procesor sau sistem de operare este diferit
de cel pe care rulează compilatorul, acesta este un compilator încrucișat.
Un compilator pentru bootstrap este scris in limba pe care intenționează să o compileze.
Un program care se traduce de la un limbaj de nivel scăzut la unul de nivel superior este un
decompilator.
Un program care traduce între limbi de nivel înalt este de obicei numit compilator sursă- la-sursă.
Un rescriptor de limbă este de obicei un program care traduce forma expresiilor fără o schimbare de
limbă.
Termenul compilator-compilator se referă la instrumentele utilizate pentru a crea parsere care
efectuează analiza sintaxei.
Un compilator este probabil să efectueze multe sau toate operațiunile următoare: prcproccsarea. analiza
lexicală, analiza, analiza semantică (traducere orientată de sintaxă), conversia programelor de intrare într-o
reprezentare intermediară, optimizarea codului și generarea de coduri. Compilatoarele implementează aceste
operațiuni in faze care promovează o proiectare eficientă și transformări corecte ale sursei de intrare în rezultatul
vizat. Defecțiunile programului cauzate de un comportament incorect al compilatorului pol fi foarte dificil de
urmărit și de rezolvat: prin urmare, operatorii de compilare investesc eforturi importante pentru a asigura
corectitudinea compilatorului.
Compilatoarele nu sunt singurul procesor de limbă utilizat pentru transformarea programelor sursă. Un
interpretator este un software informatic care transformă și apoi execută operațiunile indicate. Procesul de
traducere influențează proiectarea limbajelor computerizate ceea ce duce la o preferință de compilare sau
interpretare. în practică, un interpretator poate fi implementat pentru limbi compilate și compilatoare pot fi
implementate pentru limbi interpretate.
Construcție compilatoare
Un compilator implementează o transformare formală de la un program sursă de nivel înalt la un program țintă
de nivel scăzut. Proiectarea compilatonilui poate defini o soluție de la capăt la capăt sau poate aborda un subset
definit, care interferează eu alte instrumente de compilare, de ex. prcproccsoare, asamblatoare. linkere. Cerințele
de proiectare includ interfețe riguros definite atât intern între componentele compilatorului, eât și extern. între
seturile de instrumente de sprijin.
In primele zile, abordarea adoptată pentru proiectarea compilatorului a fost direct afectată de complexitatea
limbajului computerului care urmează să fie procesat, de experiența persoanei (persoanelor) care îl proiectează
și de resursele disponibile. Limitările resurselor au dus la necesitatea de a trece prin codul sursă de mai multe
ori.
Un compilator pentru un limbaj relativ simplu scris de o singură persoană ar putea tl un singur software
monolitic. Cu toate acestea, pe măsură ce limbajul sursă crește în complexitate, proiectarea poate fi împărțită
intr-o serie de faze interdependente. Fazele separate oferă îmbunătățiri ale proiectării care concentrează
dezvoltarea funcțiilor din procesul de compilare.
Dezavantajul compilării într-un singur pas este că nu este posibil să se efectueze multe dintre
optimizările sofisticate necesare pentru a genera cod de înaltă calitate. Poate fi dificil să numeri exact câte
treceri realizează un compilator optimizat. De exemplu, diferite faze de optimizare pot analiza o expresie de
multe ori, dar analizează o altă expresie o singură dată.
Tipuri de compilatoare
O clasificare a compilatoarelor este realizată de platforma pe care se execută codul lor generat. Aceasta este
cunoscută sub numele de platforma țintă.
Un compilator nativ sau găzduit este unul al cărui proces este destinat să ruleze direct pe același tip de computer
și sistem de operare pe care compilatorul in sine il rulează. Ieșirea unui compilator încrucișat este proiectată
pentru a rula pc o platformă diferită. Compilatoarele încrucișate sunt adesea utilizate atunci când dezvoltă
software pentru sisteme încorporate care nu sunt destinate să susțină un mediu de dezvoltare software.
Ieșirea unui compilator care produce cod pentru o mașină virtuală (VM) poate fi sau nu executată pc aceeași
platformă cu compilatorul cârc a produs-o. Din acest motiv, aceste compilatoare nu sunt de obicei clasificate ca
compilatoare native sau încrucișate.
Limbajul de nivel inferior care este ținta unui compilator poate fi el însuși un limbaj de programare la nivel
înalt. C, privit de unii ca un fel de limbaj portabil de asamblare, este frecvent limbajul țintă al acestor
compilatoare. De exemplu, front, compilatorul original pentru C ++, a folosit C ca limbă țintă. Codul C generat
de un astfel de compilator nu este de obicei conceput pentru a fi citit și întreținut de către oameni, astfel încât
stilul indent și crearea codului intermediar C destui de mult sunt ignorate. Unele dintre caracteristicile C care il
fac un limbaj țintă bun includ directiva #linc, care poate ti generată dc compilator pentru a susține debugging- ul
sursei originale și suportul pentru platformă larg disponibil cu compilatoare C.
în timp ce un tip dc compilator obișnuit produce codul mașinii, există multe alte tipuri:
- Compilatoarele sursă la sursă sunt un tip de compilator care ia un limbaj la nivel înalt ca intrare și
produce un limbaj la nivel înalt. De exemplu, un compilator de paralelizare automată va lua frecvent un program
dc limbaj la nivel înalt ca o intrare și apoi să transforme codul și să-l adnoteze cu adnotări de cod paralele (dc
cx. OpcnMP) sau constructie de limbaj (dc exemplu, declarațiile DOALL ale lui Fortran).
- Compilatoare Bytecode care compilează la limbajul dc asamblare al unei mașini teoretice, precum
unele implementări Prolog
Acest aparat Prolog este cunoscut și sub denumirea de Warren Abstract Machine (sau WAM).
- Compilatoarele Bytecode pentru Java. Python sunt, dc asemenea, exemple din această categoric.
- Compilatoarele J-in-time (compilatorul J1T) amână compilarea până la timpul de execuție.
Compilatoarele J1T există pentru multe limbi moderne, inclusiv Python. JavaScript. Smalltalk. Java.
Microsoft .NET Common Intermediate Language (CIL) și altele. Un compilator JIT rulează, in general, in
interiorul unui interpret. Când interpretul detectează că o cale de cod este “fierbinte", adică este executat
frecvent, compilatorul J1T va fi invocat și va compila codul „la cald" pentru o performanță sporită.
Pentru unele limbi, cum ar fi Java, aplicațiile sunt compilate mai întâi folosind un compilator bytecode și livrate
într-o reprezentare intermediară independentă de mașină. Un interpret bytecode execută bytecode, dar
compilatorul JIT va traduce bytecode în codul mașinii atunci când este necesară o performanță crescută.
- Compilatoarele hardware (cunoscute și sub numele dc instrumente dc sinteză) sunt compilatoare a căror
ieșire este o descriere a configurației hardware în loc dc o secvență dc instrucțiuni.
Rezultatele acestor compilatoare vizează hardware-ul computerului la un nivel foarte scăzut, dc
exemplu, un array gate-programabil dc câmp (FPGA) sau un circuit integrat specific AS1C să fie compilatori de
hardware, deoarece codul sursă pe care il compila controlează eficient configurația finală a hardware-ului și
modul de funcționare al acestuia. Rezultatul compilării este doar o interconectare a tranzistoarelor sau a
tabelelor de căutare.
Un exemplu de compilator hardware este XST, instrumentul de sinteză Xilinx utilizat pentru configurarea
FPGA.
un asamblator este un program care compilează limbajul de asamblare care poate fi citit de om la codul
mașinii, instrucțiunile reale executate de hardware. Programul invers care traduce codul mașinii in
limbajul de asamblare se numește dezasamblator.
un program care se traduce de la un limbaj de nivel scăzut la unul superior este un decompilator.
un program care se traduce între limbi la nivel înalt este de obicei numit traducător de limbă,
compilator sursă-sursă, convertor de limbă sau rescriptor de limbă. Ultimul termen este de obicei
aplicat traducerilor care nu implică o schimbare de limbă .
un program care se traduce într-un format de cod obiect cârc nu este acceptat pe mașina de compilare
se numește compilator încrucișat și este utilizat în mod obișnuit pentru pregătirea codului pentru
aplicațiile încorporate.
Un program care rescrie codul obiect din nou in același tip de cod obiect in timp ce aplică optimizări și
transformări este un recompilator binar.
Bibliografie
https://ro.wikipedia.org/wiki/Compilator
https://en.wikipedia.org/wiki/Compiler
https://www.guru99.com/compiler-design-tutorial.html
https://whatis.techtarget.com/definition/compiler
https://resources.saylor.org/wwwresources/archived/site/wp-content/uploads/2012/01/CS304-1.2.2-
COMPILERSHISTORYWIKI.pdf
https://en.wikipedia.org/wiki/History_of_compiler_construction
https://en.wikipedia.org/wiki/List_of_compilers
https://www.sciencehq.com/computing-technology/compiler-construction.html
https://www.geeksforgeeks.org/compiler-construction-tools/