YOU ARE DOWNLOADING DOCUMENT

Please tick the box to continue:

Transcript
Page 1: Azbuka,Rec,Jezik,Jezicki Procesor

3

Azbuka, rec, jezik, jezickiprocesori

Jezik je sredstvo za komunikaciju izmedu dva ili vise korisnika i mora da bude prih-vatljiv za sve korisnike. Ako su svi korisnici jezika – ljudi, onda je jezik komunikacijeobicno prirodni jezik (srpski, engleski, francuski, itd.). Prirodni jezici su ekspre-sivni (univerzalni), i njima se moze izraziti svaka informacija, ali su nejednoznacnii neprecizni u predstavljanju specificnih informacija kao sto su matematicke. Zatose izgraduju vestacki jezici u specificnim oblastima, npr. jezik matematickih for-mula u matematici, jezik hemijskih formula u hemiji, jezik saobracajnih znakova usaobracaju, itd.

Posebna klasa vestackih jezika, u slucaju da je jedan od korisnika jezika –racunar, jesu programski jezici. Osnovni motiv za uvodenje programskih jezikaje potreba da se premosti razlika u nivou apstrakcije coveka i racunara. Dok covekima potrebu i mogucnost da razmislja na razlicitim, ponekad visokim nivoima ap-strakcije, racunar je ogranicen mogucnostima koje su definisane u trenutku njegoveizgradnje i izgradnje njegovog operativnog sistema. Programski jezici omogucujucoveku da formulise poruku na nacin koji je za njega relativno prirodan i jednos-tavan. S druge strane, precizna definicija dopustenih oblika i njihovog znacenjaomogucuje izgradnju jezickih procesora (prevodilaca i interpretera) – programapomocu kojih se covekova poruka prevodi na jezik ”razumljiv” masini – masinskijezik.

Postoje razne definicije programskog jezika. Jedna od njih je definicijaAmerickog instituta za standarde (ANSI) koja glasi: ”Programski jezik je jezikkoji se koristi za pripremanje racunarskih programa”. Ova definicija, pored togasto je veoma opsta, ne odrazava tekucu upotrebu jezika, tj. ne pravi razliku izmeduraznih programskih jezika. Ta razlika u filozofiji, strukturi i upotrebi raznih pro-gramskih jezika najbolje se sagledava kroz klasifikaciju programskih jezika o kojojce biti reci u odeljku ”Klasifikacija programskih jezika”.

Programski jezici kao nacin komunikacije izmedu coveka i racunara primenjuju

1

Page 2: Azbuka,Rec,Jezik,Jezicki Procesor

2 3. Azbuka, rec, jezik, jezicki procesori

se od druge polovine pedesetih godina 20. veka, kada je definisana prva verzijaprogramskog jezika FORTRAN (FORmula TRANslation) i napravljen prevodilacza njega (Backus, 1957). Od tada pa do danas razvijeno je vise stotina programskihjezika.

3.1 Jezik. Sintaksa i semantika

Svaki jezik pa i programski jezik definise se sintaksom i semantikom jezika.Sintaksa je nauka o jeziku koja izucava korektne – dopustene konstrukcije jezika.Semantika je nauka o jeziku koja izucava znacenje dopustenih konstrukcija

jezika.

3.1.1 Azbuka, niska

Svaki jezik za komunikaciju coveka i racunara koristi konacni skup simbola(znakova) – azbuku. Simbol (znak, slovo) je nedeljiva jedinica jezika. Nizan-jem slova azbuke dobiju se niske nad azbukom. Duzina niske je broj slova u nisci.Ako je w – niska, njena duzina obicno se obelezava sa |w|. Niska koja ne sadrzinijedno slovo zove se prazna niska i obelezava se sa e (engl. empty – prazan). Akoje a – slovo azbuke, sa ai oznacava se niska aa . . . a koja sadrzi i slova a. Tako a0

oznacava praznu nisku, a1 = a, a2 = aa, itd.Formalno, niska nad azbukom A definise se na sledeci nacin:1. e je niska nad A;2. ako je w niska nad A i a – slovo iz A, onda je wa niska nad A;3. sve niske nad azbukom A mogu se dobiti primenom pravila 1. i 2.Osnovna operacija nad niskama je dopisivanje (konkatenacija) i ona se definise

na sledeci nacin:Ako su w, u – niske, |w|=x, |u|=y, onda je rezultat dopisivanja (konkatenacije)

niske u na nisku w niska wu duzine |wu|=x + y, i kojoj je i-to slovo jednako i-tomslovu niske w za i ≤ x, tj. jednako i− x-tom slovu niske u za x < i ≤ x + y.

