Što je kompajler?

Prevoditelj je posebna vrsta računalnog programa koji prevodi čovjeku čitljivu tekstualnu datoteku u oblik koji računalo može lakše razumjeti. Na svojoj najosnovnijoj razini, računalo može razumjeti samo dvije stvari, 1 i 0. Na ovoj razini, čovjek će raditi vrlo sporo i smatrati da su informacije sadržane u dugom nizu 1 i 0 nerazumljivima. Prevoditelj je računalni program koji premošćuje ovaj jaz.

U početku su prevoditelji bili vrlo jednostavni programi koji su mogli prevoditi samo simbole u bitove, 1 i 0, računalo je razumjelo. Programi su također bili vrlo jednostavni, sastavljeni od niza koraka koji su izvorno ručno prevedeni u podatke koje je računalo moglo razumjeti. Ovo je bio vrlo dugotrajan zadatak, pa su dijelovi ovog zadatka bili automatizirani ili programirani, a prvi prevodilac je napisan. Ovaj program sastavlja, ili kompajlira, korake potrebne za izvršavanje programa korak po korak.

Ovi jednostavni prevodioci korišteni su za pisanje sofisticiranijeg prevoditelja. S novijom verzijom, više pravila bi se moglo dodati u program prevoditelja kako bi se omogućila prirodnija jezična struktura za rad programera. To je olakšalo pisanje programa i omogućilo da više ljudi počne pisati programe. Kako je sve više ljudi počelo pisati programe, nudilo se više ideja o pisanju programa koje su korištene za izradu sofisticiranijih kompilatora. Na taj se način programi kompajlera nastavljaju razvijati, poboljšavati i postaju lakši za korištenje.

Programi kompajlera također mogu biti specijalizirani. Određene jezične strukture prikladnije su za određeni zadatak od drugih, pa su razvijeni specifični prevoditelji za određene zadatke ili jezike. Neki su prevoditelji višestupanjski ili višeprolazni. Prvi prolaz mogao bi uzeti vrlo prirodan jezik i učiniti ga bližim računalu razumljivom jeziku. Drugi ili čak treći prolaz mogao bi ga odvesti do posljednje faze, izvršne datoteke.

Srednji izlaz u višestupanjskom kompajleru obično se naziva pseudo-kod, budući da ga računalo ne može koristiti. Pseudokod je vrlo strukturiran, poput računalnog programa, nije slobodan i opsežan kao prirodniji jezik. Konačni izlaz naziva se izvršna datoteka, budući da je to ono što računalo zapravo izvršava ili pokreće. Ovakvo dijeljenje zadatka olakšalo je pisanje sofisticiranijih kompilatora, budući da je svaki podzadatak drugačiji. Računalo je također olakšalo ukazivanje na to gdje ima problema s razumijevanjem onoga što se od njega traži.

Pogreške koje ograničavaju prevoditelja u razumijevanju programa nazivaju se sintaktičkim pogreškama. Pogreške u načinu rada programa nazivaju se logičkim pogreškama. Logičke greške mnogo je teže uočiti i ispraviti. Sintaktičke pogreške su poput pravopisnih pogrešaka, dok su logičke pogreške malo više poput gramatičkih grešaka.
Razvijeni su i programi za unakrsno prevođenje. Unakrsni prevodilac omogućuje da se skup tekstualnih datoteka uputa koji je napisan za jedno računalo koje je dizajnirao određeni proizvođač prevede i pokrene za drugo računalo od strane drugog proizvođača. Na primjer, program koji je napisan za rad na Intelovom računalu ponekad se može unakrsno prevesti za pokretanje na računalu koje je razvila Motorola. Ovo često ne funkcionira dobro. Na razini na kojoj računalni programi rade, računalni hardver može izgledati vrlo različito, čak i ako vam može izgledati slično.
Unakrsna kompilacija razlikuje se od toga da jedno računalo oponaša drugo računalo. Ako računalo oponaša drugo računalo, pretvara se da je to drugo računalo. Emulacija je često sporija od unakrsnog prevođenja, budući da se dva programa izvode odjednom, program koji se pretvara da je drugo računalo i program koji se izvodi. Međutim, da bi unakrsna kompilacija funkcionirala, potreban vam je i izvorni tekst na prirodnom jeziku koji opisuje program i računalo koje je dovoljno slično izvornom računalu na kojem program može funkcionirati za rad na drugom računalu. To nije uvijek moguće, pa se koriste obje tehnike.