Jezični prevoditelj: razlika između inačica

Izvor: Wikipedija
Izbrisani sadržaj Dodani sadržaj
wikipoveznica
dopuna
Redak 1: Redak 1:
'''Jezični procesor''' (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>, 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 procesora zasniva na tri jezika: ''izvorni jezik'', ''ciljni jezik'' i ''jezik izgradnje'', te se jezični procesor prikazuje na sljedeći način:
{{mergetalk}}
'''Jezični procesor''' (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>, te kolokvijalno često kao '''kompajler''') jest [[računalni program]] koji čita program napisan u izvornom jeziku, te ga prevodi u istovjetni program u ciljnom jeziku. Formalna se definicija jezičnog procesora zasniva na tri jezika: ''izvorni jezik'', ''ciljni jezik'' i ''jezik izgradnje'', te se jezični procesor prikazuje na sljedeći način:


<math>JP_{L_g }^{L_i \to L_c } </math>
<math>JP_{L_g }^{L_i \to L_c } </math>


gdje je ''JP'' jezični procesor, <math>L_i</math> je izvorni jezik, <math>L_c</math> je ciljni jezik, te <math>L_g</math> je jezik izgradnje.
gdje je ''JP'' jezični procesor, <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 procesor i sam program, te je stoga jezik izgradnje [[programski jezik]] kojim je ostvaren sam jezični procesor.
Obično je jezični procesor i sam program, te je stoga jezik izgradnje [[programski jezik]] kojim je ostvaren sam jezični procesor.
Redak 37: Redak 97:


== Poveznice ==
== Poveznice ==

* [[Compilers: Principles, Techniques, and Tools]]
* [[Compilers: Principles, Techniques, and Tools]]
* [http://compilers.iecc.com/crenshaw/ Let's Build a Compiler, by Jack Crenshaw]
* [http://compilers.iecc.com/crenshaw/ Let's Build a Compiler, by Jack Crenshaw]


== Reference ==
== Izvori ==


<references/>
<references/>
Redak 46: Redak 107:
{{Mrva-rač}}
{{Mrva-rač}}
[[Kategorija:Jezični procesori| ]]
[[Kategorija:Jezični procesori| ]]

<!-- interwiki -->


[[af:Vertalerkonstruksie]]
[[af:Vertalerkonstruksie]]

Inačica od 1. veljače 2008. u 20:08

Jezični procesor (još i prevodilac, prevoditelj, programski prevodilac, programski prevoditelj, kompilator[1], te kolokvijalno često kompajler od 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 procesora zasniva na tri jezika: izvorni jezik, ciljni jezik i jezik izgradnje, te se jezični procesor prikazuje na sljedeći način:

gdje je JP jezični procesor, je izvorni jezik, je ciljni jezik, te je jezik izgradnje.

Primjer:

Programski kod - Java Strojni kod
public class Ggt {
 /*
  */
 private static int ggt(int zahl1, int zahl2) {
   while (zahl1 != zahl2) {
     if (zahl1 < zahl2) {
       zahl2 = zahl2 - zahl1;
     } else {
       zahl2 = zahl1 - zahl2;
     }
   }
   return zahl1;
 }

 /*
  */
 public static void main(String[] args) {
   /*
    */
   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);
 }
}
Prevoditelj →
···
0010 0100 1011 0111
1000 1110 1100 1011
0101 1001 0010 0001
0111 0010 0011 1101
0001 0000 1001 0100
1000 1001 1011 1110
0001 0011 0101 1001
0111 0010 0011 1101
0001 0000 1001 0000
1000 1001 1011 1111
1001 1101 1001 1110
0111 0010 0011 1101
0001 0000 1001 0000
0111 0010 0011 1101
0001 0011 1001 1100
···


Obično je jezični procesor i sam program, te je stoga jezik izgradnje programski jezik kojim je ostvaren sam jezični procesor.

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 jezičnog procesora:

  • 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. 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.

Poveznice

Izvori

  1. Kiš Miroslav, Englesko-hrvatski i hrvatsko-engleski informatički rječnik, Zagreb, Naklada Ljevak, 2000., str. 211
Nedovršeni članak Jezični prevoditelj koji govori o računarstvu treba dopuniti. Dopunite ga prema pravilima Wikipedije.