3.4.2. Jezički procesori

 Natrag  Programska potpora  Dalje


Binarni oblik pisanja instrukcija vrlo je blizak i razumljiv digitalnom računalu, ali ne i čovjeku. To je 'najniži' PROGRAMSKI JEZIK, usko vezan za sklopovsku strukturu elektronike digitalnog računala. Binarni oblik instrukcija može upotrebljavati samo onaj tko dobro poznaje sklopovlje računala kojeg koristi, a to podrazumijeva veliko znanje iz elektronike i informatike. Zbog toga se u počecima korištenja računalne tehnike zahtijevao posebno obučen kadar. Takav način upravljanja računalom bio je spor i tegoban, podložan greškama i neproduktivan te se danas više i ne koristi. Stoga su razvijeni programski jezici koji svojim skupom programskih alata omogućavaju lakši i efikasniji rad izrade programa. Svaki od programskih jezika u svom sastavu ima JEZIČKI PROCESOR koji programe napisane u tom jeziku PRESLIKAVA (PREVODI) u oblik koji računalo prepoznaje i neposredno izvršava ili ih INTERPRETIRA.

Ako se binarni zapisi pretvore u heksadekadne, pisanje programskih instrukcija je dosta olakšano. Korištenjem prevodioca heksadekadni zapisi pretvaraju se u binarne. Pridodavanjem kraćih naziva (mnemonika) za pojedine instrukcije, pisanje niza instrukcija u smišljenom logičkom nizu (program) postalo je još lakše. Prevodilački programi toga tipa nazivaju se ASEMBLERI, broj instrukcija asemblera prevodi se u isti broj binarnih instrukcija, i za svaku drugu vrstu procesora koristi se drugačiji prevodilac. No, programiranje je i dalje vrlo zahtijevan posao.

Tek pojava 'viših' programskih jezika u suštini je olakšala rad programerima. Kod njih se simbolički napisana instrukcija prevodi u niz binarnih instrukcija, dakle jedna instrukcija programskog jezika objedinjuje se niz binarnih instrukcija koje tvore jednu jedinstvenu zadaću, na primjer ispis znaka na ekranu ili dodjela varijabli ASCII vrijednosti znaka i drugo. Razvojem računalnih sustava razvijali su se i programski jezici različiti prema namijeni, na primjer COBOL, PASCAL, C, FORTRAN, ALGOL i drugi.

Kada se program napiše instrukcijama u jednom od navedenih 'viših' jezika, taj niz instrukcija predstavlja IZVORNI (SOURCE) kod programa, potom se prevodi pomoću prevodilačkog programa (COMPILER) u skup binarnih instrukcija, koje mikroprocesor može prepoznati i odraditi, nazvan IZVRŠNI (EXECUTABLE) kod. Ako se žele izvršiti izmjene u radu programa, tada treba izvršiti odgovarajuće izmjene u izvornom kodu i ponovo izvršiti prevođenje u izvršni kod. Kako ne postoji idealni prevodilac koji će u potpunosti minimizirati izvršni kod, ovako izrađeni programi su nešto duži i sporiji od programa pisanih u asembleru, ali je razlika bez značaja u odnosu na jednostavnost primjene viših programskih jezika.

Jezici koji koriste prevodilački program nemaju samo prevodioca (compiler), koji izvorni kod prevodi kao jedan modul. Prevedenom modulu treba pridodati već potrebite gotove module jezičkog procesora ili druge već izrađene module i sve međusobno povezati pomoću programa za POVEZIVANJE (LINKER) u jednu jedinstvenu izvršivu cjelinu.

Kako je binarni kod specifičan za sklopovlje DRS, ne može se prevodilac jedne računalne platforme primijeniti na drugoj, ali se izvorni kod može prevesti na bilo kojoj platformi ako za nju postoji istorodni prevodilac. Dakle, viši programski jezici osiguravaju i prenosivost s platforme na platformu. DRS za koji postoji više prevodioca za različite programske jezike sustavno je bogatiji i moćniji. No i tu ima podosta sitnih pojedinosti koje to onemogućavaju baš jednostavno, kao na primjer različiti standardi za razlučivost slike, različiti načini spremanja podataka na disk i slično što zahtijeva temeljitije preinake pri prijenosu aplikacije s jedne računalne platforme na drugu.

Neki programski jezici rade na načelu pojedinačnog pretvaranja instrukcija jezika u binarne instrukcije. Njihovi prevodioci su kraći i jednostavniji i ne izrađuju izvršni kod. Putem simultanog prevođenja izvršava se sam izvorni kod. Takvi prevodioci nazivaju se INTERPRETERI, a najpoznatiji od njih je BASIC. Lakše se otklanjaju greške prilikom izvršavanja izvornog koda, ali je zato izvođenje programa jako sporo zbog uzastopnog prevođenja.


Primjer I

