Parser primer kalkulatora

Σχετικά έγγραφα
UNIVERZITET U NIŠU ELEKTRONSKI FAKULTET SIGNALI I SISTEMI. Zbirka zadataka

Osnovni primer. (Z, +,,, 0, 1) je komutativan prsten sa jedinicom: množenje je distributivno prema sabiranju

Strukture podataka i algoritmi 1. kolokvij 16. studenog Zadatak 1

3.1 Granična vrednost funkcije u tački

Računarska grafika. Rasterizacija linije

Iskazna logika 3. Matematička logika u računarstvu. novembar 2012

IZVODI ZADACI ( IV deo) Rešenje: Najpre ćemo logaritmovati ovu jednakost sa ln ( to beše prirodni logaritam za osnovu e) a zatim ćemo

Teorijske osnove informatike 1

XI dvoqas veжbi dr Vladimir Balti. 4. Stabla

Zavrxni ispit iz Matematiqke analize 1

Pismeni ispit iz matematike Riješiti sistem jednačina i diskutovati rješenja sistema u zavisnosti od parametra: ( ) + 1.

MATRICE I DETERMINANTE - formule i zadaci - (Matrice i determinante) 1 / 15

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Računarska grafika. Rasterizacija linije

Apsolutno neprekidne raspodele Raspodele apsolutno neprekidnih sluqajnih promenljivih nazivaju se apsolutno neprekidnim raspodelama.

Μεταγλωττιστές. Εργαστήριο 5. Εισαγωγή στο BISON. Γεννήτρια Συντακτικών Αναλυτών. 2 η Φάση Μεταγλώττισης Συντακτική Ανάλυση

DISKRETNA MATEMATIKA - PREDAVANJE 7 - Jovanka Pantović

Elementi spektralne teorije matrica

IZVODI ZADACI (I deo)

Kaskadna kompenzacija SAU

MATEMATIKA 2. Grupa 1 Rexea zadataka. Prvi pismeni kolokvijum, Dragan ori

DIMENZIONISANJE PRAVOUGAONIH POPREČNIH PRESEKA NAPREGNUTIH NA PRAVO SLOŽENO SAVIJANJE

Programski prevodioci

TRIGONOMETRIJA TROKUTA

IspitivaƬe funkcija: 1. Oblast definisanosti funkcije (ili domen funkcije) D f

a M a A. Može se pokazati da je supremum (ako postoji) jedinstven pa uvodimo oznaku sup A.

Riješeni zadaci: Nizovi realnih brojeva

Riješeni zadaci: Limes funkcije. Neprekidnost

18. listopada listopada / 13

ELEKTROTEHNIČKI ODJEL

Operacije s matricama

Ispitivanje toka i skiciranje grafika funkcija

( , 2. kolokvij)

numeričkih deskriptivnih mera.

Program testirati pomoću podataka iz sledeće tabele:

SEMINAR IZ KOLEGIJA ANALITIČKA KEMIJA I. Studij Primijenjena kemija

Obrada signala

