Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.

Slides:



Advertisements
Verwante presentaties
Bij een herhaald experiment, met telkens dezelfde kans op succes gebruiken we de binomiale kansverdeling Een binomiale kansverdeling wordt gekenmerkt door.
Advertisements

Lijsten in de -calculus Een lijst [E 1, E 2,..., E n ] kan in de -calculus voorgesteld worden als z.((z E 1 ) z.((z E 2 )... z.((z E n ) nil)...) met nil.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
PROS2 Les 11 Programmeren en Software Engineering 2.
Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
Reductiemachine Functionele talen en dus de -calculus, worden vaak geïmplementeerd door een reductiemachine. De elementaire stap is een reductie, en de.
Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No.
1 Datastructuren Sorteren: alleen of niet alleen vergelijkingen College 5.
Grammatica’s en Ontleden
Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
Hoger-ordefuncties op lijsten nDoorloop een lijst en... map :: (a  b)  [a]  [b] filter :: (a  Bool)  [a]  [a] foldr :: (a  a  a)  a  [a]  a.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Inleidend probleem Data structuur (hiërarchie van classes)
Functies als Getallen Jan Martin Jansen.
Rijen en differentievergelijkingen met de TI-83/84-familie
-calculus.
Functies definiëren nDoor combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief.
Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”
Hogere-ordefuncties nVoeg de elementen van een lijst samen nCombineer twee functies foldr :: (a  b  b)  b  [a]  b [a] (.) :: (b  c)  (a  b)  a.
Een echte re stack-machine nMemory nRegisters R0 R1 R2 R3 R4 PC SP MP nMemory uProgram uStack uMemory nRegisters uProgr.counter uStack pointer uMark pointer.
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree.
Ontleden nNon-deterministisch m.b.v. Parser-combinators nDeterministisch m.b.v. Stack-machine type Parser a b = [a]  [ (b, [a]) ] type Parser a b = [a]
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
Werken aan Intergenerationele Samenwerking en Expertise.
Opleiding INFORMATICA Programmeertaal Implementatie Taal ontwerp Vertalen.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Tweedegraadsfuncties
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
Taal nEen Alfabet is… een eindige verzameling symbolen nEen Taal is… een deelverzameling van T* bij een bepaald alfabet T nEen Zin is… een element van.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
Samenvatting hst. 3 sec. 1-3 ( ) :: Parser a b  Parser a b  Parser a b ( ) :: Parser a (b  c)  Parser a b  Parser a c ( ) :: (b  c)  Parser a b.
Het gebruik van FP op een meeloopdag voor middelbare scholieren Paul de Mast.
Tentamen vraag 1 Als L en M talen zijn, dan nL  M is gelijk aan { s  t | s  L, t  M } nL M is gelijk aan { s t | s  L, t  M } nL n is gelijk aan.
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Definitie LL(1) Een grammatica is LL(1) nAls je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven Formeel: nAls de lookahead-sets.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
AWK A Pattern scanning and processing language made by Aho Weinberger Kernighan and explained by Albert Montijn.
In een reguliere taal… zin yxz S E A B vuwuwxzvuwxzvvuwxzvvvuwxzvvv lengte  n.
(S)DT Haskell Deel 2 list comprehensions, types en type klassen, programma transformatie, I/O.
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Tentamen vraag 1 nElke reguliere zin is ook contextvrij nElke reguliere taal is ook contextvrij nElke contextvrije grammatica is ook regulier nonsens “regulier”
eval (Add x y) = add (eval x) (eval y)
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Welkom! maandag 16 November 2015 Les B-2.
1 februari 2016 PHP expressie statement. 1 februari 2010 Titel van de presentatie 2 Boole logica? Definitie De booleaanse operatoren zijn genoemd naar.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Informatie beoordelen If else Switch En Wiskunde.
Recursie in de wiskunde
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Herhalingen
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
-calculus versus Scheme
Sharing.
TOP met iTasks 2.
Gameprogrammeren: Arrays
Transcript van de presentatie:

Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere Expressie nog een andere manier Alle drie kunnen ze dezelfde talen beschrijven

Reguliere talen: overzicht RG Definitie 8 +9 DFA Definitie 1 +3 NFA Definitie 4 +6 RE Definitie Stelling 13 Stelling 12 Stelling 7 triviaal ZRG Definitie (11) Stelling 11 triviaal CFG Definitie triviaal onmogelijk Stelling 16 Stelling 17

Drie reguliere talen S  a X |  X  c X | Y Y  b S |  L1 X Y b a c a S c L2 (a (c*) b)* L3 Publieksvraag: welke talen zijn gelijk aan elkaar?

Drie reguliere talen X Y b a c a S c L2 (a (c*) b)* L3 ac zit in L1, maar niet in L2 of L3 L2 en L3 beschrijven dezelfde taal (gebruik stelling 7+17) Geef een DFA en een reguliere expressie voor L1 Geef een reguliere grammatica voor L2 en L3 S  a X |  X  c X | Y Y  b S |  L1

Abu Ja'far Muhammad ibn Musa al-Khwarizmi al-Kitab al-mukhtasar fi Hisab al-jabr w’al-muqabala

Abu Ja'far Muhammad ibn Musa al-Khwarizmi al-Kitab al-mukhtasar fi Hisab al-jabr w’al-muqabala Liber algebrae et almucabala 1140 Algoritmi de numero Indorum uit Khiva het boekuitgebreidover rekenen herstellen vergelijken over het getal van de Indiërs boek

Recursieve functies op lijsten product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [ ]= and (x:xs)= True and xs x && sum :: [Int]  Int sum [ ]= sum (x:xs)= 0 sum xs x +

Generalisatie: “lijst-totalisator” foldr :: [a]  a foldr (#) e [ ] = foldr (#) e (x:xs)= e foldr (#) e xs x # (a  a  a)  a  zo combineren neutrale waarde

Specialisatie van de generalisatie nAls foldr de generalisatie is van sum, product, en and.... n.... dan zijn sum, product, en and speciale gevallen van foldr product= foldr (*) 1 and= foldr (&&) True sum= foldr (+) 0 or= foldr (||) False concat= foldr (++) [ ]

Zelfgemaakt datatype voor lijsten nMet functies data List a = Cons a (List a) | Nil som :: List Int  Int som (Cons x xs) = x + som xs som Nil = 0 and :: List Bool  Bool and (Cons x xs) = x && and xs and Nil = True length :: List a  Int length (Cons x xs) = 1 + length xs length Nil = 0 foldList :: List a  b foldList (c,n) (Cons x xs) = c x (foldList (c,n) xs) foldList (c,n) Nil = n abbabb (, )  b

Zelfgemaakt datatype voor bomen nMet functies data Tree a = Bin (Tree a) (Tree a) | Leaf a foldTree :: Tree a  b foldTree (b,lf) (Bin le ri) = b (foldTree (b,lf) le) (foldTree (b,lf) ri) foldTree (b,lf) (Leaf x) = lf x bbbbbb (, )  abab foldTree :: (b  b  b, a  b)  Tree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x

Functies op bomen nSpecialisaties: foldTree :: ( b  b  b, a  b )  Tree a  b countLeafs :: Tree a  Int countLeafs = foldTree ( (+), \x  1 ) sumLeafs :: Tree Int  Int sumLeafs = foldTree ( (+), \x  x ) listLeafs :: Tree a  [a] listLeafs = foldTree ( (++), \x  [x] )

De essentie van Tree-functies countLeafs :: Tree a  Int countLeafs = foldTree ( (+), \x  1 ) countLeafs :: Tree a  Int countLeafs = foldTree countLeafsFuns countLeafsFuns = ( (+), \x  1 ) countLeafsFuns :: ( Int  Int  Int, a  Int ) countLeafsFuns :: TreeAlgebra a Int type TreeAlgebra a b = ( b  b  b, a  b )

Tree, TreeAlgebra en functie foldTree data Tree a = Bin (Tree a) (Tree a) | Leaf a type TreeAlgebra a b = ( b  b  b, a  b ) foldTree :: TreeAlgebra a b  Tree a  b foldTree (b,lf) = f where f (Bin le ri) = b (f le) (f ri) f (Leaf x) = lf x

Voorbeelden van TreeAlgebra type TreeAlgebra a b = ( b  b  b, a  b ) countLeafsFuns :: TreeAlgebra a Int countLeafsFuns = ( (+), \x  1 ) sumLeafsFuns :: TreeAlgebra a Int sumLeafsFuns = ( (+), \x  x ) listLeafsFuns :: TreeAlgebra a [a] listLeafsFuns = ( (++), \x  [x] )

Definitie “een algebra” nEen algebra bestaat uit ueen type ufuncties in een tupel countLeafsFuns :: TreeAlgebra a Int countLeafsFuns = ( (+), \x  1 ) nEen algebra bestaat uit ueen type dat het resultaat is van een fold, die ufuncties in een tupel neerzet in plaats van constructorfuncties nEen algebra voor een datatype bestaat uit ueen type dat het resultaat is van een fold, die ufuncties in een tupel neerzet in plaats van constructorfuncties van dat datatype “carrier set” “semantiek”

Voorbeelden van algebras data Tree a = Bin (Tree a) (Tree a) | Leaf a type TreeAlgebra a b = ( b  b  b, a  b ) data List a = Cons a (List a) | Nil type ListAlgebra a b = ( a  b  b, b ) data Par = Match Par Par | Empty type ParAlgebra b = ( b  b  b, b )

Voorbeelden van algebras data Tree a = Bin (Tree a) (Tree a) | Leaf a type TreeAlgebra a b = ( b  b  b, a  b ) data Expr = Add Expr Expr | Mul Expr Expr | Con Int type ExprAlgebra b = ( b  b  b, b  b  b, Int  b ) data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b )

Gebruik van ExprAlgebra data Expr = Add Expr Expr | Mul Expr Expr | Con Int type ExprAlgebra b = ( b  b  b, b  b  b, Int  b ) evalExpr :: Expr  Int evalExpr = foldExpr evalExprAlgebra evalExprAlgebra :: ExprAlgebra Int evalExprAlgebra = ( (+), (*), id )

Definitie van foldExpr data Expr = Add Expr Expr | Mul Expr Expr | Con Int type ExprAlgebra b = ( b  b  b, b  b  b, Int  b ) foldExpr :: ExprAlgebra b  Expr  b foldExpr (a,m,c)= f where f (Add e1 e2)= a(f e1) (f e2) f (Mul e1 e2)= m(f e1) (f e2) f (Con n)= c n

Taal: syntax en semantiek “ * 5 ” Add (Con 3) (Mul (Con 4) (Con 5)) parseExpr evalExpr 23 = start p where p = … … … = fold a where a = (…,…,…,…)

Syntax en semantiek van expressies data Expr = Add Expr Expr | Mul Expr Expr | Con Int type ExprAlgebra b = ( b  b  b, b  b  b, Int  b ) data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b ) met variabelen “ * 5 ” “ * x ” Add (Con 3) (Mul (Con 4) (Con 5)) Add (Con 3) (Mul (Con 4) (Var “x”))

