Un compilator este un tip special de program de calculator care traduce un fișier text care poate fi citit de om într-o formă pe care computerul o poate înțelege mai ușor. La nivelul său cel mai de bază, un computer poate înțelege doar două lucruri, un 1 și un 0. La acest nivel, un om va funcționa foarte lent și va găsi informațiile conținute în șirul lung de 1-uri și 0-uri de neînțeles. Un compilator este un program de calculator care compensează acest decalaj.
La început, compilatoarele erau programe foarte simple care puteau traduce simboluri doar în biți, 1 și 0, computerul a înțeles. Programele erau, de asemenea, foarte simple, compuse dintr-o serie de pași care au fost inițial traduși manual în date pe care computerul le putea înțelege. Aceasta a fost o sarcină care consuma foarte mult timp, așa că porțiuni din această sarcină au fost automatizate sau programate, iar primul compilator a fost scris. Acest program a asamblat, sau a compilat, pașii necesari pentru a executa programul pas cu pas.
Aceste compilatoare simple au fost folosite pentru a scrie un compilator mai sofisticat. Cu versiunea mai nouă, mai multe reguli ar putea fi adăugate la programul compilator pentru a permite o structură a limbajului mai natural cu care să opereze programatorul uman. Acest lucru a făcut scrierea programelor mai ușoară și a permis mai multor persoane să înceapă să scrie programe. Pe măsură ce mai mulți oameni au început să scrie programe, mai multe idei despre scrierea de programe au fost oferite și folosite pentru a crea compilatoare mai sofisticate. În acest fel, programele de compilare continuă să evolueze, să se îmbunătățească și să devină mai ușor de utilizat.
Programele compilatoare pot fi, de asemenea, specializate. Anumite structuri de limbaj sunt mai potrivite pentru o anumită sarcină decât altele, astfel încât compilatoare specifice au fost dezvoltate pentru anumite sarcini sau limbaje. Unele compilatoare sunt cu mai multe etape sau cu treceri multiple. O primă trecere ar putea să ia un limbaj foarte natural și să-l apropie de un limbaj ușor de înțeles de calculator. O a doua sau chiar o a treia trecere ar putea duce la etapa finală, fișierul executabil.
Ieșirea intermediară într-un compilator cu mai multe etape este de obicei numită pseudo-cod, deoarece nu poate fi utilizată de computer. Pseudo-codul este foarte structurat, ca un program de calculator, nu curge liber și verbos ca un limbaj mai natural. Ieșirea finală se numește fișier executabil, deoarece este ceea ce este de fapt executat sau rulat de computer. Împărțirea sarcinii astfel a făcut mai ușor să scrieți compilatoare mai sofisticate, deoarece fiecare subsarcină este diferită. De asemenea, a făcut mai ușor pentru computer să arate unde a avut probleme în a înțelege ce i se cere să facă.
Erorile care limitează compilatorul în înțelegerea unui program se numesc erori de sintaxă. Erorile în modul în care funcționează programul sunt numite erori logice. Erorile logice sunt mult mai greu de identificat și corectat. Erorile de sintaxă sunt ca greșelile de ortografie, în timp ce erorile de logică sunt puțin mai mult ca greșelile gramaticale.
Au fost dezvoltate, de asemenea, programe de compilare încrucișată. Un compilator încrucișat permite un set de fișiere text de instrucțiuni care este scris pentru un computer proiectat de un anumit producător să fie compilat și rulat pentru un computer diferit de un alt producător. De exemplu, un program care a fost scris pentru a rula pe un computer Intel poate fi uneori compilat încrucișat pentru a rula un computer dezvoltat de Motorola. Acest lucru deseori nu funcționează foarte bine. La nivelul la care funcționează programele de calculator, hardware-ul computerului poate arăta foarte diferit, chiar dacă pot arăta similar cu tine.
Compilarea încrucișată este diferită de faptul că un computer emulează un alt computer. Dacă un computer emulează un alt computer, se preface că este celălalt computer. Emularea este adesea mai lentă decât compilarea încrucișată, deoarece două programe rulează simultan, programul care se pretinde a fi celălalt computer și programul care rulează. Cu toate acestea, pentru ca compilarea încrucișată să funcționeze, aveți nevoie atât de textul original în limbaj natural care descrie programul, cât și de un computer care este suficient de asemănător cu computerul original pe care să poată funcționa programul pentru a rula pe un alt computer. Acest lucru nu este întotdeauna posibil, așa că ambele tehnici sunt utilizate.