Trigonometrija 2. Adicijske formule. Formule dvostrukog kuta Formule polovičnog kuta Pretvaranje sume(razlike u produkt i obrnuto

Εισαγωγή στο Bison. Μεταγλωττιστές, Χειμερινό εξάμηνο

Kontrolni zadatak (Tačka, prava, ravan, diedar, poliedar, ortogonalna projekcija), grupa A

FORMALNI SISTEMI KAO OSNOVA ZA PROJEKTOVANJE KOMPAJLERA

M086 LA 1 M106 GRP. Tema: Baza vektorskog prostora. Koordinatni sustav. Norma. CSB nejednakost

1. Pojam fazi skupa. 2. Pojam fazi skupa. 3. Funkcija pripadnosti, osobine i oblici. 4. Funkcija pripadnosti, osobine i oblici

PARCIJALNI IZVODI I DIFERENCIJALI. Sama definicija parcijalnog izvoda i diferencijala je malo teža, mi se njome ovde nećemo baviti a vi ćete je,

Τι είναι το yacc. Δομή ενός αρχείου yacc. Πρόλογος. ΗΥ 340 Γλώσσες και Μεταφραστές Φροντιστήριο. Ο yacc είναι ένας γενικού σκοπού parser generator.

PRAVA. Prava je u prostoru određena jednom svojom tačkom i vektorom paralelnim sa tom pravom ( vektor paralelnosti).

radni nerecenzirani materijal za predavanja R(f) = {f(x) x D}

7 Algebarske jednadžbe

APROKSIMACIJA FUNKCIJA

Pošto pretvaramo iz veće u manju mjernu jedinicu broj 2.5 množimo s 1000,

5. Karakteristične funkcije

Ĉetverokut - DOMAĆA ZADAĆA. Nakon odgledanih videa trebali biste biti u stanju samostalno riješiti sljedeće zadatke.

Sortiranje prebrajanjem (Counting sort) i Radix Sort

S t r a n a 1. 1.Povezati jonsku jačinu rastvora: a) MgCl 2 b) Al 2 (SO 4 ) 3 sa njihovim molalitetima, m. za so tipa: M p X q. pa je jonska jačina:

RIJEŠENI ZADACI I TEORIJA IZ

Εργαστήριο 08 Εισαγωγή στo Yacc

PID: Domen P je glavnoidealski [PID] akko svaki ideal u P je glavni (generisan jednim elementom; oblika ap := {ab b P }, za neko a P ).

Programiranje I. Smer Informatika Matematički fakultet, Beograd. Jelena Tomašević, Sana Stojanović November 16, 2005

III VEŽBA: FURIJEOVI REDOVI

Sistemi veštačke inteligencije primer 1

SISTEMI NELINEARNIH JEDNAČINA

4.7. Zadaci Formalizam diferenciranja (teorija na stranama ) 343. Znajući izvod funkcije x arctg x, odrediti izvod funkcije x arcctg x.

( , treći kolokvij) 3. Na dite lokalne ekstreme funkcije z = x 4 + y 4 2x 2 + 2y 2 3. (20 bodova)

INTELIGENTNO UPRAVLJANJE

Klasifikacija blizu Kelerovih mnogostrukosti. konstantne holomorfne sekcione krivine. Kelerove. mnogostrukosti. blizu Kelerove.

2 tg x ctg x 1 = =, cos 2x Zbog četvrtog kvadranta rješenje je: 2 ctg x

Cauchyjev teorem. Postoji više dokaza ovog teorema, a najjednostvniji je uz pomoć Greenove formule: dxdy. int C i Cauchy Riemannovih uvjeta.

Εργαστήριο 4_1 Λεκτική Ανάλυση - Flex Διδάσκοντες: Δρ. Γεώργιος Δημητρίου Δρ. Άχμεντ Μάχντι

Υλοποίηση ΣΑ με το bison

IZRAČUNAVANJE POKAZATELJA NAČINA RADA NAČINA RADA (ISKORIŠĆENOSTI KAPACITETA, STEPENA OTVORENOSTI RADNIH MESTA I NIVOA ORGANIZOVANOSTI)

Program za tablično računanje Microsoft Excel

Osnovne teoreme diferencijalnog računa

Zadaci sa prethodnih prijemnih ispita iz matematike na Beogradskom univerzitetu

Funkcije dviju varjabli (zadaci za vježbu)

Dvanaesti praktikum iz Analize 1

Υλοποίηση ΣΑ με το bison

KOMUTATIVNI I ASOCIJATIVNI GRUPOIDI. NEUTRALNI ELEMENT GRUPOIDA.

DRUGI KOLOKVIJUM IZ MATEMATIKE 9x + 6y + z = 1 4x 2y + z = 1 x + 2y + 3z = 2. je neprekidna za a =

Periodičke izmjenične veličine

1 Promjena baze vektora

OSNOVI ELEKTRONIKE VEŽBA BROJ 1 OSNOVNA KOLA SA DIODAMA

Algoritmi zadaci za kontrolni

