575

10
5/22/2018 575-slidepdf.com http://slidepdf.com/reader/full/57555cf9684550346d0338bfeba 1/10 8.  PROGRAMSKI JEZICI i JEZIČKI PROCESORI 8. 8.1. O SISTEMSKOM SOFTVERU Svaki intelektualni postupak koji možemo algoritamski izraziti pomoću konačnog broja elementarnih operacija može se pretočiti u program i predati računaru da ga izvede. Time je postignuto dalje oslobađanje čoveka i prenošenje rutinskog intelektualnog rada na računar. Za realizaciju ovog vrlo važnog vida oslobađanja čoveka od zamornog rutinskog posla, potrebno je mnogo složenih postupaka. Jedan od ključnih i, slobodno se može reći, najsloženijih delova računarskog sistema, koji omogućava  prenošenje jednog dela intelektualnog rada na računarski sistem, jeste sistemski softver, a osnovni deo sistemskog softvera čini operativni sistem. Svi programi, koji se u računarskom sistemu koriste, mogu se podeliti na dve osnovne vrste: - sistemske programe, - korisničke, problemske  ili  aplikativne programe . Sistemski programi imaju isključivo zadatak kontrole i upravljanja računarskim sistemom, a problemski programi imaju funkciju rešavanja korisnikovih problema. Sistemski programi namenjeni su svakom potencijalnom korisniku računarskog sistema za koji su izraženi, dok su problemski programi, koji su izraženi od strane pojedinog korisnika i namenjeni da reše njegov specifičan  problem (aplikaciju) i ne mogu se primeniti za rešavanje drugog problema, i za drugog korisnika često nemaju nikakav značaj. Sistemski programi najčešće ne rešavaju konkretan problem, i ne daju korisniku direktno upotrebljive rezultate. Operativni sistem je na određeni način posrednik između korisnika, odnosno njegovog programa, i hardvera računarskog sistema. Korisnički programi su namenjeni rešavanju nekog konkretnog problema u primeni računarskog sistema (aplikacija). Problemski programi daju konkretne rezultate koje korisnik može direktno da koristi. Sistemske programe (slika 8.1) možemo, takođe, podeliti na dve grupe: - kontrolno-upravljački programi, tj. operativni sistem, - uslužni programi ( utility software ).  korisnik aplikativni programi sistemski programi  korisnički program   jezički procesori  prevodioci

description

.