Uitrekenen van expressies met variabelen data Expr = Add Expr Expr | Mul Expr Expr | Con Int type ExprAlgebra b = ( b  b  b, b  b  b, Int  b ) evalExpr :: Expr  Int evalExpr = foldExpr evalExprAlgebra where evalExprAlgebra :: ExprAlgebra Int evalExprAlgebra = ( (+), (*), id ) data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b ), ???? ) evalExpr :: [(String,Int)]  Expr  Int evalExpr env = foldExpr evalExprAlgebra where evalExprAlgebra :: ExprAlgebra Int evalExprAlgebra = ( (+), (*), id, ???? ), (env ?) ) ((v,w):vws) ? q | v==q = w | otherwise = vws ? q

Syntax en semantiek van expressies data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b ) met definities “ * x ” “ * x where x=5*2 ” Add (Con 3) (Mul (Con 4) (Var “x”)) Def “x” (Mul (Con 5) (Con 2)) ( Add (Con 3) (Mul (Con 4) (Var “x”))) data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String | Def String Expr Expr type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b, String  b  b  b ) “ let x=5*2 in * x ”

Uitrekenen van expressies met definities evalExpr :: Env  Expr  Int evalExpr env = foldExpr evalExprAlgebra where evalExprAlgebra :: ExprAlgebra Int evalExprAlgebra = ( (+), (*), id, (env?) ) bind x d e = e data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b ), bind ) data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String | Def String Expr Expr type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b, String  b  b  b ) maar dan in een environment waarin x aan d gebonden is…