Neka su A i B proizvoljni neprazni skupovi. Korespondencija iz skupa A u skup B definiše se kao proizvoljan podskup f Dekartovog proizvoda A B.

Novi Sad god Broj 1 / 06 Veljko Milković Bulevar cara Lazara 56 Novi Sad. Izveštaj o merenju

(P.I.) PRETPOSTAVKA INDUKCIJE - pretpostavimo da tvrdnja vrijedi za n = k.

Elektrotehnički fakultet univerziteta u Beogradu 17.maj Odsek za Softversko inžinjerstvo

NOMENKLATURA ORGANSKIH SPOJEVA. Imenovanje aromatskih ugljikovodika

- pravac n je zadan s točkom T(2,0) i koeficijentom smjera k=2. (30 bodova)

Elektrotehnički fakultet univerziteta u Beogradu 16.maj Odsek za Softversko inžinjerstvo

Παρουσίαση του εργαλείου BISON

Matematika 1 - vježbe. 11. prosinca 2015.

100g maslaca: 751kcal = 20g : E maslac E maslac = (751 x 20)/100 E maslac = 150,2kcal 100g med: 320kcal = 30g : E med E med = (320 x 30)/100 E med =

Akvizicija tereta. 5660t. Y= masa drva, X=masa cementa. Na brod će se ukrcati 1733 tona drva i 3927 tona cementa.

PRIMJER 3. MATLAB filtdemo

radni nerecenzirani materijal za predavanja

Pismeni ispit iz matematike GRUPA A 1. Napisati u trigonometrijskom i eksponencijalnom obliku kompleksni broj, zatim naći 4 z.

POTPUNO RIJEŠENIH ZADATAKA PRIRUČNIK ZA SAMOSTALNO UČENJE

EXIT. Programski jezik C - 6. deo. Funkcija exit. (materijal sa predavanja D. Vitasa)

Θα χρησιμοποιήσουμε το bison, μια βελτιωμένη έκδοση του yacc. Φροντιστήριο 2ο Εισαγωγή στο YACC. Yacc. Δομή Προγράμματος Yacc

Konstruisati efikasan algoritam znači dati skup preciznih uputstava kako doći do rešenja zadatog problema Algoritmi se mogu opisivati:

Transcript:

Parser primer kalkulatora Primer gramatike za jednostavni kalkulator lines ε lines NEWLINE lines e NEWLINE e e "+" NUMBER e " " NUMBER NUMBER (podrazumeva se da su NUMBER i NEWLINE simboli) Ulaz: Izlaz: 5 + 2 7 1 3-2 2 * 5 syntax error 1

Parser primer kalkulatora Kalkulator definisan prethodnom gramatikom može biti u obliku parsera čije ponašanje opisuje odgovarajuća Bison specifikacija primer: calc1 U Bison specifikaciji je navedeno da kalkulator prihvata jedan izraz u jednoj liniji (prvo pravilo) Druga grupa pravila opisuje izraze 2

Parser primer kalkulatora U Bison specifikaciji je navedeno da kalkulator prihvata jedan izraz u jednoj liniji (prvo pravilo) i kada prepozna izraz odštampa njegovu vrednost (printf štampa vrednost drugog pojma e) U drugoj grupi pravila je prikazano računanje izraza Podrazumeva se da vrednost simbola NUMBER vraća skener u globalnoj promenljivoj yylval primer: calc2 3

Parser Bison oporavak od greške Kada otkrije grešku, podrazumeva se da LR parser pozove funkciju yyerror radi ispisivanja poruke "syntax error" i da zatim završi parsiranje Međutim Bison dozvoljava da se umesto podrazumevajućeg obavi korisničko tretiranje greške Bison podržava oporavak od grešaka nastalih za vreme pokušaja redukcije po nekom pravilu tako što dozvoljava da se u takvo pravilo uvede alternativa koja omogućuje redukciju nakon pojave greške takva alternativa sadrži Bison ključnu reč error i niz pojmova i/ili simbola koji treba da budu otkriveni nakon pojave greške da bi u slučaju greške redukcija bila moguća neposredno iza error obavezno sledi simbol na ovaj način se može ignorisati niz ulaznih simbola koji sadrže grešku i nastaviti sintaksna analiza iza takvog niza simbola 4

