820 likes | 1.11k Views
INFORMATIKA. KONSTRUKCIJA PREVODILACA LEKSIČKA I SINTAKSNA ANALIZA. Studenti: Kristina Tomić Bojana Asanović Mladenka Mitrović. Profesor: Prof. Dr Milorad Banjanin. KONSTRUKCIJA PREVODILACA LEKSIČKA I SINTAKSNA ANALIZA. PROGRAMSKI JEZICI. DEFINICIJA. ZADATAK. ZAHTEVI.
E N D
INFORMATIKA KONSTRUKCIJA PREVODILACA LEKSIČKA I SINTAKSNA ANALIZA Studenti: Kristina Tomić Bojana Asanović Mladenka Mitrović Profesor: Prof. Dr Milorad Banjanin
KONSTRUKCIJA PREVODILACA LEKSIČKA I SINTAKSNA ANALIZA
PROGRAMSKI JEZICI DEFINICIJA ZADATAK ZAHTEVI
Generacije programskih jezika su: jezici četvrte generacije (4GL), u koje spadaju SQL, HTML, PHP, ASP, tj. neproceduralni jezici, sa usko specijalizovanom namenom, prema kojoj mogu biti: mašinski jezici, koji se nazivaju i programski jezici prve generacije (1GL, 1950-1954.), asambleri i makro-asambleri su jezici druge generacije (2GL, 1955-1959.) i nalaze se između mašinskih jezika i viših programskih jezika, jezici treće generacije (3GL) su viši programski jezici, koji su proceduralni, • opisni (služe • opisivanju • dokumenata – • PostSktipt, HTML), 2.upitni (za generisanje podskupova iz baza podataka i formiranje izveštaja - SQL), 3.grafički (LabWiew, G – jezici za programiranje virtuelnih instrumenata).
Niži programski jezici ili programski jezici niskog nivoa platformski, okrenuti računaru (instrukcije se opisuju simbolički). • mašinski jezici – asembleri • simbolički mašinski jezici – makro-asembleri
Prilikom projektovanja računara CPU (Centralna procesorska jedinica) se projektuje tako da interpretira skup instrukcija koje se nazivaju instrukcijski skup. Svaka instrukcija u ovom skupu ima jedinstven binarnikod koji CPU može da interpretira i on se zove mašinski kod instrukcije, a skup svih mašinskih kodova instrukcija se zove mašinski jezik.
Viši programski jezici ili proceduralni programski jezici instrukcije su obično izvedene iz reči engleskog jezika Računar može da izvršava samo programe u formi mašinskogjezika.
Programi pisani u višem progrmskom jeziku se prevode na mašinski jezik, a za prevođenje se koriste posebni programi, tzv. programi prevodioci.
Viši programski jezici su doneli sledeće prednosti: • olakšano programiranje (bliži čovekovom prirodnom jeziku), • skraćeno vreme obuke u programiranju, • nije nužno detaljno poznavanje hardveraračunara, • prenosivost programa (program se može prevesti na drugom tipu računara i izvršiti bez ikakvih izmena u programu).
PREVODIOCI Prema načinuprevođenja instrukcija izvornog programa u mašinski jezik, prevodioci se dele na : 1. interpretere 2. kompajlere
KOMPAJLERI (engl. compiler) su programi koji program napisan na višem (simboličkom) programskom jeziku, prevode u program napisan na mašinskom programskom jeziku. Kompajler prevodi ceo program odjednom i formiraja poseban program u mašinskom programskom jeziku koji se naziva izvršna verzija programa.
RAD KOMPAJLERA Kompajler prevodi kompletan izvorni kod i snima ga u datoteku koja predstavlja izvršni program.
podaci za program izvorni program objektni program računar-apstraktna mašina rezultat kompajler vreme prevođenja vreme izvršavanja
INTERPRETERI programi koji instrukcije programa napisanog na višem (simboličkom) programskom jeziku, prevode u instrukcije na mašinskom programskom jeziku prevodeći instrukciju po instrukciju programa tokom njegovog izvršavanja.
podaci program rezultat interpreter
Istorijakompajlera FORTRAN vođen Johnom Backusom iz IBM-a predstavio je prvi kompletni kompajler 1957. godine. COBOL je bio rani jezik za kompajliranje, 1960. Prvi self-hosting kompajler Lisp koji je mogao kompajlirati sopstveni izvorni kod u viši programski jezik kreirali su Hart i Levin u MIT-u,1962. godine. Upotreba viših programskih jezika pri pisanju kompajlera započela je u ranim 70-im godinama XX veka kada su Pascal i Ckompajleri bili napisani u svojim jezicima. Tokom 90-ih godina velik broj besplatnih kompajlera i kompajlerskih alata su bili razvijeni za sve vrste jezika.
Podela kompajlera Na osnovu svojih karakteristika kompajleri postoji nekoliko vrsta kompajlera:
Jednoprolazni kompajler (engl. one pass compiler) očitava izvorni program samo jednom i to je dovoljno za prevođenje u mašinski jezik.
Višeprolazni kompajler (engl. two pass compiler / three pass compiler) najprije prevodi program u višem jeziku (C, Pascal) u asembler, a tek zatim u mašinski jezik.
Istorodni kompajler (engl. native compiler) proizvodi kod namenjen da radi na istoj vrstikompjutera i operativnog sistema na kojoj radi i sam kompajler.
Unakrsni kompajler (engl. cross compiler) proizvodi kod kreiran da radi na drugoj platformi (drugom operativnom sistemu).
Optimirajući kompajler (engl. optimising compiler) nastoji da prevedeni program učini što kraćim i bržim pri izvođenju.
„Source to source“ kompajler vrsta kompajlera koji koristi viši programski jezik i kao ulaz i kao izlaz.
„Threaded code“ kompajler ova vrsta kompajlera može biti zamišljena kao programi koji pretražuju bazu podataka.
„Just-in-time“ kompajler upotrebljavaju Smalltalk i Java sistemi. Aplikacije su isporučene u binarnom kodu koji se kompajlira u mašinski kod pre izvršavanja.
„Retargetable“ kompajler kompajler koji se relativno lako može pretvoriti u generalni kod za različite CPU izgradnje.
„Parallelizing“ kompajler pretvara nekoliko ulaznih programa u oblik pogodan za efikasno izvršavanje na paralelnoj kompjuterskoj izgradnji.
Osnovni pojmovi NAPOMENA!!! Da bi se napravio kompajler, tj. program koji prevodi izvorni program u mašinski program potrebno je imatiprecizan opis izvornog jezika. Kako računar ne može da razume sadržaj programa potrebno je opisati jezik kao niz simbola koji zadovoljavaju neka pravila.
Azbuka je konačan skup simbola (slova a, b, ..., y, z, binarna azbuka 0, 1itd). Azbuku označavamo sa V, a elemente azbuke nazivamo simbolima.
STRING, sastavljen od simbola neke azbuke V, je konačan niz simbola iz V. • String opisujemo nizanjem simbola jedan iza drugog, i obično ga nazivamoreč, i kaže se da je string napisan u azbuci V. • Konačan niz podrazumeva i prazan string, koji označavamo sa e. • Skup svih stringova, uključujući i prazan string e, napisanih u azbuci V, označavaćemo sa V*. • Dužina stringa je brojsimbola u stringu i dužina stringa se označava sa w.
Jezik je skup rečenica. • Nizovi znakova koji čine elemente jezika nazivamo rečenice.
Gramatika Gje uređena četvorka (N, T, S, P) gde je • N- konačan neprazan skup neterminalnihsimbola (pomoćnih simbola), • T- neprazan konačan skup terminalnih simbola (alfabet), • S - početni neterminalnisimbol, • P - konačan neprazan skup produkcija.
Jezike možemo klasifikovati prema vrsti produkcija koje dozvoljavaju u svojoj gramatici:
Slobodni jezici Kontekstno osetljivi jezici Regularni jezici Kontekstno slobodni jezici
Sintaksno drvo se formira za izvođenje od početnog simbola kompletirano je kada string sadrži samo terminalne simbole. • Za svako sintaksno drvo postoji najmanje jedno izvođenje. • Za svako izvođenje postoji odgovarajuće sintaksno drvo. • Niz grana koje vode iz istog čvora je direktno izvođenje. • Listovi čine izvedenu rečenicu (s leva na desno).
Kontekstno slobodne gramatike su: • Nedovoljne da izrazeprirodnejezike, • Uglavnom dovoljne da izraze sintaksu programskog jezika.
Notacija za gramatike Razvijeni formalizmi gramatike se dele: Backusova normalna forma (engl. Backus normal form - BNF) Sintaksni dijagrami
Bakusova normalna forma – BNF Metajezik Metaformula Metaizraz Metapromenljive
Sintaksni dijagrami Sintaksni dijagramje grafički metod za opis sintakse programskih jezika. Svakoj metaformuli jezika odgovara sintaksni dijagram koji je imenovan, orijentisan, označen graf sa jednim ulazom i jednim izlazom.
NIVOI KOMPAJLERA Leksička analiza Pretprocesiranje Sintaksna analiza Semantička analiza FROTEND
NIVOI KOMPAJLERA Analiza kompajlera BACK END Optimizacija Generisanje koda
Kompajler treba da zadovolji sledeće uslove: da prepoznaje i prevodi samo jezički ispravne programe, tj. da pronađe sve greške u programu, da uvek završi prevođenje bez obzira na vrstu i broj grešaka u izvornom programu, da generiše kratak i efikasan objektni program. da u sebi nemagrešaka, da bude brz program,
Leksička analiza početna procedura u svakom kompajelru Ulazni niz znakova deli u pojedinčane smislene konstrukcije – identifikatore, ključne reči, brojeve, operacije, koji se koriste u narednom koraku kompajlera – sintaksnoj analizi.
U procesu leksičke analize koriste se tri pojma vezana za stringove u rečenici jezika: 1.Token je određena kategorija jezika i više stringova se može izraziti jednim tokenom. 3. Leksema je niz karaktera (string) izvornog programa koji oblik prepoznaje kao određeni token. 2. Niz stringova koji predstavljau token, opisuju se pravilima koja se zovu oblici.
Primer nekoliko tokena, leksema i oblika u programskom jeziku Pascal
Konačni automati matematički model koji služi za definisanje tokena da bi ih kasnije bilo lakše prepoznati u prevodiocima. U njima se mogu koristiti sl.tipovi automata: • deterministički konačan automat, • nedeterministički konačan automat, • nedeterministički konačan automat sa praznim (e) prelazom.
SINTAKSNA ANALIZA pretpostavi šta nedostaje pa ubaci taj znak, obeleži deo (celinu) programa ako je uočio grešku i analizira ostatak, Sintaksna analiza analizira sintaksnu ispravnost koristeći neku od metoda, pomoću koje će program otkriti što više grešaka i da omogući kompajleru da nastavi pretraživanje drugih grešaka. Drugim rečima, sintaksna analiza treba da: formira drvo (ili stablo) izvođenja.
Interpretacija značenja (semantika) Redukcije su osnovne sintaksne konstrukcije i odgovarajuće rutine prevođenja. Sintaksna pravila definišu skup (jezik) svih nizova jedinstvenih znakova leksičkih jedinica koje su sintaksno ispravni izvorni programi.
Sintaksni analizator Sintaksni analizator kao ulaznu informaciju, koristi tabelu uniformnih simbola, čiji svaki simbol ulazi na stek. Stek sadrži skup simbola, nad kojima se trenutno radi u fazi sintaksne analize i interpretacije. Elemenat sa steka može biti unet u tabelu uniformnih simbola i obratno.
OPŠTI POSTUPCI SINTAKSNE ANALIZE Algoritmi opšte sintaksne analize su • silazna • (engl. top-down) • sintaksna analiza 2.uzlazna (engl. bottom-up) sintaksna analiza