FORMALNI SISTEMI KAO OSNOVA ZA PROJEKTOVANJE KOMPAJLERA Definicije Sintaksa, Semantika Projektovanje kompajlera kompajlera. 1
Kompajler, Procedura, Algoritam: KOMPAJLER: prevodioc sa višeg programskog jezika na mašinski jezik. Procedura: skup operacija koje se izvršavaju u konačnom vremenu i dovode do jednoznačnog rezultata. Algoritam: skup operacija i skup pravila o njihovoj primeni nad polaznim podacima u cilju dobijanja rezultata. kompajlera. 2
Formalni sistem: Formalni sistem: neinterpretativan matematički sistem, koji čine azbuka, aksiome i skup pravila zaključivanja. Primeri: teorija skupova, Bulova algebra, račun predikata. Formalni sistem je META-JEZIK za definisanje programskih jezika. Simboli jezika objekta nazivaju se terminalnim simbolima, a simboli meta-jezika su neterminalni simboli. kompajlera. 3
Formalni sistem - nastavak Formalni sistem definiše oblik odnosno sintaksu programskog jezika. Sintaksa: skup pravila kojima se pokoravaju relacije između važećih reči jezika. Jezik služi za prenos značenja (info). Semantika: skup sadržaja (značenja) nekog jezika. kompajlera. 4
Azbuka, rečnik i jezik, formalnih sistema: AZBUKA T je konačan skup terminalnih simbola. Npr. T={a,b,c} Formula u azbuci (rečenica ili niz znakova) se dobija pripajanjem simbola: ab, ac... Skup svih konačnih reči (nizova) azbuke T* je REČNIK formiran u T. JEZIK L: podskup rečnika, definisan pomoću jednog ili više znakova smene (smena zadatu reč zamenjuje jednom od reči u koju se ona transformiše). kompajlera. 5
Odlučivost formalnih sistema: Skup POSLEDICA formalnog sistema: skup reči koji se dobija primenom pravila zaključivanja nad skupom reči jezika. TEZA sistema: skup posledica izvedenih iz sopstvenih aksioma. Osnovni problem teorije formalnih sistema je određivanje da li je neka reč jezika element teze sistema. Ukoliko postoji algoritam, koji omogućava takav zaključak, za sistem se kaže da je odlučiv. kompajlera. 6
Specifikacije jezika: Generativna: ukoliko je neku rečenicu moguće generisati uvek kad je to potrebno. Analitička: algoritam određuje da li je zadata reč važeća ili nevažeća u jeziku. kompajlera. 7
Generisanje reči: Početni simbol je označen neterminalni simbol od koga se razvijaju svi nizovi jezika. Proces generisanja se sastoji od primene u svakom koraku jedne redukcije ili SMENE. Ovaj proces pretvara jednu reč u drugu. kompajlera. 8
Formalna gramatika: Skup četiri elementa G (N, T,, P) gde je: (1) N - skup neterminalnih simbola (2) T - skup terminalnih simbola (3) Σ -Početni simbol; Σ je element N (4) P - skup SMENA ->, gde su i elementi (NUT)* i nije nula (5) N i T su disjunktni kompajlera. 9
Rečenična forma, Rečenica, Jezik definisan gramatikom: Rečenična forma: bilo koja reč koja može da se razvije od polaznog simbola. Rečenica je rečenična forma koja sadrži samo terminalne simbole. Jezik L koji je definisan gramatikom G: L(G) = {W je element T* takav da se indirektno razvija iz }. kompajlera. 10
Sintaksa jezika Najprostiji metod definisanja sintakse jezika je pisanjem skupa generacionih pravila - produkcija. Radi pisanja kompajlera, potreban je i skup pravila prepoznavanja. Primena pravila prepoznavanja se naziva ANALIZOM ili PARSINGOM. kompajlera. 11
Bakus-Naurova forma (BNF) Bakus-Naurova forma je notacija za izražavanje produkcije. Svaka produkcija definiše sintaksnu klasu. Elementi ovog meta-jezika su: :: = predstavlja strelicu smene < > ograđuju ime sintaksne klase l simbol "ILI", omogućava dodelu više smena. kompajlera. 12
Format produkcije: NAZIV SINTAKSNE KLASE ::= DEFINICIJA Npr. <SLOVO> ::= AlBlC <IDENTIFIKATOR> ::= <SLOVO>l<SLOVO>.<SLOVO> Mogući identifikatori: A.A B.A C.A A.B B.B C.B A.C B.C C.C kompajlera. 13
Primer specifikacije: <DODELA> ::= <IDENTIFIKATOR> = <IZRAZ> <IZRAZ> ::= <TERM>l<IZRAZ> + <TERM> <TERM> ::=<IDENTIFIKATOR>l<TERM> *<IDENTIFIKATOR> <IDENTIFIKATOR> ::= AlBlC Mogući programi u ovom jeziku: A = B + C C = A*B + C... kompajlera. 14
Semantika jezika SEMANTIČKI OPIS daje smisao rečenicama koje se formiraju programskim jezikom. Svakoj smeni se mora dati formalizovano objašnjenje razumljivo mašini. Polazi se od osnovnog semantičkog skupa, koji je razumljiv računaru. Kroz strukturu koju je sintaksa nametnula nad rečenicom, identifikuju se njeni sastavni elementi. Polazeći od značenja sastavnih elemenata rečenice dolazi se do njenog ukupnog značenja. kompajlera. 15
PROJEKTOVANJE KOMPAJLERA Kompajler je programska komponenta koja prevodi programe, napisane na višem programskom jeziku na mašinski jezik. U opštem slučaju jezik L koji je nezavisan od konkretne mašine, prepoznaje tipove kojima mašina ne može da manipuliše. Uobičajeno je da se taj prevodioc dekomponuje na tri osnovna dela. kompajlera. 16
Dekompozicija prevodioca MAKRO JEZIK JEZIK ISKAZA PREPROCESOR OSNOVNI JEZIK KOMPAJLER MEĐUJEZIK APSTRAKTNA MAŠINA PODACI REZULTAT INTERPRETER kompajlera. 17
Komponente prevodioca Preprocesor: prelaz sa spoljnjeg oblika jezika na osnovni jezik. Kompajler: prelaz sa osnovnog programskog jezika na međujezik. Interpreter:simulira pseudomašinu na realnoj mašini. kompajlera. 18