Ako je A – azbuka sa n slova, A = {a1, a2, . . . an}, onda oznaka A∗ oznacavabeskonacni skup svih mogucih niski nad azbukom A (A∗ = {e, a1, a2, . . . , an, a1a1,a1a2, . . . , a1an, a2a1, a2a2, . . . , a1a1a1, . . . }.

Oznaka A+ oznacava skup svih mogucih niski nad azbukom A duzine ≥ 1(A+ = A∗ \ e).

3.1.2 Karakterski skup

Za tekstualnu komunikaciju coveka sa racunarom (npr. preko tastature i ekrana ter-minala), tj. za saopstavanje programa i podataka racunaru i dobijanje izlaznih in-formacija iz racunara, potrebno je, pre svega, imati precizno definisanu ”spoljasnju”azbuku tj. konacni skup nedeljivih slova (znakova, simbola) – npr. {A,B, . . . Z,1,2,

Page 3: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 3

. . . , 9, ?}. U racunaru se razliciti simboli spoljasnje azbuke kodiraju razlicitim kom-binacijama nula i jedinica fiksne duzine, tzv. kodom fiksne duzine nad binarnomazbukom.

Svaki racunar ima svoj skup karaktera za komunikaciju sa korisnikom, i taj skupnije standardizovan. Karakteri imaju svoj spoljasnji oblik koji vidimo na ekranu(npr. A, a, +, }, [, 0, itd.) i svoju unutrasnju reprezentaciju u binarnom obliku,koja odgovara nekoj standardnoj kodnoj semi (graficka reprezentacija karaktera nastampacu moze biti treca, npr. karakter { sa tastature moze se prikazati kao slovoZ na stampacu).

Objasnimo ukratko principe, strukturu i svojstva kodnih sema (pronaci na In-ternetu izvore informacija o karakterima i raznim nacinima za njihovo kodiranje).

Danas su u upotrebi kodne reci duzine 7 odnosno 8 bitova (ukupno 128 odnosno256 kodnih reci) i 16 bitova (ukupno 65536 kodnih reci). Kodne reci u jednom kodufiksne duzine nazivaju se karakteri. Ako se za registrovanje jednog znaka spoljasnjeazbuke u racunaru koristi jedan bajt (kao sto je to slucaj sa 7-bitnim odnosno 8-bitnim kodnim recima), onda vazi i da sadrzaju jednog bajta, bez obzira da li onpredstavlja deo binarnog zapisa graficke, zvucne ili tekstualne informacije, odgovarajedan znak spoljasnje azbuke (koji moze imati svoj graficki lik ili ne).

Najrasprostranjeniji je 7-bitni kod koji je 1983. godine standardizovanmedunarodnim (ISO – International Standard Organization) standardom. Najpoz-natija je njegova nacionalna americka verzija koju je definisao ANSI – AmericanNational Standards Institute 1968. godine u dokumentu American Standard Codefor Information Interchange po kome se ovaj kod i zove ASCII-kod.

U ASCII kodu se, na primer, znak ”A” zapisuje kao 1000001, znak ”B” kao1000010, znak ”0” kao 0110000, znak ”9” kao 0111001, itd. Kako se vrednost ovihbinarnih brojeva moze sracunati u dekadnom sistemu (npr. 10000012 = 1 × 26 +0× 25 +0× 24 +0× 23 +0× 22 +0× 21 +1× 20 = 6410 +110 = 6510, to se i ASCIIkodovi obicno zapisuju (za komunikaciju medu ljudima) u dekadnom sistemu, paje kod za znak ”A” – 65, za znak ”B” – 66, za znak ”0” – 48, za znak ”9” – 57, itd.

Navedimo neke principe na kojima je struktuiran ASCII kod, i njegove osobine.Prva 32 karaktera (kodovi 0–31) i poslednji karakter (kod 127) su kontrolni

karakteri. To su karakteri bez grafickog lika, kao CR (kod 13), LF (kod 10).Skup simbola spoljasnje azbuke je ureden prema uredenju njihovih karaktera

- unutrasnjih kodova u odgovarajucoj kodnoj semi. U ASCII kodu, skup velikihslova A–Z (kodovi 65–90), kao i skup malih slova a–z (kodovi 97–122), kodiranje u abecednom poretku (65<66 prema tome ’A’ <’B’). Skup cifara 0-9 (kodovi48–57) je u rastucem brojcanom poretku (49 < 50, prema tome ’1’<’2’). Skupvelikih slova, skup malih slova i skup cifara su uzastopni, tj. izmedu slova A islova Z nema drugih karaktera osim onih koji odgovaraju velikim slovima engleskeabecede, slicno vazi za mala slova, odnosno za dekadne cifre. Sve cifre prethodesvim velikim slovima, sva velika slova prethode svim malim slovima. Specijalni iinterpunkcijski znaci su izmesani izmedu njih. Kod svakog velikog slova je za 32(odnosno 25) manji od koda odgovarajuceg malog slova. Na primer, za kod slovaE (69) i e (101) vazi da je 69+32=101, odnosno, 01000101+00100000=01100101.

Page 4: Azbuka,Rec,Jezik,Jezicki Procesor

4 3. Azbuka, rec, jezik, jezicki procesori

Medunarodni – ISO standard 7-bitnog koda cija je ASCII nacionalna americkaverzija, ostavlja prostor i za druge nacionalne verzije, u kojima postoje ne-engleskaslova. Tako ovaj standard propisuje da se pozicijama (kodovima, karakterima)64, 91–94, 96 i 123–126 ne pridruzuje obavezan graficki lik, vec da se one u na-cionalnim verzijama standarda i u odredenim aplikacijama mogu slobodno koristiti.Jugoslovenski standard (tzv. YU-ASCII, koji je definisao Jugoslovenski zavod zastandarde 1986. godine) koristi ovih 10 pozicija za kodiranje slova specificnih zasrpsku latinicu na sledeci nacin:

velikoSlovo kod maloSlovo kodZ(@) 64 z(‘) 96S([ ) 91 s({) 123Dj(\) 92 d(|) 124C(]) 93 c(}) 125C(ˆ ) 94 c(˜ ) 126

YU-ASCII skup zadrzava sve navedene osobine ASCII koda osim jedne, a ta jeda ni velika ni mala slova nisu u abecednom poretku. Na primer, 64 < 65, dakle’Z’ < ’A’ sto ne odgovara abecednom poretku.

Prosirenja 7-bitnog koda Serija ISO 8859 (ISO 8859-1 (Latin-1), ISO 8859-2(Latin-2), itd.) Slova specificna za srpsku latinicu u Latin-2 nalaze se na sledecimpozicijama:

velikoSlovo kod maloSlovo kodZ 174 z 190S 175 s 191Dj 208 d 240C 198 c 230C 200 c 232

(Naci na Internetu ISO 8859 karakterske skupove i prouciti tekstove objasnjenja).

Industrijski standardi (pronaci na Internetu)

• EBCDIC (Extended Binary Coded Decimal Interchange Code)

• Windows kodne strane

CP1252 (WinLatin1),

CP1250 (WinLatin2),

CP1251 (WinCyrillic), . . . .

Unicode (pronaci na Internetu)

Page 5: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 5

3.1.3 Jezik

Jezik L nad azbukom A je neki podskup skupa A∗ svih niski nad azbukom. Kakoskup A∗ ima beskonacno mnogo podskupova, to nad azbukom A ima i beskonacnomnogo jezika. U zadavanju jezika L potrebno je upravo tacno definisati taj podskupskupa A∗ koji predstavlja niske nad azbukom A koje pripadaju jeziku L – reci jezikaL. Definisanje reci jezika (i njihovo razlikovanje od niski nad istom azbukom kojene pripadaju jeziku) obicno se vrsi primenom nekih pravila. Skup pravila kojimase opisuju sve reci jezika, zove se sintaksa jezika.

Semantika jezika je skup pravila kojima se definise znacenje reci jezika.Za prirodni jezik (na primer srpski) postoje sintaksna pravila za izgradnju is-

pravnih konstrukcija (recenica), ali ta pravila ne pokrivaju sve ispravne konstrukcijejezika. To nije ni cudno jer je prirodni jezik dinamican, on zivi i menja se u vremenui prostoru. Za vestacki jezik, i posebno programski jezik, potrebno je da se veomaprecizno opise njegova sintaksa, tj. sve i samo one konstrukcije koje pripadajujeziku (npr. konstanta, identifikator, izraz, iskaz, funkcija, program, itd.), da bi seomogucila izgradnja sredstava koja ce automatski, bez pomoci coveka, ustanovitida li je neka konstrukcija ispravna konstrukcija programskog jezika. Ta sredstva suprogrami – jezicki procesori.

Mada obezbeduje izgradnju i prepoznavanje ispravne konstrukcije jezika, sin-taksa ne govori nista o smislu te konstrukcije. Tako sintaksno ispravna recenicau prirodnom jeziku moze biti potpuno besmislena (ili visesmislena), ali se svakojsintaksno ispravnoj konstrukcija programskog jezika moze (jednoznacno) pridruzitinjeno znacenje.

Postoje dva nacina da se definisu sintaksno ispravne konstrukcije vestackogjezika. Ako je jezik konacan (i mali), moguce je formirati spisak svih niski (reci)jezika. Jedan primer takvog jezika je jezik saobracajnih znakova. Drugi takavprimer je jezik nad azbukom A = {a, b} predstavljen sledecim skupom reci: {a, b,aa, bb, ab, ba, aaa, bbb}.

Ako je jezik veliki, i posebno ako je beskonacan, potrebno je zadati konacniskup pravila kojima se grade sve sintaksno ispravne konstrukcije jezika, tj. sve recijezika.

U matematici postoji oblast koja izucava tzv. formalne jezike, koji se, premaodredenim pravilima, izgraduju nad datom azbukom. Programski jezici su samojedan podskup skupa formalnih jezika. U opstem slucaju formalnih jezika, nacinza izgradnju ispravnih konstrukcija – reci jezika zadaje se formalizmom koji sezove formalna gramatika. Ovaj formalizam, pored azbuke samog jezika (skupazavrsnih simbola), koristi jos jedan skup simbola, disjunktan sa azbukom jezika,tzv. pomocnih simbola pomocu kojih se izgraduju ispravne reci jezika. Tu je,naravno, i skup pravila, koja opisuju kako se ispravne konstrukcije jezika grade.

3.1.4 Formalna gramatika

Ilustrujmo formalizam formalnih gramatika prvo jednim primerom.

Page 6: Azbuka,Rec,Jezik,Jezicki Procesor

6 3. Azbuka, rec, jezik, jezicki procesori

Primer 1.Posmatrajmo azbuku koja se sastoji od cifara dekadnog brojnog sistema i

znakova aritmetickih operacija +,−, tj. A = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,+,−}, i pos-matrajmo cele brojeve nad ovom azbukom. Tako, na primer, niske +1205, 1205 i−1205 jesu celi brojevi, a niske 12+05, 1205+, 12−05, 1205− to nisu. Jezik celihdekadnih brojeva (sa dopustenim nevazecim nulama) moze se izgraditi nad ovomazbukom primenom sledecih pravila:

1. broj je neoznacen ceo broj, + neoznacen ceo broj, ili − neoznacen ceo broj;

2. neoznacen ceo broj je cifra, ili neoznacen ceo broj na koji je dopisana cifra;

3. cifra je svaki simbol iz skupa {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}.

U izgradnji reci ovog jezika (celih dekadnih brojeva) ucestvuju pojmovi ”broj”,”neoznacen ceo broj”, ”cifra” ( ili, mozemo ih oznaciti simbolima B, b, c), koji cinepomocni skup simbola. Reci se izgraduju primenom navedenih pravila, a u izgradnjireci polazi se upravo od pomocnog simbola ”broj” tj. B, jer je to osnovni objekatjezika koji gradimo. Umesto recenicama prirodnog jezika pravila zapisujemo krace– i preciznije, na sledeci nacin:

1’. B −→ b|+ b| − b;

2’. b −→ c|bc;3’. c −→ 0|1|2|3|4|5|6|7|8|9;

Polazeci od pocetnog simbola – ceo dekadni broj (B), i primenjujuci praviladobicemo ispravne reci iz jezika, tj. korektne cele dekadne brojeve. Na primer,broj 1234 moze se izvesti iz pocetnog simbola B primenom nekih od navedenihpravila na sledece niske:

B ⇒ b ⇒ bc ⇒ bcc ⇒ bccc ⇒ cccc ⇒ 1ccc ⇒ 12cc ⇒ 123c ⇒ 1234.Proces izvodenja je zavrsen jer smo dobili rec – broj koji se sastoji samo od

slova azbuke nad kojom se jezik gradi. Ovo nije jedino izvodenje broja 1234, jer sei drugacijim redosledom zamene simbola c odgovarajucom cifrom moze dobiti istibroj (npr. . . . cccc ⇒ ccc4 ⇒ cc34 ⇒ c234 ⇒ 1234).

Takode, polazeci od pocetnog simbola i primenjujuci pravila ne moze se dobitinijedna niska koja ne pripada jeziku – npr. ne moze se dobiti niska 12+23.

Primenom navedenih pravila moze se dobiti svaki ceo dekadni broj. Ako jebroj n-tocifren, dovoljno je jedanput primeniti pravilo B −→ b(−b,+b), n − 1puta primeniti pravilo b −→ bc, jedanput pravilo b −→ c, i n puta pravilo oblikac −→(odgovarajuca cifra).

Formalna gramatika je uredena cetvorka (N,T, P, S), gde je:N – konacni skup pomocnih (nezavrsnih, neterminalnih) simbola koji se koriste

u izvodenju niski jezika (ali ne ucestvuju u samim niskama jezika);

Page 7: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 7

T – konacni skup zavrsnih (terminalnih) simbola – azbuka, tj. skup slova nadkojim se definise jezik; uslov za skup T je da je N ∩ T = ∅.

P – konacni skup pravila izvodenja niski nad N ∪ T iz drugih niski nad N ∪ T ,tj. konacni podskup skupa (N∪T )∗N(N∪T )∗×(N∪T )∗; element (a, b) iz skupa Pzove se gramaticko pravilo i zapisuje se u obliku a → b. Niska a mora da sadrzi barjedan element iz skupa pomocnih simbola (N), dok niska b moze biti proizvoljnaniska nad unijom skupova zavrsnih i pomocnih simbola.

S – pocetni simbol, S ∈ N .

Sada se za prethodni primer formalna gramatika moze definisati sledecimskupovima:

N = {c, b, B};T = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +,−};P = {c → 0, c → 1, c → 2, c → 3, c → 4, c → 5, c → 6, c → 7, c → 8,

c → 9, b → c, b → bc,B → b,B → +bB → −b};S = B.Za datu gramatiku G(N, T, P, S), gramaticka forma se definise na sledeci nacin:1. pocetni simbol S je gramaticka forma;2. ako je xyz gramaticka forma i y −→ u gramaticko pravilo, onda je xuz takode

gramaticka forma (to su sve niske koje se mogu dobiti iz S primenom pravila iz P ).Zavrsna niska ili niska generisana gramatikom je gramaticka forma koja ne

sadrzi pomocne simbole.Jezik generisan gramatikom je skup zavrsnih niski izvedenih iz pocetnog simbola

S.

3.1.5 Meta jezici

Programski jezici cine jedan pravi podskup skupa formalnih jezika. Njihova sintaksase zbog toga moze opisati sredstvima koja su pogodnija (od formalnih gramatika)za predstavljanje i jednostavnija za razumevanje. Ta sredstva su tzv. meta jezici.To su jezici kojima se opisuje jezik koji se izucava. Sam jezik koji se izucava, npr.programski jezik, zove se objekt jezik.

Kada je rec o prirodnom jeziku, onda se njegova sintaksa i semantika opisujutakode prirodnim jezikom, tj. i objekt jezik i meta jezik u slucju prirodnog jezikaje – taj prirodni jezik. Na primer, u gramatikama srpskog jezika opisuju se, opetrecenicama srpskog jezika, pravila koja vaze za konstrukciju pravilne recenice, zapromenu pojedinih vrsta reci, itd. U recniku srpskog jezika moze se naci znacenjepojedinacnih reci i fraza srpskog jezika.

Sa vestackim jezikom, i posebno programskim jezikom, stvar stoji bitnodrugacije. Na primer, za jezik saobracajnih znakova ”sintaksa” (izgled) kon-strukcija (saobracajnih znakova), s obzirom da ih je konacno mnogo, opisuje seeksplicitnim pobrojavanjem slika koje te znakove predstavljaju, dok se njihova ”se-mantika” (znacenje) opisuje prirodnim jezikom. Programski jezik je beskonacanjer se u njemu moze napisati beskonacno mnogo programa. Sintaksu programskogjezika moguce je takode opisati prirodnim jezikom, ali bi taj opis bio glomazan i

Page 8: Azbuka,Rec,Jezik,Jezicki Procesor

8 3. Azbuka, rec, jezik, jezicki procesori

najcesce neprecizan, kao sto pokazuje sledeci primer. Moze se reci: program naprogramskom jeziku C sastoji se od preprocesorskih kontrolnih linija (npr. #in-clude, #define) deklaracija globalnih promenljivih i definicija funkcija. Sledio biopis pravila po kojima se gradi definicija funkcije, preprocesorska kontrolna linija,lista parametara, parametar, blok, iskaz, izraz, identifikator, itd. do najjednos-tavnijih konstrukcija jezika. Zato se za opisivanje sintakse programskog jezika neupotrebljava prirodni jezik vec neki namenski graden, pregledniji i jednostavnijijezik.

Za formalno opisivanje sintakse programskog jezika koriste se najcesce dva metajezika: Bekusova notacija (tj. Bekus-Naurova forma) i sintaksni dijagrami.

Formalno opisivanje semantike je dosta kompleksno, pa se po pravilu u praksi se-mantika opisuje vezivanjem za sintaksu, ili intuitivno, koriscenjem prirodnog jezika.

3.1.6 Bekusova notacija

Bekusova notacija je jedan meta jezik za formalno opisivanje sintakse programskihjezika.

U Bekusovoj notaciji sintaksa programskog jezika opisuje se pomocu konacnogskupa metalingvistickih formula (MLF).

Metalingvisticka formula se sastoji iz leve i desne strane razdvojene specijalnim,tzv. ”univerzalnim” metasimbolom (simbolom metajezika koji se koristi u svimMLF) ”::=” koji se cita ”po definiciji je”, tj. MLF je oblika

A ::= a,gde je A – metalingvisticka promenljiva, a a – metalingvisticki izraz.

Metalingvisticka promenljiva je fraza prirodnog jezika u uglastim zagradama(<,>), i ona predstavlja pojam, tzv. sintaksnu kategoriju objekt-jezika. Onaodgovara pomocnom simbolu formalne gramatike. Na primer, u programskomjeziku, sintaksne kategorije su <program>, <ceo broj>, <cifra>, <znak broja>,<ime promenljive>, itd. U prirodnom jeziku, sintaskne kategorije su < rec>,<recenica>, <interpunkcijski znak>, itd. Metalingvisticka promenljiva ne pripadaobjekt jeziku.

”Sitnije” sintaksne kategorije nazivaju se leksickim kategorijama ili recima(imaju znacenje ali ne stoje samostalno; npr. identifikator, konstanta u program-skom jeziku). ”Krupnije” sintaksne kategorije nazivaju se recenicama (osim stoimaju odredeno znacenje, egzistiraju samostalno; npr. iskaz u programskom jeziku).

Metalingvisticki izraz se gradi od metalingvistickih promenljivih i metal-ingvistickih konstanti, uz koriscenje drugih specijalnih, tj. univerzalnih metal-ingvistickih simbola.

Metalingvisticke konstante su simboli objekt jezika. To su, na primer,0, 1, 2,+,−, ali i rezervisane reci programskog jezika, npr. IF, THEN, BEGIN,FUNCTION, itd.

Metalingvisticki izraz moze se sastojati od jedne metalingvisticke promenljiveili jedne metalingvisticke konstante, a moze se izgraditi i na jedan od sledeca dvanacina:

Page 9: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 9

1. na vec formirani metalingvisticki izraz dopise se ML promenljiva ili ML kon-stanta i tako se dobije novi ML izraz;

2. konacni niz prethodno formiranih ML izraza razdvojenih specijalnim tj. uni-verzalnim metasimbolom ”|” (cita se ”ili”) predstavlja novi ML izraz.

Metalingvisticka formula A ::= a ima znacenje: ML promenljiva A po definicijije ML izraz a.

Svaka metalingvisticka promenljiva koja se pojavljuje u metalingvistickomizrazu a mora se definisati posebnom MLF.

Primer 2.Jezik celih brojeva u dekadnom brojnom sistemu moze se opisati sledecim

skupom MLF:<ceo broj >::=<neoznacen ceo broj > | <znak broja> <neoznacen ceo broj><neoznacen ceo broj>::=<cifra> | <neoznacen ceo broj><cifra><cifra>::= 0|1|2|3|4|5|6|7|8|9<znak broja>::= +|−Navedene MLF mogu se procitati na sledeci nacin:Ceo broj je po definiciji neoznacen ceo broj ili znak broja za kojim sledi

neoznacen ceo broj.Neoznacen ceo broj je po definiciji cifra ili neoznacen ceo broj za kojim sledi

cifra.Cifra je po definiciji 0 ili 1 ili 2 ili 3 ili 4 ili 5 ili 6 ili 7 ili 8 ili 9.Znak broja je po definiciji + ili −.

Upotreba univerzalnog metasimbola ”|” samo skracuje zapis MLF a ne povecavaizrazajnu moc notacije. Tako, na primer, prva MLF ima znacenje ekvivalentnoznacenju sledece dve MLF:

<ceo broj> ::= <neoznacen ceo broj><ceo broj> ::= <znak broja><neoznacen ceo broj>

Radi kraceg zapisa i pojednostavljenja MLF uvode se razne modifikacijeBekusove notacije. One se postizu uvodenjem novih metasimbola (simbola metajezika). Jedna takva modifikacija ukljucuje male, srednje i velike (viticaste) za-grade, sa sledecim znacenjem:

– navodenje konstrukcije izmedu otvorene i zatvorene viticaste zagrade {. . . }definise ponavljanje navedene konstrukcije 0 ili vise puta; na primer,

<neoznacen ceo broj>::=<cifra>{<cifra>}(neoznacen ceo broj sastoji se od jedne cifre za kojom moze da sledi proizvoljni nizcifara);

– navodenje konstrukcije izmedu otvorene i zatvorene srednje zagrade [. . . ]definise opciono pojavljivanje konstrukcije (njeno pojavljivanje 0 ili 1 put); naprimer,

<ceo broj>::= [<znak broja>]<neoznacen ceo broj>

Page 10: Azbuka,Rec,Jezik,Jezicki Procesor

10 3. Azbuka, rec, jezik, jezicki procesori

(ceo broj je neoznacen ceo broj ispred koga se moze (ali i ne mora) navesti znakbroja);

– navodenje konstrukcija izmedu otvorene i zatvorene male zagrade (. . . )definise grupisanje konstrukcija; na primer,

<ceo broj> ::= [(+|−)] <cifra>{<cifra>}(ceo broj je cifra za kojom sledi proizvoljni niz cifara, a kojoj moze (ali i ne mora)da prethodi znak + ili −).

Ako simboli zagrada (malih, srednjih, velikih) mogu da pripadaju i objektjeziku, njihovo koriscenje kao metasimbola se oznacava njihovim podvlacenjem.

3.1.7 Sintaksni dijagrami

Sintaksni dijagrami su drugi metajezik za opisivanje sintakse programskih jezika.Sintaksni dijagrami su pregledniji i citljiviji od Bekusove notacije, posebno zaslozenije MLF. Sintaksni dijagrami ukljucuju iste koncepte koji se srecu i kodBekusove notacije – ML promenljiva, ML konstanta, ML izraz, ML formula.

Sintaksnim dijagramom predstavlja se MLF. To je usmereni graf (v. Struk-ture podataka i algoritmi) sa pridruzenim imenom tj. imenovani usmereni graf.Ime sintaksnog dijagrama je ML promenljiva koja se definise ML formulom, doksam usmereni graf predstavlja ML izraz iz ML formule. Cvorovi sintaksnog dija-grama predstavljaju ML konstante i ML promenljive, dok grane sintaksnog dija-grama predstavljaju operaciju dopisivanja. ML konstanta predstavlja se cvoromu obliku kruga ili elipse, dok se ML promenljiva predstavlja cvorom u oblikukvadrata ili pravougaonika. Svaka ML promenljiva iz jednog sintaksnog dijagramadefinise se posebnim sintaksnim dijagramom. Pored cvorova – ML konstanti i MLpromenljivih, izdvajaju se dva istaknuta cvora – ulazni, od koga vodi putanja dosvakog drugog cvora u grafu, i izlazni, do koga vodi putanja od svakog drugogcvora u grafu. Svaki ”prolaz” kroz sintaksni dijagram, tj. svaka putanja u grafu odulaznog do izlaznog cvora definise jednu sintaksno ispravnu konstrukciju.

Crtanje ulaznog i izlaznog cvora se obicno izostavlja, tj. zamenjuje ulaznomlinijom (na kojoj se navodi ime sintaksnog dijagrama) odnosno izlaznom linijom.

Primer 3.Sintaksa celog broja moze se opisati skupom sintaksnih dijagrama na slici 3.1,

ili, sazeto, sintaksnim dijagramom na slici 3.2.

Primer 4.Sintaksa identifikatora se moze definisati sintaksnim dijagramom na slici 3.3.

Ocigledno postoji direktna veza izmedu Bekusove notacije i sintaksnih dija-grama. Ona se formalno ustanovljava na nacin prikazan na slici 3.4.

Page 11: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 11

- -

-

6

znak

neoznacen ceo brojceo broj

-- cifraneoznacen ceo broj

-

-

-

-

±°²¯0

±°²¯1

±°²¯9

...

cifra

-

--

±°²¯+

±°²¯−

znak

Figure 3.1: Sintaksni dijagram celog broja

3.1.8 Prepoznavaci

Formalnom gramatikom se moze definisati svaki vestacki jezik (pa i znacajni seg-menti prirodnog jezika), i to tako sto se obezbeduje mehanizam za generisanje(proizvodenje) svih reci (ispravnih konstrukcija) tog jezika. Da bi se, za odredenunisku nad datom azbukom, odgovorilo na pitanje da li ona pripada jeziku gener-isanom datom gramatikom, potrebno je izgraditi mehanizme za prepoznavanje niskijezika, tzv. prepoznavace. I prepoznavacem se moze definisati jezik. Prepoznavacce biti mehanizam koji ce niske iz jezika prepoznavati (npr. nisku 1234 u prethod-nom primeru), a za niske koje nisu iz jezika prijavljivati gresku (npr. za nisku1+234). Prepoznavac se realizuje programom i to prema zadatoj formalnoj gra-matici. Prepoznavac prepoznaje nisku kao rec iz jezika ako moze da izgradi jednonjeno izvodenje iz pocetnog simbola gramatike, tj. ako moze da utvrdi koja supravila i kojim redosledom primenjena u izvodenju te reci. Za efikasan rad prepoz-navaca vazno je da se samo jednim citanjem slova od kojih se niska sastoji, bezvracanja, ustanovi da li je niska rec iz jezika generisanog gramatikom ili ne.

Svaki jezik moze se definisati vecim (stavise beskonacnim) brojem razlicitih

Page 12: Azbuka,Rec,Jezik,Jezicki Procesor

12 3. Azbuka, rec, jezik, jezicki procesori

-

-- -

±°²¯+

±°²¯−

ceo brojcifra-

Figure 3.2: Sintaksni dijagram celog broja – sazeti oblik

-identifikatorslovo -

cifra

slovo

¾

¾

6?

Figure 3.3: Sintaksni dijagram identifikatora

formalnih gramatika. Za zadavanje jezika biraju se sto manje gramatike – sa stomanjim brojem nezavrsnih simbola i pravila, ali koje imaju svojstvo da se za njihgrade jednostavni programi koji obavljaju funkciju prepoznavaca, tj. programi kojiproveravaju sintaksnu ispravnost niske jednim prolazom kroz nisku, bez vracanja.Takve gramatike omogucuju da se, u svakom koraku procesa prepoznavanja zadateniske, samo na osnovu jednog procitanog slova te niske jednoznacno utvrdi pravilogramatike koje je primenjeno u odgovarajucem koraku procesa izvodenja niske ugramatici. Formalna gramatika iz primera 1. nema to dobro svojstvo, ali se mozedefinisati druga gramatika koja generise isti jezik, a koja to svojstvo ima. Takvaje, na primer, gramatika sa skupom pomocnih simbola N = {B, b, c, O} (pomocnisimbol O ima znacenje ”niska cifara duzine ≥ 0”, ostali pomocni simboli imajuznacenje kao i ranije), i sledecim skupom pravila:

(1(1)) B → b (neoznacen ceo broj jeste ceo broj);(1(2)) B → −b(1(3)) B → +b (ceo broj sa znakom jeste ceo broj);(2) b → cO (cifra za kojom sledi niska cifara duzine ≥ 0 jeste neoznacen ceo

broj);(3(1))–(3(2)) O → ε | cO (prazna niska ili cifra za kojom sledi niska cifara duzine

≥ 0 jeste niska cifara duzine ≥ 0);(4(1))–(4(10)) c → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 (simboli 0,1,2,3,4,5,6,7,8,9 jesu

cifre).

Rad prepoznavaca izgradenog za ovu gramatiku mogao bi se opisati nizomuredenih trojki koje odgovaraju koracima rada prepoznavaca. Prva komponentatakve trojke predstavlja neprocitani deo niske koja se analizira, druga komponenta

Page 13: Azbuka,Rec,Jezik,Jezicki Procesor

3.1. Jezik. Sintaksa i semantika 13

1. ML promenljiva a ←→ - a -

2. ML konstanta a ←→ - ma -

3. MLF A ::= a1|a2| . . . |am ←→(tj. ai u krugu ako je ai ML konstantaa ne ML promenljiva)

-

-

- am

a2

a1

...

A -

4. MLF A ::= a1a2 . . . am ←→(ista napomena kao u tacki 3.)

- a1 a2 am- - - -. . .A

5. MLF A ::= {a} ←→(ista napomena kao u tacki 3.)

-6

a

A

6. MLF A ::= [a] ←→(ista napomena kao u tacki 3.)

-

- a

6A

Figure 3.4: Veza izmedu Bekusove notacije i sintaksnih dijagrama

predstavlja deo gramaticke forme dobijene u tom koraku izvodenja, i to deo koji sedobije brisanjem vodeceg simbola ako se on poklapa sa tekucim simbolom niske kojase analizira; treca komponenta predstavlja niz rednih brojeva do tog trenutka pri-menjenih pravila. U trojci od koje se polazi, prva komponenta je cela rec koju trebaanalizirati, druga komponenta je pocetni simbol gramatike, a treca komponenta jeprazna. Niska je prepoznata kao sintaksno ispravna ako se posle konacnog brojakoraka procita cela, i ako je u tom trenutku dobijena gramaticka forma prazna.Tada u trecoj komponenti imamo redne brojeve pravila primenjenih u izvodenjudate niske u datoj gramatici.

(-1234, B, ∅)(-1234, −b, 1(2))(1234, cO, 1(2)2)(1234, 1O, 1(2)24(2))(234, cO, 1(2)24(2)3(2))(234, 2O, 1(2)24(2)3(2)4(3))(34, cO, 1(2)24(2)3(2)4(3)3(2))

Page 14: Azbuka,Rec,Jezik,Jezicki Procesor

14 3. Azbuka, rec, jezik, jezicki procesori

(34, 3O, 1(2)24(2)3(2)4(3)3(2)4(4))(4, cO, 1(2)24(2)3(2)4(3)3(2)4(4)3(2))(4, 4O, 1(2)24(2)3(2)4(3)3(2)4(4)3(2)4(5))(, ε, 1(2)24(2)3(2)4(3)3(2)4(4)3(2)4(5)3(1))

Ako na nekom koraku prepoznavanja ne mozemo, s obzirom na slovo u ulaznojniski koje je na redu za citanje, da odredimo pravilo koje se moze primeniti uprocesu izvodenja, to znaci da niska nije ispravna konstrukcija jezika. Na primer,

(1-234, B, ∅)(1-234, b, 1(1))(1-234, cO, 1(1)2)(1-234, 1O, 1(1)24(2))(-234, ε, 1(1)24(2)3(1))

nema vise pravila jer je gramaticka forma ostala prazna a ulazna niska jos nijeprocitana. Niska ne pripada jeziku.

Prilikom prepoznavanja sintaksne ispravnosti niske, niz rednih brojeva primen-jenih pravila u izvodenju te niske moze se smatrati za jedan njen prevod. Akose pravilima, pored rednog broja pravila, pridruzi i neki ”pravi” prevod, programkoji vrsi sintaksnu analizu (ispituje sintaksnu ispravnost) ujedno i prevodi ulaznunisku (ako je ona sintaksno ispravna). Prepoznavac tada postaje prevodilac, a pre-vod ulazne niske – njena semantika (znacenje). Na primer, karaktere azbuke izprethodnog primera mozemo prevoditi u njihov ASCII kod. Tada su pravila gra-matike prosirena delom za generisanje prevoda, i za nas primer mogu imati sledecioblik:

(1(1)) (B → b, B → b)(1(2)) (B → −b, B → 45b) (ASCII kod za – je 45)(1(3)) (B → +b, B → 43b) (ASCII kod za + je 43)(2) (b → cO, b → cO)(3(1))–(3(2) (O → ε | cO, O → ε | cO)(4(1))–(410) (c → 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9, c → 48 | 49 | 50 | 51 | 52 | 53

| 54 | 55 | 56 | 57)Sada se rad prevodioca moze opisati uredenim cetvorkama u kojima cetvrta

komponenta predstavlja prevod:(–1234, B, ∅, B)(–1234, −− b, 1(2), 45b )(1234, cO, 1(2)2, 45cO)(1234, 1O, 1(2)24(2), 4549O)(234, cO, 1(2)24(2)3(2), 4549cO)(234, 2O, 1(2)24(2)3(2)4(3), 454950O)(34, cO, 1(2)24(2)3(2)4(3)3(2), 454950cO)(34, 3O, 1(2)24(2)3(2)4(3)3(2)4(4), 45495051O)(4, cO, 1(2)24(2)3(2)4(3)3(2)4(4)3(2), 45495051cO)(4, 4O, 1(2)24(2)3(2)4(3)3(2)4(4)3(2)4(5), 4549505152O)(, ε, 1(2)24(2)3(2)4(3)3(2)4(4)3(2)4(5)3’, 4549505152).

Page 15: Azbuka,Rec,Jezik,Jezicki Procesor

3.2. Jezicki procesori 15

3.2 Jezicki procesori

Precizna formulacija sintakse (i semantike) programskih jezika omogucuje izraduprograma za obradu jezika – jezickih procesora. Ovi programi analiziraju sintaksnuispravnost programa na programskom jeziku i, ako je program ispravan, trans-formisu ga u binarni (masinski) oblik koji moze da se izvrsi na racunaru.

U zavisnosti od toga da li se ceo program proanalizira i transformise, pre negosto moze da se izvrsi, ili se analiza i izvrsenje programa obavljaju naizmenicno –deo po deo programa (npr. naredba po naredba), jezicki procesori se dele u dvevrste: prevodioce i interpretere.

Izvrsavanje programa P na jeziku L moze da se ostvari, primenom interpretera,na nacin prikazan slikom 3.5.

instrukcijeizbor sledece

(obrada)izvrsavanje

analiza instrukcije

izbor prve instrukcije

INTERPRETER

interpreteratabele

podaci Dprograma P

rezultat Rprograma P

radni podaciprograma P

na jeziku Lprogram P

?

?

?

?

?6

-

--

Figure 3.5: Izvrsavanje programa uz pomoc interpretera

Nacin rada interpretera opisuje se sledecim postupkom: uzima se instrukcijaprograma, vrsi se njena sintaksna analiza, zatim semanticka obrada, i prelazi se nasledecu instrukciju. Postupak se ponavlja sve dok se ne naide na instrukciju krajaprograma. Semanticka obrada izvrsnih instrukcija svodi se na njihovo izvrsavanje.

Page 16: Azbuka,Rec,Jezik,Jezicki Procesor

16 3. Azbuka, rec, jezik, jezicki procesori

Opisne instrukcije se obraduju tako sto se informacije iz njih pamte u tabelamai koriste pri obradi izvrsnih instrukcija. Dakle, analiza i izvrsavanje programa uzpomoc interpretera su vremenski povezani.

Ulazni podaci interpretera su program P i ulazni podaci D programa P. Inter-preter uzima podatke onda kada instrukcije koje interpretira to zahtevaju.

Rezultat rada interpretera je rezultat izvrsavanja programa P (nema prevedenogprograma P na masinskom jeziku).

U toku rada interpreter mora da odrzava sve radne podatke programa P.

Jezici za koje se grade interpreteri nazivaju se interpreterskim (interaktivnim)jezicima.

S druge strane, izvrsavanje programa P na jeziku L moze se ostvariti primenomprevodioca na nacin prikazan na slici 3.6.

na jeziku Lprogram P

PREVODILAC

?na jeziku L’program P’-

?programa Ppodaci D -

programa Prezultat R

¡¡

¡µ

©©©*HHHj@

@@R optimizacija koda

generisanje kodasintaksna analizaleksicka analiza tabele

gresakaobrada

¾ -

¾ -

Figure 3.6: Izvrsavanje programa uz pomoc prevodioca

Prevodioci su jezicki procesori koji prevode program sa jednog (izvornog) jezikana drugi (izlazni (ciljni)). Izvrsavanje programa uz pomoc prevodioca odvija se udva koraka:

1. Program P (u izvornom jeziku L) transformise se u program P’ na izlaznomjeziku L’, pod kontrolom prevodioca. Dakle, ulazni podatak prevodioca jeprogram P a rezultat rada prevodioca je program P’.

2. Dobijeni program P’ se interpretira, tj. pod kontrolom programa P’ ulaznipodaci D programa P se transformisu u rezultat R programa P.

Kada je izlazni jezik L’ – masinski jezik racunara, interpretaciju vrsineposredno racunar i ona se sastoji u izvrsavanju iazlaznog programa P’. Utom slucaju postoji i medukorak izmedu prevodenja i interpretacija – povezi-vanje (engl. link) izlaznog programa P’ sa procedurama koje se pozivaju izizvornog programa P.

Page 17: Azbuka,Rec,Jezik,Jezicki Procesor

3.2. Jezicki procesori 17

Kada je izlazni jezik L’ neki medujezik (nizeg nivoa od jezika L a visegod masinskog), interpretaciju vrsi odgovarajuci interpreter jezika L’ (premaprethodno opisanom postupku izvrsavanja programa uz pomoc interpretera).

Dakle, pri izvrsavanju programa uz pomoc prevodioca faze prevodenja iizvrsavanja su razdvojene i vremenski mogu biti udeljene.

Jezici za koje se grade prevodioci nazivaju se prevodilackim jezicima tj.jezicima za paketnu obradu.

3.2.1 Prednosti i nedostaci interpretera i prevodilaca

Interpretacija i prevodenje programa su dva komplementarna pristupa.

Osnovna prednost interpretera je sto omogucuje neposredni pristup korisnikaprocesu racunanja, izvornom programu i podacima, jer su i program i podaciprisutni u toku izvrsavanja. Uocena greska moze odmah da se ispravi i da se nastavisa interpretacijom. Interpeteri su zato izuzetno pogodni u fazi rada na programu(u toku razvoja programa).

Interpreteri analiziraju i izvrsavaju jednu po jednu instrukciju (naredbu, iskaz)izvornog programa. Ako postoje ciklusi, ista instrukcija se analizira vise puta i us-porava izvrsavanje programa. Pri svakom izvrsavanju programa (za nove ulazne po-datke), program se ponovo interpretira, sto ukljucuje, pored ponovnog izvrsavanjaprograma, i ponavljanje sintaksne analize. Sporost koja je rezultat analize priizvrsavanju programa uz pomoc interpretera je osnovni nedostatak interpretera.

Interpreteri se, zbog svojih svojstava, primenjuju na jezike kod kojih izvorniprogram ima samo jednu instrukciju (npr. jezici u sastavu tekst editora), ili kadase svaka instrukcija programa izvrsava samo jedanput (npr. jezici u sastavu op-erativnih sistema; npr. datoteke sa ekstenzijom BAT u DOS-u). Interpreteri supogodni i za jezike kod kojih je vreme analize instrukcije zanemarljivo u odnosu navreme njenog izvrsavanja (npr. problemski orijentisani jezici) kao i za jezike visokognivoa kod kojih nema izrazenih upravljackih struktura kao ni izrazene tipiziranosti,pa je moguce redom analizirati i izvrsavati komponentu po komponentu programa(npr. PROLOG, BASIC, LISP).

Prevodioci, posebno kada je izlazni jezik masinski, imaju osnovnu prednostu brzini svakog izvrsavanja jednom prevedenog programa. Osnovni nedostatakizvrsavanja programa uz pomoc prevodioca je sto prevedeni program gubi svakuvezu sa izvornim programom. Svaka (i najmanja) izmena u izvornom programuzahteva ponovno prevodenje celog programa. Zato se prevodioci primenjuju najezike u kojima se pisu programi sa intenzivnom numerickom obradom (za kojeje vazno da se izvrsavaju sto brze). Takode, prevodioci su pogodni za jezike saveoma izrazenom strukturom i strogom tipiziranoscu, s obzirom da jedna instrukcijamoze da se protegne na veliki segment programa (npr. u Pascal-u bi analiza prvog(osnovnog) serijskog komponovanog iskaza (BEGIN – END) podrazumevala analizucelog programa, sto znaci da bi tek posle toga mogla i da se izvrsi. Ovo je upravonacin rada prevodioca).

Page 18: Azbuka,Rec,Jezik,Jezicki Procesor

18 3. Azbuka, rec, jezik, jezicki procesori

Pristup koji kombinuje prednosti interpretera i prevodioca je prevodenjeizvornog jezika L na medujezik L’ (koji nije masinski) i koji se zatim interpre-tira. Time se odrzava veza programa koji se interpretira sa ulaznim podacimaizvornog programa (mada ne i sa samim izvornim programom), a izlazni jezikje obicno takav da je njegova interpretacija dovoljno brza (znatno brza od inter-pretacije samog izvornog programa). I izmene u izvornom programu tada se lakseizvode, jer je prevodenje na medujezik L’ znatno brze od prevodenja na masinskijezik.

Sve cesci je slucaj da se za jedan izvorni (programski) jezik gradi i interpreteri prevodilac. Intepreter se tada koristi u fazi razvoja programa da bi omoguciointerakciju korisnika sa programom, dok se u fazi eksploatacije (koriscenja) kom-pletno razvijenog i istestiranog programa koristi prevodilac koji proizvodi programsa najefikasnijim izvrsavanjem.

3.2.2 Struktura prevodioca

U semi izvrsavanja programa uz pomoc prevodioca naznacena je globalna struk-tura jednog prevodioca: leksicka analiza, sintaksna analiza, generisanje koda, opti-mizacija koda. Razmotrimo ove komponente nesto pazljivije.

Leksicka analiza je prva faza prevodenja. Ulazni program se razlaze na jednos-tavne komponente koje se ponasaju kao osnovni objekti programa sa odredenimznacenjem (karakteri azbuke, na primer, nisu takvi objekti jer nemaju nikakvoposebno znacenje osim sto predstavljaju sami sebe). Takvi se objekti nazivajuleksickim klasama, i u programskom jeziku mogu biti, na primer, numericka (bro-jevna) konstanta, identifikator, kljucna rec, itd. Izdvajanje ovih objekata moze seobaviti efikasnim algoritmima koji se zasnivaju na konceptu konacnih automata inazivaju se leksickim analizatorima.

Leksicki analizator cita izvorni program, izdvaja u njemu leksicke klase (npr.identifikator ”prihod”) i zamenjuje ih leksemama; to su parovi oblika (vrsta leksickeklase, pokazivac na tabelu koja odgovara toj leksickoj klasi). Vrsta leksicke klaseje, na primer ”identifikator”, a pokazivac se postavlja na onu vrstu te tabele kojaodgovara tom objektu (identifikatoru ”prihod”, uz koji se navodi i njegov tip ieventualno dodeljena vrednost). Na primer, iskaz dodele

prihod := (cena+porez)∗ brzamenjuje se nizom leksema oblika <id,1> <op,1> <spsim,1> <id,2> <op,2><id,3> <spsim,2> <op,3> <id,4>, gde su id, op, spsim leksicke klase identifika-tor, operacija, specijalni simbol, a broj uz oznaku leksicke klase oznacava red uodgovarajucoj tabeli (za identifikator, operaciju, specijalni simbol) koji se odnosina taj konkretni objekat (identifikatore prihod, cena, porez, br; operacije :=, +, ∗;specijalne simbole (, )).

Tako leksicki analizator prevodi nisku karaktera koja predstavlja ceo izvorniprogram, u niz leksema koji je ulaz u sintaksni analizator. Ako leksicki analiztornaide na nisku karaktera u izvornom programu koja ne odgovara nijednoj leksickojklasi jezika (npr. ”1.vi” nije ni identifikator, ni konstanta, ni operacija, ni specijalnisimbol, ni kljucna rec u Pascal-u), leksicki analizator javlja poruku o gresci.

Page 19: Azbuka,Rec,Jezik,Jezicki Procesor

3.2. Jezicki procesori 19

Sintaksni analizator je program koji koristi samo prve komponente leksema i naosnovu njih konstruise sintaksnu strukturu izvornog programa (druge komponenteleksema koriste se u fazi generisanja koda). Ako tu strukturu nije moguce odrediti,znaci da izvorni program nije sintaksno korektan (mada je leksicki korektan), i tadasintaksni analizator javlja poruku o gresci. Na primer, mada leksicki analizatoruspesno proanalizira nisku simbola ” prihod := (cena+ + porez)∗ br” i prevedeje u zapis <id,1> <op,1> <spsim,1> <id,2> <op,2> <op,2> <id,3> <spsim,2><op,3> <id,4>, sintaksni analizator ce utvrditi da ovo nije sintaksno ispravni iskazprema gramatici Pascal-a jer ima dva susedna aritmeticka operatora.

Izlaz iz sintaksnog analizatora je obicno struktura izvornog programa predstavl-jena drvetom. Listovi drveta su lekseme, a unutrasnji cvorovi drveta odgovarajusintaksnim klasama (konstrukcijama jezika koje su na visem nivou od leksickih klasa– npr. faktor, term, podizraz, izraz, iskaz (npr. iskaz dodele, selekcije (IF–THEN–ELSE), ponavljanja (npr. WHILE- -DO))) , itd.

Na primer, drvo sintakse prethodnog iskaza dodele moze se predstaviti slikom3.7.

<id,2> <id,3>

<id,4>

<id,1>

n3

n2

n1

:=

+

©©©©©©

HHHHHH

©©©©©©

HHHHHH

©©©©©©

HHHHHH

Figure 3.7: Drvo sintaksne analize niske leksema <id,1> <op,1> <spsim,1><id,2> <op,2> <id,3> <spsim,2> <op,3> <id,4>

Oznake cvorova n1, n2 i n3 imaju znacenje ”faktor”, ”izraz”, ”iskaz dodele”,redom. Ova sintaksna struktura namece i redosled izvrsavanja celog iskaza: prvose izracunava zbir, zatim proizvod, a na kraju dodela.

Generisanje koda obicno ide preko generisanja medukoda (programa na nekomnizem, apstraktnom jeziku), iz kojeg se generise program na masinskom jeziku. Uprogramu na medujeziku vrsi se tzv. ”globalna” optimizacija (npr. ”iznosenje”,iz ciklusa, iskaza koji se ne moraju izvrsavati u ciklusu), dok se u programu namasinskom jeziku vrsi tzv. ”lokalna” optimizacija koja se odnosi na eliminacijunekih, nepotrebnih, instrukcija u masinskom programu.

Page 20: Azbuka,Rec,Jezik,Jezicki Procesor

20 3. Azbuka, rec, jezik, jezicki procesori

3.3 HTML

Jedan primer jezika specificne namene – jezika za obelezavanje teksta – jeste HTML(HyperText Markup Language). To je, preciznije, jezik za opisivanje hipertekstu-alne strukture teksta, tj. strukture koja ukljucuje veze ili uputnice (engl. links)na druge tekstove ili delove istog teksta. Kao sistematican i metodican izvorinformacija o HTML-u moze da posluzi hipertekstualni (html) tekst na adresihttp://www.matf.bg.ac.yu/nastavno/dvitas/nastava/op/html/op-html.html Ovdenavodimo samo najosnovnije podatke o ovom jeziku.

Posto je HTML jezik koji se odnosi na hipertekst, potrebno je prvo naznacitirazliku iznedu teksta i hiperteksta, tj. izmedu dokumenta i web-dokumenta.

Tekst (tj. dokument) je, prema ISO standardu, ”informacija namenjena ljud-skom sporazumevanju koja moze biti prikazana u dvodimenzionalnom obliku... sas-toji se od grafickih elemenata (karaktera, geometrijskih, fotografskih elemenata),ili njihove kombinacije, koji cine sadrzaj dokumenta”. Dakle, tekst ima logickustrukturu (logicki izgled) tj, organizaciju sadrzaja teksta, npr. naslovi, pasusi, itd, igraficku strukturu (graficki izgled) koja opisuje organizaciju teksta u ”stampanom”obliku (npr. stranica, red, itd).

S druge strane, hipertekst (ili web-dokument) jeste tekst koji sadrzi veze iliuputnice (links) na druge dokumente ili delove istog dokumenta. To je skup stranica(engl. page) - datoteka, povezanih uputnicama umetnutim u stranice. Veze se videkao hiperveze - na koje se moze ”kliknuti”, a sam web-dokument cita se pratecihiperveze.

Dok je za pregledanje teksta na racunaru potreban neki program – pregledacnjegove graficke strukture (npr. dvi pregledac za TeX tekstove, Ghost View iliAcrobat Reader pregledac za tekstove u .ps fprmatu odnosno .pdf formatu), – cestoi obicni editor, za pracenje i pregledanje hiperteksta potreban je neki program– navigator, tj. interpretator jezika za prikazivanje hipertekstualnog dokumenta(razgledac, engl. browser).

Neki od jezika za precizno opisivanje izgleda i sadrzaja teksta tj. dokumenta jesuSGML (Standard General Markup Language), TeX i LaTeX – jezici za opisivanjematematickih tekstova, PostScript – jezik laserskih stampaca, RTF (Rich TextFormat), itd.

HTML je pojednostavljena vezrija SGML-a, namenjena opisivanju hiperteksta;tu su jos i XHTML – Extensible HTML, i XML – Extensible Markup Language(”kompromis” izmedu slozenosti SGML-a i uproscenosti HTML-a).

HTML je jednostavan jezik. Izvorna datoteka ima ekstenziju .html ili .htm.i kreira se nekim od editora teksta (EDIT, NOTEPAD, JOE, EMACS, itd.), ilipomocu posebnih programa – kompozera. Vizuelni prikaz .html dokumenta dobijase uz pomoc programa navigatora.

Osnovno svojstvo svih jezika za obelezavanje teksta, pa i HTML-a, jeste ek-splicitno obelezavanje logicke strukture dokumenta. To obelezavanje vrsi se tzv.etiketama (tag) koje se pisu medu parom uglastih zagrada < . . . >.

Graficki izgled zavisi od navigatora za vizuelizaciju.

Page 21: Azbuka,Rec,Jezik,Jezicki Procesor

3.3. HTML 21

Etikete mogu bitiproste (markeri) – jednostavni elementi logicke strukture<X>, npr. <BR>

(break – novi red)slozene (ogradivaci) <X> . . . </X>, npr. <P> . . . </P> – paragrafatributi slozenih oblezja <X A1=a A2=b . . . >. . . </X>, npr. <FONT

COLOR=”. . . ” . . . </FONT> > .

Minimalna struktura HTML-dokumenta ukljucuje etikete:

<HTML> zagrade HTML teksta<HEAD> zagrade zaglavlja koje sadrzi metadefinicije HTML dokumenta.

Na primer,<META NAME=”author” CONTENT=”. . . ”>

<META NAME=”language” CONTENT=”serbe”>

<TITLE>

</TITLE> zagrade za naziv HTML dokumenta koji se prikazuje uglavnoj naslovnoj liniji; etiketa umetnuta u <HEAD> </HEAD> etiketu. Naprimer,

<TITLE>O HTML-u</TITLE>

</HEAD>

<BODY> zagrade teksta kodiranog (obelezenog) dokumenta.</BODY>

</HTML>

HIPER-VEZE (hyperlink) omogucuje povezivanje nekog dela tekuceg tekstasa nekim drugim delom istog ili drugog teksta (nazvacemo ga ciljnim tekstom).Tekuci tekst i ciljni tekst ne moraju biti na istom racunaru. Hiper-veza se obelezavatzv sidrom (engl anchor). Etiketa za hipervezu je oblika

<A atributi> . . . </A>

Neophodno je da se u tekucem tekstu opise i fizicka pozicija sa koje se prelazina ciljni tekst (tzv. polazno sidro), i fizicka lokacija na kojoj se nalazi ciljni tekst(tzv. dolazno sidro).

Polazno sidro kodira se pomocu atributa HREF:< A HREF= adresa ciljnog teksta > pozicija u tekucem tekstu sa koje se prelazi

na ciljni tekst </A>

Navigator obicno interpretira polazno sidro u HTML-dokumentu kao fragmenttekst na koji moze da se ”klikne” - graficki istaknut podvlacenjem i drugom bojomod boje slova samog teksta.

Dolazno sidro je adresa neke datoteke ili etiketa koja obelezava deo teksta.Kodira se atributom NAME:

<A NAME= pozicija u ciljnom tekstu > ciljni tekst na koji se prelazi iz tekucegteksta </A>.

Atrinut NAME nije obavezan. Ako se izostavi, navigator se pozicionira napocetak ciljnog dokumenta a inace – na ciljnu poziciju.

Page 22: Azbuka,Rec,Jezik,Jezicki Procesor

22 3. Azbuka, rec, jezik, jezicki procesori

Adresiranje u hipertekstu temelji se na pojmu uniformnog lokatora resursa(URL – Uniform Resource Locator).

Postoji vise slucajeva adresiranja ciljnog teksta, u zavisnosti od toga koji je deoURL-a trenutno poznat:

• Ako je pozicija ciljnog teksta u okviru tekuceg dokumenta (u istoj su da-toteci), adresiranje se vrsi sa:

polazno sidro: <A HREF=”#adresa”> tekst na koji se moze ”kliknuti”</A>

Dolazno sidro: <A NAME=”adresa”> ciljni tekst </A>

• Ako je pozicija ciljnog teksta u dokumentu (datoteci) razlicitom od tekuceg,a oba su na istom serveru, adresiranje se vrsi navodjenjem putanje do ciljnogteksta (apsolutne ili relativne).

<A HREF= ”URL ciljne datoteke”> tekst na koji se moze ”kliknuti”</A>.

– prelazi se na pocetak datoteke cija je adresa navedena

Na primer, za obracanje datoteci u istom direktorijumu, relativnim adresir-anjem,

<A HREF=”dat1.html”> Poziv datoteke dat1.html </A>

• Za adresiranje dokumenta na drugom serveru, potrebno je navesti puni URLdatoteke ciljnog teksta, tj. polazno sidro je oblika

<A HREF= ”URL”> tekst na koji se moze ”kliknuti” </A>

• U prethodna dva slucaj moze se dodati atribut NAME sa istim znacenjemkao i u prvom slucaju.

(Obratiti paznju na istaknute delove logicke strukture teksta sa atributima –naslovi, odeljak, paragraf, obelezavanje elemenata teksta – liste i vrste, tabele, slike,slike-veze, mapa slike, boje, zone, formulari)