Kakva je razlika u efikasnosti pisanja i izvođenja programa napisnih u ASEMBLER-u i BASIC-u?

                Za rješavanje jedne od zadaća u asembler-u utrošeno je
                dva dana rada i 100 byte-a memorijskog prostora izvršnog
                koda. Isti program napravljen u BASIC-u napravljen je
                za jedan sat i zauzima 250 byte-a memorijskog prostora
                izvornog koda ali ne može raditi bez prevoditelja
                (194 kB) i sporiji je preko deset puta.

Navedeni nedostatak interpretera rješava se kompajlerima za interpretere, ali ne tako efikasno kako to rade kompajleri prethodno navedenih viših programskih jezika. No, razvojem programske potpore razvijeni su alati koji omogućavaju uvid u rad izvornog koda kojeg kasnije prevode po načelima jednog od navedenih programskih jezika.

Kada se zajedno primjene asembler i viši programski jezici međusobno ukomponirani na određeni način rezultat je MAKROASEMBLER. Suština je u tome da se niz asemblerskih instrukcija poveže u jednu makro instrukciju koja ima jednu simboličku oznaku i kao takva više puta uporabljiva, no to je proizvoljna kreacija programera.

Na slici 3.4.5 prikazana je podjela jezičkih procesora temeljem prethodno opisanog.

 Programerski alati
Slika 3.4.5 Podjela jezičkih procesora.  

Instrukcije jezičkog procesora pišu se u nekom od ASCII uređivača teksta (EDITOR), koji ne podržavaju zaglavlja, centriranje teksta, poravnavanje i slično, jer to za ovu namjenu nije potrebito, ali će imati neke druge mogućnosti potrebite programeru kao kontrola ispravnosti naziva instrukcija i slično. Pojedini programski jezici imaju vlastiti editor, u suštini s navedenom namjenom. Uz navedeno, vrlo su značajni i skriptni jezici koji prvenstveno služe za administraciju operativnih sustava. U Unix okruženju vrlo su popularni glede održavanja poslužitelja i njegovih web stranica, kao BASH (ujedno korisnikova pristupna školjka sustavu), AWK, PERL, Python, JavaScript, PHP i drugi.

Cjelokupni rad računala zasniva se u osnovi na slijedećem: procesor prima podatke od ulaznog uređaja, obradi ih i izvrši i rezultat pošalje na izlazni uređaj kako bi ih prikazao korisniku. Svaki procesor raspolaže sa skupom instrukcija koje su kodirane BROJEM. Izvršavanje programa je u suštini kopiranje brojeva u radnu memoriju i njihovo očitavanje i izvršavanje od strane procesora. Niz brojeva međusobno poslaganih u jednu svrsishodnu cjelinu čini PROGRAM, a postupak izrade te cjeline pomoću jednog od jezičkih procesora naziva se PROGRAMIRANJE. Slijed instrukcija jezičkog procesora, napisan u jednom od editor-a, koje će se potom procesoru prevesti da ih može izvršiti, mora biti logičan i usklađen s MODELOM odvijanja zadaće koji se naziva ALGORITAM. Postupak kuhanja jela nije ništa drugo do poštivanje algoritma nazvanog recept.

Dakle, algoritam predstavlja logički niz radnji koje treba izvršiti da se od početnih postavki dođe do željenog rezultata, a izrađuje se povezivanjem logičkih struktura koje se prikazuju grafičkim oblicima, najčešće prema ANSI standardu:

 Simboli dijagrama tijeka
Slika 3.4.6 Grafički oblici logičkih struktura za izradu dijagrama tijeka.

Niz međusobno povezanih logičkih struktura predstavljenih grafičkim simbolima tvori DIJAGRAM TIJEKA, grafički prikazane putove (tijek) po kojima se program može izvršavati, a koji ustvari opisuju uzročno-posljedične veze u programu. DIJAGRAM TIJEKA ili BLOK DIJAGRAM i predstavlja grafičko rješenje programske zadaće. Na osnovu dijagrama tijeka piše se niz instrukcija jezičkog procesora. Prva logička struktura je najprostija, označava početak i kraj algoritma (programa).

Druga logička struktura koristi se za operacije koje imaju jedan ulaz i jedan izlaz kao funkcije, na primjer za Y=f(X)=2•X ulaz je neka veličina X a funkcija na izlazu daje izračunatu vrijednost za taj X. Za ulaz X=2 izlaz će biti Y=4. Takve strukture nanizane jedna iza druge tvore slijed (SEKVENCU) i predstavljaju osnovnu strukturu algoritma.

Uvjetno grananje (SELEKCIJA) je izbor između dva moguća puta odvijanja programa, na primjer za prethodnu funkciju f(X)=2•X i uvjet f(X)>3 program će s X=1 nadalje odvijati prema izlazu 'DA' a za X=2 prema izlazu 'NE' (struktura IF-THEN-ELSE; ako-onda-odnosno). Moguće je izmijeniti izlaze na slici što u suštini ne mijenja odluku već samo smjer na slici.

