1 / 26

Funkcionalno programiranje

Funkcionalno programiranje. Funkcionalni parseri Interaktivni programi. +. . 4. 2. 2. 3. Šta je parser?. Parser je program koji analizira tekst kako bi odredio njegovu sintaktičku strukturu:. 2  3+4. Haskell programs Shell scripts HTML documents. Hugs Unix Explorer.

amish
Download Presentation

Funkcionalno programiranje

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Funkcionalno programiranje Funkcionalni parseri Interaktivni programi

  2. +  4 2 2 3 Šta je parser? Parser je program koji analizira tekst kako bi odredio njegovu sintaktičku strukturu: 23+4

  3. Haskell programs Shell scripts HTML documents Hugs Unix Explorer Razni programi koje svakodnevno koristimo imaju neke vrste parsera kojima preprocesiraju svoje ulazne podatke:

  4. Tip parsera U Haskelu, parsere možemo prirodno posmatrati kao funkcije: type Parser = String  Tree Parser je funkcija koja uzima string i vraća neki oblik drveta

  5. Međutim, parser možda neće iskoristiti čitav string, pa u povratnu vrednost dodajemo i taj neiskorišćeni deo: type Parser = String  (Tree,String) String se može parsirati na više načina, a nekad se i ne može parsirati, pa je pogodno vratiti listu rezultata: type Parser = String  [(Tree,String)]

  6. Da se ne bi ograničavali samo na strukuturu drveta, generalizujemo tip parsera tako da povratna vrednost bude bilo kog tipa: type Parser a = String  [(a,String)]

  7. Deklaracija klasi i instanci u Haskelu • Uvođenje novih klasa: class Eq a where (==), (\=) :: a → a → Bool x \= y = ¬(x == y)

  8. Uvođenje instanci klasa: instance Eq Bool where False == False = True True == True = True _==_ = False

  9. Monadički tipovi class Monad m where return :: a → m a (>>=) :: m a → (a → m b) → m b

  10. Primer instance monade instance Monad Parser where return v = · · · p >>= f = · · ·

  11. e1 >>= λv1 → e2 >>= λv2 → ... en >>= λvn → return (f v1 v2 ... vn) do v1 ← e1 v2 ← e2 ... vn ← en return (f v1 v2 ... vn) Notacija do

  12. Primer parser.hs

  13. Izgradnja gramatike za parser za aritmetičke izraze Hoćemo da konstruišemo parser koji bi izračunavao vrednost aritmetičkog izraza: 2*3+4 10 2*(3+4) 14 2 * 3 + 4 10

  14. Instanca 1 expr ::= expr + expr | expr ∗ expr | (expr) | nat nat ::= 0 | 1 | 2 | · · ·

  15. Za izraz 2*3+4 imamo dva moguća drveta izvođenja, jer naša gramatika ne uzima u obzir da množenje ima veći prioritet od sabiranja

  16. Instanca 2 expr ::= expr + expr | term term ::= term ∗ term | factor factor ::= (expr) | nat nat ::= 0 | 1 | 2 | · · · U ovakvoj gramatici postoji jedinstveno drvo izvođenja za 2*3+4

  17. Međutim, gramatika još uvek ne uzima u obzir da su množenje i deljenje asocijativne operacije, što prouzrokuje više mogućih drveta izvođenja npr za izraz 2+3+4, koji može biti protumačen kao (2+3)+4 i kao 2+(3+4)

  18. Instanca 3 expr ::= term + expr | term term ::= factor ∗ term | factor što se može dalje pojednostaviti radi lakše implementacije: expr ::= term (+ expr |epsilon ) term ::= factor (∗ term |epsilon)

  19. Primer arexp.hs

  20. Zadatak • Proširiti gramatiku i parser tako da se omogući stepenovanje. Podrazumeva se da je stepenovanje desno asocijativno i da ima veći prioritet od množenja i deljenja, ali manji od zagrada i brojeva.

  21. batch program inputs outputs Interaktivni programi Do sada smo videli kako se u Haskelu pišu tzv. batch programi, koji uzimaju ulazne podatke na početku i daju izlazne na kraju, bez ikakvih sporednih efekata

  22. keyboard interactive program inputs outputs screen Međutim, želeli bismo da koristimo Haskel za pisanje interaktivnih programa koji u toku izvršavanja mogu čitati podatke sa ulaza i pisati na izlaz

  23. Problem Haskel programi su čiste matematičke funkcije: • Haskel programinemaju sporedne efekte. Čitanje sa tastature i ispis na ekran su sporedni efekti: • Interaktivni programiimaju sporedne efekte.

  24. Rešenje Interaktivni programi se mogu pisati u Haskelu korišćenjem tipova koji bi razlikovali “čiste” izraze od “nečistih” akcija koje mogu obuhvatati sporedne efekte IO a Tip akcija koje vraćaju vrednost tipa a

  25. Na primer: IO Char Tip akcija koje vraćaju karakter. Tip akcija koje obuhvataju samo sporedne efekte i nemaju povratnu vrednost IO () Napomena: • () je tip torke koja sadrži 0 komponenata.

  26. Primer • io.hs

More Related