Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
1
Funkcionalno programiranje
Funkcionalni parseri Interaktivni programi
2
Šta je parser? Parser je program koji analizira tekst kako bi odredio njegovu sintaktičku strukturu: 4 + 2 3 23+4
3
Razni programi koje svakodnevno koristimo imaju neke vrste parsera kojima preprocesiraju svoje ulazne podatke: Haskell programs Shell scripts HTML documents Hugs Unix Explorer
4
Parser je funkcija koja uzima string i vraća neki oblik drveta
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
Notacija do do v1 ← e1 e1 >>= λv1 → v2 ← e2 e2 >>= λv2 →
... vn ← en return (f v1 v2 ... vn) e1 >>= λv1 → e2 >>= λv2 → ... en >>= λvn → return (f v1 v2 ... vn)
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
14
Instanca 1 expr ::= expr + expr | expr ∗ expr | (expr) | nat
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
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 batch program inputs outputs
22
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 interactive program inputs outputs keyboard screen
23
Problem Haskel programi nemaju sporedne efekte.
Haskel programi su čiste matematičke funkcije: Haskel programi nemaju sporedne efekte. Čitanje sa tastature i ispis na ekran su sporedni efekti: Interaktivni programi imaju sporedne efekte.
24
Tip akcija koje vraćaju vrednost tipa a
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
Tip akcija koje vraćaju karakter.
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
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.