Višestruko ponavljanje (ITERACIJA) može biti izračun funkcije nakon zadovoljenog uvjeta (struktura DO-WHILE; ispitaj pa radi) ili odluka nakon izračuna funkcije (struktura DO-UNTIL; radi pa ispitaj). Ako je na primjer ulaz X=0, funkcija f(X)=X+1 i uvjet f(X)>3, lijeva prikazana struktura po ispitivanju prosljeđuje X=0 na izlaz, a desna struktura će povećavati X za jedan sve dok X ne poprimi vrijednost X=4 koja se prosljeđuje na izlaz, dakle broji do 4. Ako je ulaz X=7 desna struktura povećati će ga na 8 i proslijediti na izlaz, a lijeva će neprestano povećavati vrijednost X za jedan dok ne dođe do prepunjenja registra mikroprocesora (OVERFLOW). Dakle, u zadavanju uvjeta treba biti obazriv i trebaju biti usklađeni s vrijednošću na ulazu i s tipom petlje ponavljanja. Lijeva petlja ispravno će raditi za f(x)<3 i proslijediti će X=3 na izlaz.

Tehnike programiranja raznolike su. Među najraširenije spadaju:

MODULARNO PROGRAMIRANJE - temelji se na raspodjeli programskih funkcija na manje NEOVISNE module između kojih se potrebna komunikacija ostvaruje prijenosom operanda. Modularna struktura omogućava timski rad jer se isti modul može koristiti u raznim drugim dijelovima programa ili u drugim programima. Na primjer modul za brisanje podataka u nekoj bazi podataka obrisati će podatke temeljem unesenih vrijednosti operanda kao rednih brojeva podataka koji se imaju obrisati. S drugim vrijednostima operanda modul će poslužiti za brisanje u nekoj drugoj bazi podataka iste strukture ali po nekom drugom kriteriju, recimo brisanje po nazivu a ne po rednom broju.

STRUKTURIRANO PROGRAMIRANJE - predstavlja način pisanja programa u kojemu se poštuje strogi SLIJED odvijanja programa ili njegovih modula. Nema skokova u odvijanju programa prema početku ili kraju već se svaki smjer odvijanja programa određuje izborom DA-NE. Moduli su međusobno povezani hijerarhijski, svaki od modula ima JEDNOG svog nadređenog (prethodnika) na kojeg je upućen i tako prema vrhu (početku). Svaki modul pripada jednoj od razina strukture i može imati samo jednu ulaznu točku. Time se omogućava da se tijek programa može besprijekorno pratiti od početka do kraja što olakšava čitljivost i otklanjanje grešaka.

INTERAKTIVNO PROGRAMIRANJE - je tehnika kada se za izradu programa koriste već gotove logičke strukture, izrađene na primjer od strane isporučitelja programskog alata, te ih programer dorađuje prema svojim potrebama i može rezultate rada odmah i testirati. Produktivnije je ali manje sistematično.

OBJEKTNO USMJERENO PROGRAMIRANJE - nastalo je kao odgovor na nemogućnost definiranja globalnih zajedničkih podataka u strukturiranom programiranju. Naime, pojedini moduli programa koriste zajedničke podatke i umjesto da se podaci prosljeđuju kroz razine strukture do modula koji ih treba, omogućava se modulu da ih izravno dohvati bez obzira na razinu u kojoj se nalazi. Podaci i operacije nad tim podacima spajaju se u cjeline nazvane OBJEKT. Svi objekti iste vrste svrstavaju se u KLASU a svaki od njih ima zasebno stanje unutar klase. U klasi se definiraju zajedničke postavke za sve njene objekte koje oni mogu i ne moraju koristiti i veze prema drugim klasama. Povezanost klasa tvori hijerarhijsku strukturu programa.

Svaki od jezičkih procesora koristi sebi svojstven skup komandi koje se slijedno 'slažu' prema propisanoj sintaksi za njegovu uporabu glede prikazanih logičkih struktura. Različitost u broju primijenjenih komandi i načinu njihove uporabe vrlo je velika, te u jednom općem pregledu kakav je ovaj nije ih moguće jednostavno objasniti. Zahvaljujući Internetu i tražilici kao 'Google' može se za jedan opći primjer, kao što je ispis teksta na zaslonu monitora 'Hello, world!', naći na koji način se upotrebljava svaki od navedenih. Definitivno, svaki od navedenih jezičkih procesora značajno se razlikuju u primjeni ako se razmatraju jedan u odnosu na drugog. Osobitosti nekih od jezičkih procesora opisane su na narednoj stranici.

 Natrag
 Tražila
 Dalje

 Početak
 KAZALO  Informatička abeceda
 
Citiranje ove stranice:
Radić, Drago. " Informatička abeceda " Split-Hrvatska.
{Datum pristupa}. <https://informatika.buzdo.com/>.
Copyright © by Drago Radić. Sva prava pridržana. | Odgovornost