Transcript of 575

  • 5/22/2018 575

    1/10

    8.

    PROGRAMSKI JEZICI

    i JEZIKI PROCESORI

    8.

    8.1.O SISTEMSKOM SOFTVERU

    Svaki intelektualni postupak koji moemo algoritamski izraziti pomou konanog broja elementarnih operacija moe se pretoitiu program i predati raunaru da ga izvede. Time je postignuto dalje oslobaanje oveka i prenoenje rutinskog intelektualnograda na raunar. Za realizaciju ovog vrlo vanog vida oslobaanja oveka od zamornog rutinskog posla, potrebno je mnogosloenih postupaka. Jedan od kljunih i, slobodno se moe rei, najsloenijih delova raunarskog sistema, koji omoguava

    prenoenje jednog dela intelektualnog rada na raunarski sistem, jeste sistemski softver, a osnovni deo sistemskog softvera inioperativni sistem. Svi programi, koji se u raunarskom sistemu koriste, mogu se podeliti na dve osnovne vrste:

    - sistemske programe,

    - korisnike, problemskeiliaplikativne programe .

    Sistemski programi imaju iskljuivo zadatak kontrole i upravljanja raunarskim sistemom, a problemski programi imaju funkcijureavanja korisnikovih problema. Sistemski programi namenjeni su svakom potencijalnom korisniku raunarskog sistema za kojisu izraeni, dok su problemski programi, koji su izraeni od strane pojedinog korisnika i namenjeni da ree njegov specifian

    problem (aplikaciju) i ne mogu se primeniti za reavanje drugog problema, i za drugog korisnika esto nemaju nikakav znaaj.Sistemski programi najee ne reavaju konkretan problem, i ne daju korisniku direktno upotrebljive rezultate. Operativnisistem je na odreeni nain posrednik izmeu korisnika, odnosno njegovog programa, i hardvera raunarskog sistema.

    Korisniki programi su namenjeni reavanju nekog konkretnog problema u primeni raunarskog sistema (aplikacija).Problemski programi daju konkretne rezultate koje korisnik moe direktno da koristi.

    Sistemske programe (slika 8.1) moemo, takoe, podeliti na dve grupe:

    - kontrolno-upravljaki programi, tj. operativni sistem,- usluni programi (utility software).

    korisnik

    aplikativni programi sistemski programi

    korisniki program jeziki procesori

    prevodioci

  • 5/22/2018 575

    2/10

    interpretatori u

    generatori s

    emulatori itd. l

    u

    korisniki program servisni programi

    za tampanje n

    za sortiranje i

    za testiranje

    za unos teksta itd.

    p

    pomoni programi r

    i potprogrami o

    matematiki g

    statistiki r

    za crtanje itd. a

    m

    i

    sistemi za upravljanje

    bazama podataka

    operativni sistem

    upravljanje upravljanje upravljanje upravljanje

    procesorom memorijom podacima ulazom-izlazom

    d i g i t a l n a l o g i k a k o l a

    H A R D W A R E

    Slika 8.1. Podela i sastav sistemskih programa

    Operativni sistem ima ulogu upravljanja i kontrole rada samog raunarskog sistema. On je, u stvari, posrednik izmeu digitalnihlogikih kola i svih ostalih vrsta programa. Operativni sistem je osnova, a ostali programi su nadgradnja. Operativni sistemizvrava upravljanje i kontrolu svih operacija u raunarskom sistemu preko svoje etiri osnovne funkcije. To su funkcije

    2

  • 5/22/2018 575

    3/10

    upravljanja memorijom, upravljanja procesorom, upravljanja podacima i upravljanja ulazom-izlazom, tj. jedinicama za ulaz-izlaz.

    Uslune programe moemo podeliti, kao to se vidi na slici 8.1., u etiri vrste, i to na:

    - jezike procesore,

    - servisne programe,

    - pomone programe i potprograme,

    - sisteme za upravljanje bazama podataka.

    U jezike procesore svrstavamo sve vrste programskih prevodilaca, koji slue za prevoenje programa napisanog na jednomprogramskom jeziku, u funkcionalno ekvivalentan program, najee u mainskom jeziku. U ovu grupu programa spadaju i razniprogramski generatori koji na osnovu zadatih parametara generiu program, a takoe i interpreteri, koji za razliku odprevodilaca interpretiraju i izvode instrukciju po instrukciju programa.

    U servisne programe spadaju, najee, programi za obradu teksta (editor), programi za sortiranje i meanje datoteka,programi za rukovanje datotekama (kreiranje, kopiranje, auriranje), programi za testiranje (tester) i drugi.

    8.2. PROGRAMSKI JEZICI

    Jezik je sredstvo za komunikaciju. Jezik mora biti tako definisan da je razumljiv za sve uesnike u komunikaciji. Postoje prirodnijezici kojima se slue ljudi, i vetaki, izmiljeni za specijalne namene. Vetaki jezici koji se koriste za pisanje programa i rad na

    raunaru zovu se programski jezici.Hardver raunara koristi memorisane instrukcije da bi obradio podatke. Raunarske instrukcije se obino organizuju u

    programe. Skup binarnih instrukcija koje raunar moe izvriti direktno naziva se program u mainskom jeziku. Ljudi, s drugestrane, radije piu programe u nekom drugom jeziku, a da bi se oni mogli izvriti moraju se prevesti u mainski jezik.

    Postoji vie razliitih programskih jezika. Programi se pre izvravanja prevode u pogodnu formu, vrlo blisku mainskom jeziku.Vie programskih celina (modula) u mainskom jeziku, moe se povezati tako da ine jednu jedinstvenu celinu.

    Danas postoji nekoliko stotina programskih jezika. Ako kao kriterijum uzmemo stepen zavisnosti od hardvera raunara, jezikedelimo na dve osnovne grupe:

    - mainski zavisne i

    - mainski nezavisne.

    8.2.1. MAINSKI ZAVISNI JEZICI

    Mainski zavisni jezici se dele na:

    - mainske jezike i

    - mainski orijentisane jezike.

    8.2.1.1 Mainski jezici

    Program je logiki samokontrolisani skup raunarskih instrukcija. Programeri mogu pisati ove instrukcije u mnogo razliitihjezika, ali hardver razume samo jedan oblik - mainski jezik.

    Program napisan na mainskom jeziku sastoji se od nizova binarnih brojeva, koji se mogu direktno interpretirati uz pomodekodera instrukcija. Da bi programirao direktno na mainskom jeziku, programer mora da zna (ili da pogleda) binarne kodoveza svaku instrukciju koja je na repertoaru tog raunara.

    Neka je pomou procesora MC6800 potrebno sabrati sadraje dve memorijske lokacije ije su adrese 1Ai 1B,i neka se rezultatsmeta na lokaciju sa adresom 1C. Program za sabiranje napisan na mainskom jeziku smeten je u memoriju poev od lokacije10016i ima sledei oblik:

    lokacija sadraj0100: 10010110 prenesi u akumulator Abroj sa memorijske lokacije

    0101: 00011010 1A 0102: 10011011 saberi sadraj akumulatora Ai memorijske lokacije 0103: 00011011 1B 0104: 10010111 prenesi sadraj akumulatora Au lokaciju

    3

  • 5/22/2018 575

    4/10

    0105: 00011100 1C

    U ovom primeru, u prenosu podataka i sabiranju, korieno je direktno adresiranje i akumulator A. Nizovi nula i jedinica bisasvim drugaije izgledali u sluaju korienja nekog drugog naina adresiranja.

    Ako bi u prenosu podataka i sabiranju koristili akumulator B, onda bi isti program u mainskom jeziku imao sledei oblik:

    lokacija sadraj 0100: 11010110 prenesi u akumulator B broj sa memorijske lokacije 0101: 00011010 1A 0102: 11011011 saberi sadraj akumulatora B i memorijske lokacije

    0103: 00011011 1B 0104: 11010111 prenesi sadraj akumulatora B u lokaciju 0105: 00011100 1C

    Programer (koji pie na mainskom jeziku) mora biti upoznat i sa arhitekturom raunara, i mora znati koji registri se koriste utim instrukcijama. Programer mora, takoe, proraditi sve raspoloive naine adresiranja, i znati kako da kae raunaru dakoristi odreeni nain adresiranja.

    Programiranje u mainskom jeziku zahteva od programera da odredi tane memorijske lokacije, koje su potrebne zaostvarivanje svih instrukcija grananja, i lokacije svih podataka. Zahteva se i neposredno poznavanje kodova stanja, i kodova

    prekida.

    Sve ovo ini programiranje u mainskom jeziku vrlo dugotrajnim, napornim i podlonim grekama. Kako svaka vrsta CPU ima

    svoj sopstveni set instrukcija, programi u mainskom jeziku, razvijeni za jedan raunar, u optem sluaju su neupotrebljivi zadrugi raunar. Zbog ovoga su razvijeni drugi pristupi programiranju. Neki jezici su sasvim malo pomereni u odnosu na mainski(mainski orijentisani jezici), dok drugi nisu ni nalik na binarne instrukcije koje neposredno kontroliu rad raunara (vii

    programski jezici).

    8.2.1.2 Mainski orijentisani jezici

    Mainski orijentisani jezici su vrlo bliski mainskom jeziku, i direktno se oslanjaju na njega, a samim tim i na hardver raunara.Oni se mogu svrstati u dva nivoa:

    - asemblerski jezici ili simboliki mainski jezici i

    - makroasembleri.

    8.2.1.2.1ASEMBLERSKI JEZICI

    Asemblerski jezici (assembly languages) reavaju neke od problema koji su vezani za programiranje u mainskom jeziku. Ovijezici doputaju programeru da umesto binarnih kodova operacija koristi simbolike kodove instrukcija (mnemonics).Korienjem mnemonikih instrukcijskih kodova, programer na IBM PC moe da prenese podatak iz memorije u registarCPU-a, pomou MOV instrukcije umesto upotrebom operacije A116.

    Termin mnemonik znai zvui kao, i koriste se zato to simboliki kodovi esto zvue kao instrukcije. DEC, na primer, zvui

    kao decrement. Iako Ane zvui previe kao add, to je svakako bolji izbor nego recimo Q, ili neki drugi simbol koji ni na kojinain ne asocira na sabiranje (add). Asemblerski jezici doputaju upotrebu simbolikih imena za registre, i dozvoljavaju

    programeru da pridruuju imena memorijskim lokacijama. Dakle, programer ne mora da zna tanu numeriku adresu lokacijepodatka u memoriji.

    Zbog korienja simbolikih imena za instrukcije, registre i memorijske lokacije, ovi jezici se jo nazivaju simboliki mainskijezici. Programeri koji programiraju u asembleru, jo moraju da znaju koji su naini adresiranja na raspolaganju, i kako se zadajeeljeni nain adresiranja. Za svaki asemblerski jezik to je razliito.

    Kako bi izgledao program na simbolikom mainskom jeziku za sabiranje dva broja iz prethodnog primera, uz korienjeakumulatora A, i ako bi lokacijama dali simbolika imena num1 (1A), num2 (1B) i sum (1C):

    LDA A num1

    ADD A num2 STA A sum

    U sluaju korienja akumulatoraBprogram bi bio:

    LDA B num1ADD B num2

    STA B sum

    4

  • 5/22/2018 575

    5/10

    Kako su asemblerski jezici vrlo slini mainskim jezicima, oni se najee smatraju jezicima niskog nivoa (lonj - levellanguages). Jedna linija asemblerskog koda postaje jedna mainska instrukcija Programer mora znati mnemonike za svakuinstrukciju iz repertoara raunara, i razumeti kako da ukae na razliite naine adresiranja. Zahteva se, takoe, i poznavanjezastavica stanja, kako se one postavljaju i briu, i ta one oznaavaju. Asemblerski jezici su, kao i mainski jezici, specifini zasvaki CPU. Asemblerski program napisan za VAX 11/780 ne moe se koristiti za procesore Intel 80386, MC 68020, IBMsystem /370 itd.

    8.2.1.2.2MAKROASEMBLERSKI JEZICI

    Upotreba viih jezika za programiranje delotvorno iskoriava radno vreme programera, ali se u memoriji troi mnogo prostoraza upisivanje programa, kao i vreme procesora za izvoenje takvih programa. Suprotno tome, programiranjem u asemblerskim

    programskim jezicima delotvornije se iskoriava memorija i vreme procesora, ali se zahteva mnogo radnog vremenaprogramera. Kada bi se zajedno primenile asemblerske naredbe i naredbe vieg progamskog jezika, dobile bi se sve prednostiasemblerskih i viih jezika, a uklonili njihovi nedostaci.

    Takvu mogunost prua upotreba tzv. makroasemblera. Makroasembler omoguava programeru da pomou asemblerskihnaredbi sam definie makroinstrukcije za svoju upotrebu (a koje se sastoje od niza asemblerskih naredbi), a takoe moe dadefinie i nove naredbe viih programskih jezika. Razlika je u tome to su u viim programskim jezicima naredbe standardne iunapred definisane za razliite mogue upotrebe. Naprotiv, makroinstrukcije razvija sam korisnik za svoju upotrebu, pa se

    izvravaju isto tako efikasno kao i asemblerski programi. Svakoj makroinstrukciji programer dodeljuje svoju simboliku oznaku.Drugim reima, programer sam definie svoje makroinstrukcije koje su efikasne kao i asemblerske instrukcije, a omoguavajulaku i bru izradu vrlo itljivih programa, kao i jezici vieg nivoa.

    8.2.2. MA[INSKI NEZAVISNI JEZICI

    Programski jezici koje zovemo jezici visokog nivoa (high - level languages), smanjuju potrebu programera da razumeunutranje detalje arhitekture raunara. Svaka reenica u programu na viem programskom jeziku mora se prevesti uinstrukcije na mainskom nivou, pre nego se pone sa izvravanjem. Dok se svaka instrukcija, na nivou asemblera, prevodi u

    jednu mainsku instrukciju, dotle se reenica na jeziku vieg nivoa normalno prevodi u mnogo mainskih instrukcija. Postoje

    specijalni programi koji se zovu kompajleri (compilers) i interpreteri (interpreters ), koji vre prevoenje. Ovo prevoenje seobavlja u prisustvu odreenog programskog okruenja koje odreuje operativni sistem raunara.

    Prevoenje obino nije konana faza obrade, tj. dobijeni mainski ekvivalent se ne moe odmah izvravati. Potrebne su joneke obrade nad dobijenim rezultatom prevoenja; naime, potrebno je jo izvriti povezivanje sa nekim drugim programima, ana kraju treba izvriti punjenje, tj. smetanje programa u memoriju.

    Jezici visokog nivoa takoe se mogu razvrstati na sledee hijerarhijske nivoe:

    - nivo proceduralnih jezika ,- nivo problemski orijentisanih jezika (STRESS, COGO, SIMULA),- nivo neproceduralnih jezika (QBE, SQL, FOCUS, CUPID),- nivo deklarativnih jezika (DYANA, PROLOG).

    Mi emo u daljem tekstu razmatrati samo proceduralno orijentisane programske jezike.

    8.2.2.1 Proceduralno orijentisani jezici

    Proceduralno orijentisani jezici (procedure oriented languages) iskazuju eksplicitno sekvencijalnu prirodu reavanjaproblema pomou raunara, a da pri tome ne zahtevaju od programera poznavanje organizacije raunara i njegovog mainskogjezika. Ovi jezici doputaju programeru da specificira procedure, ili algoritme, koje treba koristiti za reavanje problema.

    Mnogi proceduralno orijentisani jezici su razvijeni da podre specifine potrebe: FORmula TRANslation language (FORTRAN) za naunike i inenjere, Beginers All-purpose Symbolic Instruction Code (BASIC) za poetnike u

    programiranju, COmonon Busines Oriented Language (COBOL) za poslovne potrebe, LISt Processing (LISP) zaobradu lista, SNOBOL za obradu stringova itd. Jezici poput Ada i PL/1 su projektovani optije. Ne gledajui za koju primenusu razvijeni, proceduralno orijentisani jezici esto imaju sline funkcije. Pojedinane reenice koje implementiraju pojedinefunkcije u svakom jeziku su drugaije, ali se u svima nalaze sline kategorije primena. To su funkcije za manipulisanje

    podacima, ulazno-izlazne operacije, kontrolne strukture, deklaracije, potprogrami itd.

    U razvoju proceduralnih jezika dva su momenta od presudnog znaaja:

    5

  • 5/22/2018 575

    6/10

    - formalni opis jezika ALGOL-60 (ALGOrithmic Language) pomou BNFnotacije kojom se uvode novi

    koncepti u programske jezike, koji su imali veliki uticaj na programske jezike koji su se kasnije pojavili,

    - pojava PASCAL-a koji je razvijen na bazi ALGOL-a, a znaajan je naroito zbog uvoenja novih struktura

    podataka i strukturiranog programiranja.

    Jezici vieg nivoa doputaju programeru da memorijske lokacije oznaava simbolikim imenima. Ta imena se esto zovupromenjiveilivarijable (variables), jer predstavljaju memorijske lokacije iji se sadraji mogu menjati.

    Nepromenljive vrednosti se zovu konstante, i u optem sluaju to su brojevi (10, 150.25, itd) ili karakteri (b, ovo je

    konstanta, itd.). Neki jezici doputaju da se i konstantama pridrue imena; tako se broju 3.14159 moe pridruiti ime PI. Broj ivrsta znaka, i nain njihovog kombinovanja za pravljenje imena varijabli i konstanti zavise od vrste jezika.

    Program napisan na proceduralno orijentisanom jeziku za jedan raunar, uz neke manje izmene ili bez izmena, moe se preneti ina bilo koji drugi raunar koji podrava taj jezik. Tanije, koji ima odgovarajui prevodilac sa tog jezika na mainski jezik.

    8.2.3. SINTAKSA JEZIKA

    Pravila koja definiu kako se grade elementarne (rei) i sloene konstrukcije (reenice) jezika ine gramatiku jezika. Sintaksajezika izuava da li su jezike konstrukcije gramatiki korektne i daje mogunost formalnog otkrivanja greaka. Sintaksa neulazi u znaenje tih konstrukcija. Znaenje konstrukcija izuava semantika jezika.

    Sintaksa jezika je esto vrlo sloena, a vrlo je vano da programer shvati kako se konstruiu pravilne reenice. Ima nekolikopristupa koji programeru pruaju ove informacije.

    Jedan od naina prikazivanja sintakse programskog jezika je upotreba dijagrama rei, odnosno notacija sa zagradama. Svakiprogramski jezik ima odreeni skup rei iji je smisao i nain upotrebe unapred definisan, a koje se nazivaju rezervisane rei ilislubene rei.

    Posmatrajmo pravila koja se koriste za interpretiranje COBOL programa, ije reenice obino imaju sledei oblik:

    Identifikator1DEVIDE{ }INTOidentifikator2[ROUNDED][ON SIZE ERRORreenica] Literal1

    Velika slova ukazuju na rezervisane rei, a mala slova su korisnike rei. Velike zagrade ukazuju na mogunost izbora, jedan

    od vie. U ovom sluaju programer moe da bira izmeu identifikatora1 i literala1 (u COBOL-u se varijable zovu identifikatori).Podvuene rezervisane rei su obavezne, dok se one nepodvuene mogu, a ne moraju koristiti (opcije). Iskazi koji se nalaze usrednjim zagradama takoe su opcionalni, ali ako ih upotrebimo onda se oni moraju pisati po drugim pravilima. Na primer, ONSIZE ERROR izraz nije obavezan, ali ako se koristi onda on mora biti napisan kao SIZE ERROR zapovedna-reenica ili kaoON SIZE ERROR reenica (zapovedna).

    Drugi nain prikazivanja pravila za pisanje korektnih reenica jeste BNF notacija (Backus-Nauer Form). Ovo je vrlorasprostranjen metod za definisanje sintakse. Bekus je ovu notaciju prvi put upotrebio za opis notacije programskog jezikaALGOL-60.

    Ovaj pristup koristi izvedene (deljive), i konane (nedeljive) simbole. Nedeljivi simboli su osnovne, konane jedinice jezika iukljuuju u svoj sastav uobiajene simbole kao to su 0, 1, 2, A, B, +, =, itd. Deljivi elementi, niske, sastavljeni su od nedeljivih

    i drugih deljivih simbola. Svi izvedeni, deljivi elementi odreeni su imenom unutar ugaonih zagrada, npr. koja jedefinisana na sledei nain:

    < cifra > :: = 0|1|2|3|4|5|6|7|8|9

    gde ::= ima znaenje je definisano kao, a | ima znaenje ILI. Prethodna reenica definie izvedeni simbol < cifra > kao 0ili 1 ili 2 ili 3 ili 4 ili 5 ili 6 ili 7 ili 8 ili 9.

    Prosti izvedeni simboli se nazivaju podniske, i mogu se koristiti za definisanje sloenijih konstrukcija jezika (niske), kao na primeru ALGOL-u:

    < ceo broj bez znaka> ::= < cifra> | < ceo broj bez znaka> < cifra>|.

    Ova reenica kae da je < ceo broj bez znaka > bilo koja < cifra>, ili bilo koji < ceo broj bez znaka > iza kojeg sledi < cifra

    >. Ovo je rekurzivna definicija, jer se sam pojam, koji se definie, nalazi kao alternativa unutar definicije.Prethodna definicija oznaava da ceo broj znaka moe biti 0, 1, 2, 3, 4, 5, 6, 7, 8 ili 9, ali takoe i 11, 12, itd, jer je on sastavljenod celog broja bez znaka (samo jedna cifra) iza koga sledi neka druga cifra. Po istom pravilu su i brojevi 123, 5432 i 654321takoe celi brojevi bez znaka.

    ALGOL ide dalje u definisanju izvedenih simbola:

    6

  • 5/22/2018 575

    7/10

    < ceo broj > ::= < ceo broj bez znaka > | + < ceo broj bez znaka > | - < ceo broj bez znaka>

    < decimalni deo > ::= .< ceo broj bez znaka >

    < decimalni broj > ::= < ceo broj bez znaka > | < decimalni deo > | < ceo broj bez znaka> < decimalnideo >

    Saglasno ovoj sintaksi, celi brojevi su oblika 543, -543 ili +543.

    Decimalni deo sadri u sebi kombinacije poput .05 ili .001, ali ne ukljuuje -.005 ili +.25, jer se ispred . ne moe nalaziti ni jedansimbol.

    Decimalni brojevi su oblika 123, .05 ili 12.5, ali ne i 5. jer iza decimalne take, po definiciji decimalnog broja, mora slediti barjedna cifra.

    Trei je grafiki nain definisanja sintakse koji koristi kruie, pravougaonike i usmerene linije i zove se sintaksni dijagram.Kruii lie na mehurie, pa se ovaj metod zove i bubble diagram. Krugovi oznaavaju zavrne, nedeljive simbole,

    pravougaonici niske i podniske, tj. izvedene, deljive simbole, a usmerene linije ukazuju na potreban poredak nizanja delova. Naslici 8.2 data je jedna ovakva struktura za Pascal - programe. Ona pokazuje da Pascal program poinje reju PROGRAM(kljuna re i to je konani simbol), iza koje slede: jedan identifikator, parametri programa, taka-zarez, deo za deklarisanje, telo,taka itd. Svaka izvedena konstrukcija mora biti definisana negde u sintaksi.

    Program -> identifikator -> parametri programa - > ; -> deklaracije -> telo -> . ->

    Slika 8.2. Dijagram glavnih struktura Pascal programa

    Na slici 8.3 opisan je deo Pascal-programa za deklarisanje i pokazuje nam velike mogunosti koje ovakvi dijagrami imaju.Moemo pratiti usmerenu liniju pravo na dole i bilo gde skrenuti udesno, ili stii do dna, kada deo za deklarisanje ne postoji.Raznim elementima dela programa za deklarisanje pristupa se praenjem strelice udesno,

    Slika 8.3. Sintaksa deklaracionog dela Pascalprograma

    Na primer, dijagram kae da se promenljive deklariu korienjem konanog simbola VARiza kojeg sledi stvarna definicija inakon toga znak ; (taka-zarez). Usmerena linija moe sadrati i petlju, to doputa definisanje veeg broja promenljivih. Ovajdijagram jasno pokazuje i redosled deklarisanja i definisanja: najpre labele, onda podaci (konstante, tipovi i tek onda varijable), ana kraju dela programa za deklarisanje, definiu se procedure i funkcije.

    8.3. JEZIKI PROCESORI

    Jeziki procesori su sistemski programi projektovani da pojednostave proces programiranja. Prevodioci su jeziki procesori kojiprihvataju programe pisane na nekom od programskih jezika (asembleru ili nekom viem jeziku), i generiu funkcionalnoekvivalentne programe na nekom drugom jeziku (najee na mainskom). Na slici 8.4 prikazan je postupak prevoenja nekog

    7

  • 5/22/2018 575

    8/10

    asemblerskog programa do mainskog programa koji se moe izvriti u raunaru.

    Asemblerski, bejzik (BASIC), ili neki drugi program, koji ulazi u jeziki procesor zove se izvorni kod (source code). Prevodilacita taj kod i generie binarnu verziju programa. Neki jeziki procesori kreiraju binarni kod koji je odmah spreman zaizvravanje. To su takozvani apsolutni ili nerelokativni programi.

    izvornikod

    prevodilac

    objektnikod

    poveziva

    modul za punjenje punilac

    program umemoriji spreman

    za izvoenje

    Slika 8.4. Proces prevoenja, povezivanja i punjenja

    Drugi pak generiu specijalni tip koda na mainskom nivou koji se zove predmetni ili objektni kod (object code), ili mainskisimboliki kod. Objektni kod se ne moe izvriti, ve se mora dalje modifikovati pre izvoenja. Tu dodatnu obradu obavljajusistemski programi koji se zovu povezivai (linkers ) i punioci (loaders).

    Zavisno od nivoa ulaznog jezika prevodioci se dele na:

    - asemblere, koji prevode programe sa simbolikog-mainskog jezika na mainski jezik,

    - makroasemblere, koji prevode programe sa makroasemblera na main-ski jezik,

    - kompilatore ili kompajlere, koji prevode programe sa proceduralno-orijentisanih programskih jezika na mainski

    jezik,

    - generatore, koji prevode programe sa problemski-orijentisanih programskih jezika na mainski jezik,

    - interpretere ili interpretatore.

    8.3.1. ASEMBLERI

    Asembler je jeziki procesor (prevodilac), iji je ulazni jezik simboliko mainski jezik (assembly language code), a izlaznijezik je blizak mainskom jeziku ili mainski jezik.

    U procesu prevoenja simboliko-mainskih programa najsloeniji posao je izraunavanje izraza jer je u asembleru doputenokorienje instrukcijskih mnemonika i simbolikih adresa podataka, to znatno olakava pisanje programa. Asembler ne moeda izrauna simboliki izraz dok vrednosti svih simbola u njemu nisu definisane. Pravila pisanja procedura usimboliko-mainskom jeziku ne zahtevaju da definicija simbola prethodi njihovom korienju. Ove injenice ukazuju namogunost da asembler ne moe izraunati neke izraze dok ne obradi sve naredbe u asemblerskoj proceduri. Praktina

    posledica se svodi na to, da asembler mora dvaput da obradi asemblersku proceduru, pre nego to obavi potpuno prevoenje, tj.

    mora da bude organizovan u dva prolaza.U prvom prolazu se ita izvorni program, definiu se vrednosti svih simbola koji se u njemu pojavljuju, i formira se interna formaasemblerskog programa, kako bi se izbeglo ponavljanje nekih aktivnosti u obradi programa. Drugi prolaz ita internu formu

    programa, asemblira mainske naredbe, izraunava izraze ija vrednost odreuje sadraj adresnog polja naredbi, gradipredmetni program, i daje izvetaj o prevoenju.

    Pogledajmo kako se program na PC-XT (sa procesorom Intel 8088) za sabiranje tri broja sa simbolikim imenima num1,num2, num3 a rezultat smeta na lokaciju sum (slika 8.5.), konvertuje u mainski jezik (slika 8.6.). Tokom prvog prolaskasvaka linija je proitana i izvreno je leksiko pretraivanje, (lexical scan), koje identifikuje instrukcijske i registarskemnemonike, specijalne simbole i simbolike adrese. Kada je komponenta jednom identifikovana, asembler moe da odredi da lita linija sadri instrukciju koja se mora konvertovati u mainski kod, ili pseudoinstrukciju, koja predstavlja direktivu samom

    asembleru.

    Asembler pretpostavlja da program poinje od unapred odreene lokacije (npr. 0000 16 ili 0100 16), i tu adresu dri u brojau

    lokacija (location counter), da bi oznaio deo memorije koji koriste instrukcije i podaci. Kada se svaka linija proita i ispita,ovaj broja pokazuje veliinu prostora koji e instrukcije koristiti, ali stvaran mainski kod nee biti kreiran pre drugog prolaska.

    Tokom prvog prolaska, asembler takoe kreira i popunjava tabele koje sadre sve simbolike adrese (koje se nalaze u

    8

  • 5/22/2018 575

    9/10

    programu) i njihove lokacije. Neki asembleri smetaju u tabele i neke druge informacije.1 mov ax, num1

    2 add ax, num2

    3 add ax, num3

    4 mov sum, ax

    5 hlt

    6 num1 dnj 2057 num2 dnj 961

    8 num3 dnj 347

    9 sum dnj ?

    10 end

    symbol type location

    num1 nj ? (a)

    symbol type location

    num1 nj ?

    num2 nj ? (b)

    symbol type location

    num1 nj ?

    num2 nj ? (c)

    num3 nj ?

    sum nj ?

    symbol type location

    num1 nj 010F

    num2 nj ? (d)

    num3 nj ?

    sum nj ?

    symbol type location

    num1 nj 010F

    num2 nj 0111 (e)num3 nj 0113

    sum nj 0115

    Slika 8.5. Asemblerska verzija programa

    9

  • 5/22/2018 575

    10/10

    Slika 8.6. Razvoj tabele simbola tokom procesa asembliranja

    Prvi prolaz kroz program na slici 8.5 vri sledee obrade:

    1. Postavi broja lokacija na poetnu vrednost, na primer: 0100.

    2. ita prvu liniju i vri leksiko pretraivanje, i identifikuje tri jedinstvena simbola: mov, ax, i num 1.

    3. Pokuava da identifikuje svaki od njih, koristei tabele operacionih kodova. Ovaj proces identifikuje mov kao mnemonikinstrukcije, a axkao mnemonik registra.

    4. Kako simbol num1nije naen u tabeli instrukcijskih i registarskih mnemonika, proverava se da li je on ve u tabeli simbola, ipoto nije dodaje se u tu tabelu. Markira se num 1kao adresa rei, jer je ax16-bitni registar, slika 8.6 (a).

    5. Instrukcija zahteva tri bajta (informacija se dobija iz tabele operacionih kodova); dakle broja lokacije se poveava na0103 .

    6. ita se i pretrauje sledea linija, identifikuju se simboli add, axi num 2.

    7. Koristei tabelu operacionih kodova identifikuje add kao instrukciju i axkao registar.

    8. Kako num2nije mnemonik ni instrukcije ni registra, proverava se tabela simbola, num2nije u tabeli, pa se dodaje u tabelu imarkira kao adresa rei, slika 8.6 (b).

    9. Poveava se sadraj brojaa lokacija za 4(naredba addima 4 bajta).

    10. Ponavljaju se koraci 6-9 za linije 3, 4, 5 u programu, i broja lokacije se svaki put poveava saglasno duini instrukcija. Utabelu simbola se upisuju simboli i njeno stanje nakon ovih koraka dato je na slici 8.6 (c).

    11 ita se i pretrauje linija 6, utvruje da je to polje labela ( label field), koje ukazuje na lokaciju simbolike adrese.

    12. Ispituje tabelu simbola i u polje num 1 upisuje sadraj koji ukazuje na lokaciju koja odgovara tekuoj vrednosti brojaalokacija, 010F, slika 8.6 (d).

    13. Polje dw je pseudoinstrukcija koja kazuje asembleru da rezervie memorijsku re na tekuoj lokaciji. Operand 205 jepodatak koji e biti smeten na tekuoj lokaciji. Broja lokacija se poveava za 2 jer jedna re ima 2 bajta.

    14. Ponavljaju se koraci 11-13 za linije 7, 8 i 9. Simbol ? u liniji 9, ukazuje da nema podatka koji e biti smeten u prostor

    rezervisan dw pseudoinstrukcijom. Slika 8.6 (e) pokazuje sadraj tabele simbola posle viestrukog ponavljanja ova 3koraka.

    15. Instrukcija end u liniji 10 je jo jedna pseudo-instrukcija koja ukazuje na kraj izvornog programa.

    Pseudoinstrukcija end takoe signalizira kraj prvog prolaska kroz izvorni kod. U ovoj taki asembler obavlja razne provere, apre svega proverava da li sve simblike adrese imaju dodeljene lokacije, i prelazi na drugi prolaz. Forma dobijena nakon prvogprolaza naziva se interniprogram.

    U drugom prolazu se ponovo ispituju sve linije ali ne izvornog ve internog programa, a asembler zamenjuje simbolike adreseodgovarajuim vrednostima iz tabele simbola, generie mainske kodove instrukcija i ulaznih podataka, i te binarne kodoveupisuje u objektnu datoteku (object file), tj. predmetni program.

    Rezultat prevoenja je predmetni program i izvetaj o prevoenju (izvrni izvetaj). Proces asembliranja se esto zavravagenerisanjem izvornog izvetaja kao na slici 8.7., koji sadri program na mainskom jeziku dobijen na bazi asemblerskihinstrukcija i tabelu simbola. Tabela simbola sadri svaki simbol, njegovu programsku lokaciju, memorijsku lokaciju i tip.

    10