1. Osnove  |  2. Elementi DRS  |  3. DRS  |  4. Windows  |  5. Unix  |  6. Programiranje  |  7. Informatika u praksi  |  8. Rječnik  |  9. Prilozi  |  10. Literatura  |  11. Spone  |  12. Indeks

3.4.2. Jezički procesori  NATRAG  DALJE  POČETAK


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 prevodioc. 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 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 izvršiti ponovo prevođenje u izvršni kod. Kako ne postoji idealni prevodioc 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 prevodioc jedne računalne platforme primijeniti na drugoj, ali se izvorni kod može prevesti na bilo kojoj platformi ako za nju postoji istorodni prevodioc. 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 temeljnije 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 bajt-a memorijskog prostora izvršnog
       koda. Isti program napravljen u BASIC-u napravljen je
       za jedan sat i zauzima 250 bajt-a memorijskog prostora
       izvornog koda ali ne može raditi bez prevoditelja
       (194 KB) i sporiji je preko deset puta.

Navedeni nedostatak interpretera riješava se kompajlerima za interpretere, ali ne tako efikasno kako to rade kompajleri predhodno 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 podijela jezičkih procesora temeljem predhodno 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 namijenu 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 namijenom.

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
Slika 3.4.6 Grafički oblici logičkih struktura za izradu algoritma.

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 izad 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 predhodnu 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 izmjeniti 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 struktura po ispitivanju proslijeđuje X=0 na izlaz, a desna struktura će povećavati X za jedan sve dok X ne poprimi vrijednost X=4 koja se proslijeđ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 ispravni će raditi za f(x)<3 i proslijediti će X=3 na izlaz.

Algoritam zadaće složen od logičkih struktura prikazanih grafičkim oblicima naziva se DIJAGRAM TIJEKA ili BLOK DIJAGRAM i predstavlja grafičko rješenje programske zadaće. Na osnovu dijagrama toka piše se niz instrukcija jezičkog procesora.

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.

STRUKTUIRANO 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 (predhodnika) 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 bezprijekorno 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 struktuiranom programiranju. Naime, pojedini moduli programa koriste zajedničke podatke i umjesto da se podaci proslijeđ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.

 NATRAG
 Tražila
 DALJE

 Početak
 KAZALO  Informatička abeceda