Mis on kompilaator?

Kompilaator on arvutiprogrammi eritüüp, mis tõlgib inimesele loetava tekstifaili arvutile hõlpsamini mõistetavasse vormi. Kõige elementaarsemal tasemel saab arvuti aru ainult kahest asjast, 1-st ja 0-st. Sellel tasemel töötab inimene väga aeglaselt ja peab pikas 1-de ja 0-de jadas sisalduvat teavet arusaamatuks. Kompilaator on arvutiprogramm, mis ületab selle lünga.

Alguses olid kompilaatorid väga lihtsad programmid, mis suutsid sümboleid tõlkida ainult bittideks, 1-deks ja 0-deks, millest arvuti aru sai. Programmid olid samuti väga lihtsad, koosnedes mitmest etapist, mis tõlgiti algselt käsitsi andmeteks, mida arvuti arusaadav oli. See oli väga aeganõudev ülesanne, nii et osa sellest ülesandest automatiseeriti või programmeeriti ja kirjutati esimene kompilaator. See programm pani kokku või kompileeris samm-sammult programmi täitmiseks vajalikud sammud.

Neid lihtsaid kompilaatoreid kasutati keerukama kompilaatori kirjutamiseks. Uuema versiooniga saab kompilaatoriprogrammi lisada rohkem reegleid, et võimaldada inimese programmeerijale loomulikumat keelestruktuuri. See muutis programmide kirjutamise lihtsamaks ja võimaldas rohkematel inimestel programme kirjutama hakata. Kuna rohkem inimesi hakkas programme kirjutama, pakuti rohkem ideid programmide kirjutamise kohta ja neid kasutati keerukamate kompilaatorite tegemiseks. Sel viisil arenevad kompilaatoriprogrammid edasi, täiustatakse ja muutuvad hõlpsamini kasutatavaks.

Kompilaatoriprogrammid võivad olla ka spetsialiseerunud. Teatud keelestruktuurid sobivad konkreetse ülesande jaoks paremini kui teised, seetõttu töötati konkreetsete ülesannete või keelte jaoks välja spetsiaalsed kompilaatorid. Mõned kompilaatorid on mitmeastmelised või mitmekäigulised. Esimene läbimine võib võtta väga loomuliku keele ja muuta selle arvutile arusaadavale keelele lähedasemaks. Teine või isegi kolmas läbimine võib viia selle lõppfaasi, käivitatavasse faili.

Mitmeastmelise kompilaatori vaheväljundit nimetatakse tavaliselt pseudokoodiks, kuna see pole arvuti jaoks kasutatav. Pseudokood on väga struktureeritud, nagu arvutiprogramm, mitte vabalt voolav ja paljusõnaline nagu loomulikum keel. Lõplikku väljundit nimetatakse käivitatavaks failiks, kuna see on see, mida arvuti tegelikult käivitab või käivitab. Ülesande niimoodi poolitamine muutis keerukamate kompilaatorite kirjutamise lihtsamaks, kuna iga alamülesanne on erinev. Samuti oli arvutil lihtsam osutada kohtadele, kus tal oli probleeme arusaamisega, mida talt paluti.

Vigu, mis piiravad kompilaatoril programmi mõistmist, nimetatakse süntaksivigadeks. Programmi toimimises esinevaid vigu nimetatakse loogikavigadeks. Loogikavigu on palju raskem märgata ja parandada. Süntaksivead on nagu õigekirjavead, samas kui loogikavead on natuke rohkem nagu grammatikavead.
Samuti on välja töötatud ristkompilaatoriprogramme. Ristkompilaator võimaldab tekstifaili juhiste komplekti, mis on kirjutatud ühe konkreetse tootja loodud arvuti jaoks, kompileerida ja käivitada teise arvuti jaoks teise tootja poolt. Näiteks programmi, mis on kirjutatud töötama Inteli arvutis, saab mõnikord ristkompileerida, et käivitada Motorola välja töötatud arvutis. See ei tööta sageli kuigi hästi. Arvutiprogrammide töötasemel võib arvuti riistvara välja näha väga erinev, isegi kui see võib tunduda teile sarnane.
Ristkompileerimine erineb sellest, kui üks arvuti emuleerib teist arvutit. Kui arvuti emuleerib teist arvutit, teeskleb see seda teist arvutit. Emuleerimine on sageli aeglasem kui ristkompileerimine, kuna korraga töötab kaks programmi – programm, mis teeskleb teist arvutit, ja programm, mis töötab. Ristkompileerimise toimimiseks on aga vaja nii programmi kirjeldavat originaalteksti loomulikus keeles, kui ka arvutit, mis on algarvutiga piisavalt sarnane, et programm saaks töötada teises arvutis. See ei ole alati võimalik, seetõttu kasutatakse mõlemat tehnikat.