Razlika između verzija stranice "Kompajler"

[nepregledana izmjena][nepregledana izmjena]
Uklonjeni sadržaj Dodani sadržaj
Sz-iwbot (razgovor | doprinosi)
m robot Dodaje: ms:Pengkompil
obradjen i prosiren clanak sa hr.wikipedije
Red 1:
'''Kompajler''' ({{en|compiler}})''prevodilac'', je''programski prevodilac'', [[programskiEngleski jezik|programskog jezikaeng.]] i''compiler'') njegovih instrukcija ujest [[mašinskiračunarski kodprogram]] (nulekoji ičita jediniceprogram napisan u izvornom jeziku, te ga prevodi u u ciljani (najčešće mašinski) jezik.
 
[[Softver]] pisan za prve [[računar]]e je dugo vremena pisan u [[asembler]]skom jeziku (niži simbolički jezik namijenjen programiranju računara i prilagođen arhitekturi centralnog [[procesor]]a, razlikovati od asemblera – asembler je pomoćni program koji prevodi asemblerski jezik u mašinski jezik datog računara). Viši programski jezici su stvoreni tek kada je korist od mogućnosti upotrebe softvera na više vrsta procesora postala veća od troškova pisanja kompajlera. Ograničene [[memorija|memorijske]] mogućnosti prvih računara su bile tehnička prepreka kod primjene kompajlera.
 
U svojim začecima, izgled kompajlera ovisio je od kompleksnosti procesiranja, iskustva autora i raspoloživih resursa. Kompajler koji piše jedan autor za neki relativno jednostavan jezik je jedan, monolitan, komad softvera. Složeniji jezici i zahtjevi za kvalitetom rezultiraju kompajlerima dizajniranim u nekoliko donekle samostalnih faza. Za svaku od faza može biti zadužen po jedan autor, odnosno, posao podijeljen između više saradnika. Rad po fazama omogućava kasniju lakšu zamjenu poboljšanim verzijama ili umetanje novih (optimizacija).
 
Formalna se definicija kompajlera zasniva na odnos između tri jezika: ''izvorni jezik'', ''ciljni jezik'' i ''jezik izgradnje'', te se kompajler prikazuje na slijedeći način:
 
 
:<math>MJ_{L_g }^{L_i \to L_c } </math>
 
gdje je ''MJ'' kompajler <math>L_i</math> je izvorni jezik, <math>L_c</math> je ciljni jezik, te <math>L_g</math> je jezik izgradnje.
 
Primjer:
 
{| cellspacing="12" cellpadding="4" style="border-collapse:collapse" width="100%"
Line 5 ⟶ 18:
! Programski kod - [[Java programski jezik|Java]]
! width="200px" |
! Mašinski kodjezik
|-
| style="font-size:80%" |
Line 37 ⟶ 50:
}
 
| align="center" | '''KompajlerPrevoditelj →'''
| style="font-size:80%" |
···•••<br />
0010 0100 1011 0111<br />
1000 1110 1100 1011<br />
0101 1001 0010 0001<br />
0111 0010 0011 1101<br />
0001 0000 1001 0100<br />
1000 1001 1011 1110<br />
0001 0011 0101 1001<br />
0111 0010 0011 1101<br />
0001 0000 1001 0000<br />
1000 1001 1011 1111<br />
1001 1101 1001 1110<br />
0111 0010 0011 1101<br />
0001 0000 1001 0000<br />
0111 0010 0011 1101<br />
0001 0011 1001 1100<br />
•••
···
|}
 
 
 
[[Kategorija:Programiranje]]
Obično je kompajler i sam program, te je stoga i jezik izgradnje [[programski jezik|programski jezik]] kojim je ostvaren sam kompajler.
 
Osim tri spomenuta jezika, razvijaju se i posebni ''metajezici'' (''jezici definiranja jezika'') koji omogućuju jednostavan zapis pravila programskih jezika.
 
Dvije su osnovne faze rada kompajlera:
 
*faza analize izvornog programa
*faza sinteze ciljnog programa
 
Tijekom faze analize izvornog programa izvode se dva procesa prevođenja, jedan tijekom leksičke analize, drugi tijekom sintaksne analize i semantičke analize.
 
Leksička analiza grupira znakove izvornog programa u osnovne elemente jezika, koje se zovu leksičke jedinke (engl. ''token'') ili leksemi. Leksemi su npr. varijable, ključne riječi, konstante, operatori i pravopisni znakovi.
Leksička se jedinka formalno zadaje kao niz znakova. Leksička pravila određuju skup svih pravilno napisanih leksičkih jedinki (nizova) zadanog programskog jezika.
 
Dozvoljava se da je skup pravilno napisanih leksičkih jedinki beskonačan i u formalnom smislu taj skup definira jezik leksičkih jedinki. [[Konačni automat|Formalni automat]] je osnovica leksičkog analizatora. Tijekom leksičke analize, svaki se leksem zamijeni ''jedinstvenim znakom''.
 
Leksički analizator također gradi strukturu podataka zvanu ''tablica znakova'' (ili ''tablica simbola'') u koju se spremaju svi ostali podaci važni za varijable i konstante.
 
Tokom sintaksne analize izvodi se proces prihvaćanja nizova jedinstvenih znakova leksičkih jedinki, a tokom semantičke analize izvodi se proces generiranja višeg međukoda. Formalni automat je okosnica i sintaksnog analizatora.
 
Semantički analizator pokreće proces generiranja višeg međukoda. Semantička pravila su interpretacijska pravila koja povezuju izvođenje programa s ponašanjem računala. Semantika jezika određuje skup dozvoljenih značenja.
 
Tokom procesa generiranja višeg međukoda obično se izračunavaju konstantne vrijednosti i pojednostavi se struktura naredbe. Uobičajeno je da naredbe višeg međukoda sadrže kazaljke usmjerene na mjesta u tablici znakova.
 
Tokom faze sinteze ciljnog programa izvode se tri procesa prevođenja: prevođenje višeg međukoda u srednji međukod, prevođenje srednjeg međukoda u niži međukod i prevođenje nižeg međukoda u ciljni program.
 
Tokom procesa prevođenja višeg međukoda u srednji međukod obavlja se pretvaranje složenih struktura podataka, kao što su nizovi podataka, i složenih kontrolnih programskih konstrukcija u niz naredbi koje koriste isključivo varijable i jednostavne naredbe grananja.
 
Naredbe nižeg međukoda koriste simboličke registre ''r1'' do ''r8''.
 
 
 
[[Kategorija:ProgramiranjeRačunarstvo]]
 
 
[[af:Vertalerkonstruksie]]
Line 82 ⟶ 129:
[[he:מהדר]]
[[hi:कम्पाइलर]]
[[hr:Jezični procesor]]
[[hu:Fordítóprogram]]
[[id:Kompilator]]
Line 93 ⟶ 139:
[[lv:Kompilators]]
[[mk:Компајлер]]
[[ml:കംപൈലര്‍കംപൈലര്]]
[[ms:Pengkompil]]
[[nl:Compiler]]