Parser Bison oporavak od greške Na primer, da bi se ignorisali svi simboli iz pogrešne linije kod jednostavnog kalkulatora potrebno je u prvo pravilo dodati alternativu lines error NEWLINE { yyerror("reenter last line:"); yyerrok; } Kada parser naiđe na grešku u liniji sa izrazom on primeni prethodno pravilo pre toga izmeni stanje na steku tako da može da prepozna alternativu pravila koja omogućuje oporavak od greške podrazumeva se da je yyerror funkcija koja prikazuje poruku u slučaju greške, a yyerrok je makro koji signalizira LR parseru da je greška obrađena i da može da nastavi sa parsiranjem primer: calc3 5

Parser - dvosmislene gramatike Gramatika je dvosmislena (ambiguous) ako razna izvođenja dovode do istog niza simbola Kod dvosmislenih gramatika za isti niz simbola postoje bar dva različita stabla parsiranja Dvosmislene gramatike su problematične, jer dozvoljavaju različita tumačenja jednog-istog niza simbola 6

Parser - dvosmislene gramatike Primer dvosmislene gramatike Gramatika za kalkulator koji podržava još i množenje, deljenje i unarni minus e e + e e e e * e e / e -e NUMBER 7

Parser - dvosmislene gramatike Primer dvosmislenosti: dva različita stabla parsiranja za isti niz simbola: 1 + 2 * 3 Izbor levog ili desnog drveta zavisi od prioriteta operatora 8

Parser - dvosmislene gramatike Dvosmislenosti redosleda primene operatora, zahtevaju da se parseru saopšti redosled njihove primene (associativity i precedence) Redosled primene operatora s leva u desno se zadaje u obliku %left + - (primer se odnosi na operatore sabiranja i oduzimanja), a s desna u levo u obliku %right UMINUS (primer se odnosi na unarni minus) Prvo se navode manje prioritetni operatori %left + - %left * / %right UMINUS (u prethodnom primeru najprioritetniji operator je unarni minus) Prioritet operatora se pridružuje pravilu ako se iza pravila navede oznaka %prec i zatim dotični operator primer kompletnog kalkulatora: calc4 9

Gramatika mc programskog jezika Gramatika za programski jezik mc podskup programskog jezika C izražena u BNF notaciji analiza svih simbola mc gramatike 10

Gramatika mc - simboli letter a A b B c C d D e E f F g G h H i I j J k K l L m M n N o O p P q Q r R s S t T u U v V w W x X y Y z Z digit 0 1 2 3 4 5 6 7 8 9 identifier letter ( letter digit )* int_constant digit + 11

Gramatika mc - pojmovi program function_list function_list function function_list function function type identifier ( ) body type int 12

Gramatika mc - pojmovi body { variable_list statement_list } { statement_list } variable_list variable ; variable_list variable ; variable type identifier statement_list ε statement_list statement 13

Gramatika mc - pojmovi statement compound_statement assignment_statement if_statement return_statement compound_statement { statement_list } assignment_statement identifier = num_exp ; 14

Gramatika mc - pojmovi num_exp exp num_exp + exp num_exp - exp exp constant identifier function_call ( num_exp ) constant int_constant 15

Gramatika mc - pojmovi function_call identifier ( ) if_statement if_part if_part else statement if_part if ( rel_exp ) statement rel_exp num_exp == num_exp num_exp!= num_exp 16

Gramatika mc - pojmovi return_statement return num_exp ; Komentari: višelinijski: /* a comment */ jednolinijski: // a comment Razmak i kraj linije imaju funkciju separatora simbola 17

mc primer programa int main() { int a; int b; a = 55; } if(a == 0) b = 1; else b = 0; return b; int f2() { int x; x = 2; } return x * x; int main() { int a; a = f2(); return a; } 18