Jezični prevoditelj: razlika između inačica
Izbrisani sadržaj Dodani sadržaj
m Bot: Migrating 65 interwiki links, now provided by Wikidata on d:q47506 (translate me) |
tekst stranice se zamjenjuje s 'tu connais == Poveznice == * Compilers: Principles, Techniques, and Tools * [http://compilers.iecc.com/crenshaw/ Let's Build a Compiler, by Jack Crenshaw]...' Oznake: mobilni uređaj mobilna aplikacija |
||
Redak 1: | Redak 1: | ||
tu connais |
|||
'''Jezični prevoditelj''' (još i '''prevodilac''', '''prevoditelj''', '''programski prevodilac''', '''programski prevoditelj''', '''kompilator'''<ref name="InfoRjecnik">Kiš Miroslav, ''Englesko-hrvatski i hrvatsko-engleski informatički rječnik'', Zagreb, Naklada Ljevak, 2000., str. 211</ref><ref name="demisticirani">[http://free-zg.htnet.hr/jsribar/demistif.pdf Demistificirani C++, 2. izdanje, str. 18]</ref>, te kolokvijalno često ''kompajler'' od [[Engleski jezik|eng.]] ''compiler'') jest [[računalni program]] koji čita program napisan u izvornom jeziku, te ga prevodi u istovjetni program u ciljnom (najčešće strojnom) jeziku. Formalna se definicija jezičnog prevoditelja zasniva na tri jezika: ''izvorni jezik'', ''ciljni jezik'' i ''jezik izgradnje'', te se jezični prevoditelj prikazuje na sljedeći način: |
|||
<math>JP_{L_g }^{L_i \to L_c } </math> |
|||
gdje je ''JP'' jezični prevoditelj, <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%" |
|||
|- |
|||
! Programski kod - [[Java (programski jezik)|Java]] |
|||
! width="200px" | |
|||
! Strojni kod |
|||
|- |
|||
| style="font-size:80%" | |
|||
public class Ggt { |
|||
<font color="grey"><i>/* |
|||
*/</i></font> |
|||
private static int ggt(int zahl1, int zahl2) { |
|||
'''while''' (zahl1 != zahl2) { |
|||
'''if''' (zahl1 < zahl2) { |
|||
zahl2 = zahl2 - zahl1; |
|||
} '''else''' { |
|||
zahl2 = zahl1 - zahl2; |
|||
} |
|||
} |
|||
'''return''' zahl1; |
|||
} |
|||
<font color="grey"><i>/* |
|||
*/</i></font> |
|||
public static void main(String[] args) { |
|||
<font color="grey"><i>/* |
|||
*/</i></font> |
|||
int ersteZahl = Integer.parseInt(args[0]); |
|||
int zweiteZahl = Integer.parseInt(args[1]); |
|||
int ergebnis = ggt(ersteZahl, zweiteZahl); |
|||
System.out.println("Der ggT von " + ersteZahl + |
|||
" und " + zweiteZahl + " ist: " + ergebnis); |
|||
} |
|||
} |
|||
| align="center" | '''Prevoditelj →''' |
|||
| 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> |
|||
··· |
|||
|} |
|||
Obično je jezični prevoditelj i sam program, te je stoga jezik izgradnje [[programski jezik]] kojim je ostvaren sam prevoditelj. |
|||
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 prevoditelja: |
|||
*faza analize izvornog programa |
|||
*faza sinteze ciljnog programa |
|||
Tijekom faze analize izvornog programa izvode se dva procesa prevođenja, jedan tijekom [[Leksička analiza|leksičke analize]], drugi tijekom [[Sintaksna analiza|sintaksne analize]] i [[Semantička analiza|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 podatkovnu strukturu zvanu ''tablica znakova'' (ili ''tablica simbola'') u koju se spremaju svi ostali podaci važni za varijable i konstante. |
|||
Tijekom sintaksne analize izvodi se proces prihvaćanja nizova jedinstvenih znakova leksičkih jedinki, a tijekom 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. |
|||
Tijekom 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 na mjesta u tablici znakova. |
|||
Tijekom 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. |
|||
Tijekom procesa prevođenja višeg međukoda u srednji međukod se obavlja pretvorba složenih podatkovnih struktura, kao što su nizovi podataka, i složenih kontrolnih programskih konstrukta u niz naredbi koje koriste isključivo varijable i jednostavne naredbe grananja. |
|||
Naredbe nižeg međukoda koriste simboličke registre ''r1'' do ''r8''. |
|||
Vidi [[interpreter]], [[dekompilator]], [[transkompilator]], [[cross-kompilator]], [[izvorni kod]], [[asemblerski jezik]], [[strojni jezik]]. |
|||
== Poveznice == |
== Poveznice == |
Inačica od 30. siječnja 2015. u 16:31
tu connais
Poveznice
Izvori
Nedovršeni članak Jezični prevoditelj koji govori o računarstvu treba dopuniti. Dopunite ga prema pravilima Wikipedije.