Uitrekenen van expressies, poging #2 data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b ) evalExpr :: Env  Expr  Int evalExpr env = foldExpr eAlgebra where eAlgebra :: ExprAlgebra Int eAlgebra = ( (+), (*), id, (env?) ) evalExpr :: Env  Expr  Int evalExpr env exp = foldExpr eAlgebra exp where eAlgebra :: ExprAlgebra Int eAlgebra = ( (+), (*), id, (env?) ) evalExpr :: Env  Expr  Int evalExpr env exp = foldExpr eAlgebra exp where eAlgebra :: ExprAlgebra Int eAlgebra = ( add, mul, con, var ) evalExpr :: Env  Expr  Int evalExpr env exp = foldExpr eAlgebra exp env where eAlgebra :: ExprAlgebra (Expr  Int) eAlgebra = ( add, mul, con, var ) evalExpr :: Expr  Env  Int evalExpr exp env = foldExpr eAlgebra exp env where eAlgebra :: ExprAlgebra (Expr  Int) eAlgebra = ( add, mul, con, var ) evalExpr :: Expr  Env  Int evalExpr = foldExpr eAlgebra where eAlgebra :: ExprAlgebra (Expr  Int) eAlgebra = ( add, mul, con, var ) (Env  Int)

Uitrekenen van expressies, poging #2 evalExpr :: Expr  Env  Int evalExpr = foldExpr evalExprAlgebra where evalExprAlgebra :: ExprAlgebra Int evalExprAlgebra = data Expr = Add Expr Expr | Mul Expr Expr | Con Int | Var String | Def String Expr Expr type ExprAlgebra b = ( b  b  b, b  b  b, Int  b, String  b, String  b  b  b ) (Env  Int) ( add, mul, con, var, def ) add :: b  b  b (Env  Int) Env  Int add f g e =f e + g e

Uitrekenen van expressies, poging #2 add :: b  b  b add f g e = f e + g e (Env  Int) Env  Int mul :: b  b  b (Env  Int) Env  Int con :: Int  b Env  Int var :: String  b Env  Int def :: String  b  b  b (Env  Int) Env  Int mul f g e =f e * g e con n e =n var x e =e ? x def x f g e =g e(x, )( : )f e con = const var = flip (?) def = ( )

Compositionaliteit nEen semantiek is compositioneel als de betekenis van een geheel een functie is van de betekenissen van de delen eval (Add x y) = add (eval x) (eval y)

Compositionaliteit nEen compositionele semantiek kun je schrijven als fold over de expressie waarbij een algebra vervangingen geeft voor de constructoren data Expr = … | … | … | … eval:: Expr  Int eval= foldExpr alg alg:: ExprAlgebra Int alg= ( …, …, …, … )