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.

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Advertisements

Een paar programma’s met een aantal basisprincipes.
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.
Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
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.
Datastructuren Zoekbomen
Grammatica’s en Ontleden
Grammaticale modellen
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.
De koektrommel of de grabbelton
Categoriale Grammatica
AI91  Het Probleem  Grammatica’s  Transitie netwerken Leeswijzer: Hoofdstuk AI Kaleidoscoop College 9: Natuurlijke taal.
Functies als Getallen Jan Martin Jansen.
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
-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.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
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]
Parsing: Top-down en bottom-up
ANother Tool for Language Recognition
06/032003Tom Van Damme Bomen in LOGO. 06/032003Tom Van Damme Wat is een boom? Bomen als hiërarchische gegevensstructuur Wereld Gent België Brussel China.
De weegschaal methode Een goede methode om vergelijkingen mee op te lossen Klik linksonder op deze knop om presentatie te starten. volgende VMBO - Wiskunde.
Three steps to success Foutloos zinnen vertalen in drie stappen
Hoofdstuk 1 Roosterpapier, hoekpunten, zijden, diagonalen
Russische roulette Live or die. 7 delen Startmenu Inzet Aantal kogels Het schot While - functie Opnieuw ja/nee High score.
Maak uw eigen film in drie gemakkelijke stappen
Starten met PHP Dynamischer bouwen. PHP is een een scripttaal waarmee de server pagina’s in elkaar kunt laten zetten. Het verschil met HTML: Een php pagina.
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.
Modelleren van XML element content of Hoe doe je dat? Harrie Passier & Bastiaan Heeren TouW-dag 13 november 2010.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
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.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
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.
Parsing 1. Situering Contextvrije grammatica’s Predictive (of recursive-descent) parsing LR-parsing Parser generator: Yacc Error recovery 2.
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.
Coordinaten: Tom Tourwé 10F729 Tel: 3492 Organisatie van de oefeningen: * 1 uur bespreking van oplossing vorige les + bespreking opgave.
In een reguliere taal… zin yxz S E A B vuwuwxzvuwxzvvuwxzvvvuwxzvvv lengte  n.
(S)DT Haskell Functioneel programmeren.
(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)
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Module Grammatica K3 zinsontleding.
Module Grammatica K3 zinsontleding.
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)
Via TEGELS | ZETTEN is de tegel Browser te openen. ( B )
Zelf een ruimte tekenen. Rechtsklik op een getal tussen de + en – – Pas de stap aan Of type de gewenste maat in en bevestig met enter of ga naar een.
Inleiding Zonder stemkastjes toch een stemkastjesles houden? Dat kan heel simpel met deze PowerPoint. Hierna volgen de stappen. Over 5 minuten kunt u uw.
Training: Cliëntsessies
Recursie in de wiskunde
5 tips om eenvoudiger te werken
Training: Cliëntsessies
Gehele getallen optellen en aftrekken
Implementatie Zoekboom
Eigenschappen van vierhoeken
Gebruik van het nieuwe scorebord
Nim, een strategisch spelletje
Sharing.
Voorkennis Wiskunde Les 11 Hoofdstuk 5: §5.3 en §5.4.
Eigenschappen van het optellen en het vermenigvuldigen van rationale getallen © André Snijers.
Transcript van de presentatie:

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 van de alternatieven van elke nonterminal onderling disjunct zijn

Definitie Lookaheadset van alternatief N  S  x  N  { x | S  *  N     *  x  } Lah(N  x  ) = {x} Lah(N  P  ) = ……

Eigenschappen van Nonterminals … nodig om Lookahead-sets te bepalen nEmpty(N) nFirst(N) nFollow(N) N  *  S  x  N N

LL1 ontleden nHoofdstuk 3: Parser Combinators type Parser a b = [a]  [ (b, [a]) ] nHoofdstuk 10: LL1 Parsers type Parser a b = [a]  (b, [a]) Mag ambigu zijn Eén oplossing

LL1 ontleden nHoofdstuk 3: Parser Combinators parseHaakjes:: Parser Char Haakjes parseExpr:: Parser Char Expr parseHaskTp:: Parser Char HaskTp symbol :: a  Parser a a ( ) :: Parser a b  Parser a b  Parser a b nHoofdstuk 10: LL1 Parsers parse:: Gram s  Parser s (Boom s) Universele functie Universeel boomtype

Universeel ontleden Wat hebben we nodig? ntype Gram ntype Boom nFuncties op Gram parse:: Gram s  Parser s (Boom s) gen:: Gram s   Parser s (Boom s) s nGegeneraliseerde ontleedfunctie terms nonterms startsym prods lookahead empty first follow [ s ][] startsymbool

Type voor Grammatica’s S  A a S | B | C B A  S C |  B  A | b C  D D  d S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d [ ( ‘S’, “A a S”), ( ‘S’, “B” ), ( ‘S’, “C B” ), ( ‘A’, “S C” ), ( ‘A’, “” ), ( ‘B’, “A” ), ( ‘B’, “b” ), ( ‘C’, “D” ), ( ‘D’, “d” ) ] ( ‘S’, ) type Prod s = (s, [s]) type Gram s = ( s, [Prod s] )

Type voor Ontleedbomen nBinaire bomen data Tree a = Bin (Tree a) (Tree a) | Leaf a nGelabelde Binaire bomen data Tree a = Bin a (Tree a) (Tree a) | Leaf a nGelabelde Multi-splitsende bomen data Tree a = Node a [ Tree a ] | Leaf a

Functies op grammatica’s ( ‘S’, [ ( ‘S’, “A a S”), ( ‘S’, “B” ), ( ‘S’, “C B” ), ( ‘A’, “S C” ), ( ‘A’, “” ), ( ‘B’, “A” ), ( ‘B’, “b” ), ( ‘C’, “D” ), ( ‘D’, “d” ) ] ) start :: Gram s  s start = fst prods :: Gram s  [Prod s] prods = snd nonts :: Gram s  [s] nonts = nub. map fst. prods terms :: Gram s  [s] terms = nub. filter isT. concat. map snd. prods

Functies voor eigenschappen van een grammatica nIs de grammatica LL1 ? isLL1 :: Gram s  Bool nKan een NT epsilon genereren? empty :: Gram s  s  Bool x  N nWaar kan een zin mee beginnen? firsts :: Gram s  s  [s] firstsTab :: Gram s  [(s, [s])]

Functies voor eigenschappen van een grammatica nWat zijn de lookahead-sets van de producties ? lahP :: Gram s  Prod s  [s] S  x  N 

De ontleed-functie S parse gram = (, )

De ontleed-functie [,,, ] A B x A x ABA genParse gram = (, ) parse gram input | isLL1 gram = (t, rest) where ([t],rest) = genParse gram [start gram] input | otherwise = error

De ontleed-functie [,,, ] A B x A x ABA genParse gram = (, ) genParse gram [ ] in = ( [ ], in ) genParse gram (a:as) | isT a && a==x= (t:ts, uit) wheret= Node a [ ] (ts,uit)= genParse gram as xs

De ontleed-functie [,,, ] A B x A x ABA genParse gram = (, ) genParse gram (a:as) | isN a = (t:ts, uit) wheret= Node a ks (ks,door)= genParse gram rs in (ts,uit)= genParse gram as door rs A

Welke productie kiezen? where rs = snd ( hd ( filter ok (prods gram))) genParse gram (a:as) | isN a = (t:ts, uit) wheret= Node a ks (ks,door)= genParse gram rs in (ts,uit)= genParse gram as door rs ok = n==a && x  lahP gram p

Bepalen van lookahead-set van een productie S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d lahP (D  d) = {d} lahP (C  D) = firsts D lahP (S  AaS) = firsts A  {a} {a} lahP (A  SC) = firsts S  firsts C lahP (B  A) = firsts A  follow B empty A empty S

Bepalen van lookahead-set van een productie nLookahead-set van een productie: uVerenig de firsts van de rechterkant… u…en ga door zolang ze empty kunnen zijn uBereik je het eind: neem dan ook de follow van jezelf lahP (S  ABCDE) = firsts A  firsts B  firsts C  firsts D  firsts E  follow S

Bepalen van lookahead-set van een productie nLookahead-set van een productie: uVerenig de firsts van de rechterkant… u…en ga door zolang ze empty kunnen zijn uBereik je het eind: neem dan ook de follow van jezelf lahP (n,ys) = foldr f eind ys wheref y r = eind = firsts y  follow n if empty y then r else [ ]

Empty: kan een nonterminal epsilon genereren? S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d nIn 0 stappen: A nIn 1 stap: A B nIn 2 stappen: A B S nIn 3 stappen: A B S nIn 4 stappen: nVerandert niet meer, stop met zoeken

Empty: kan een nonterminal epsilon genereren? S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d nHerhaal zolang er iets verandert fixed f xs| xs==ys= xs | otherwise= fixed f ys where ys = f xs nBegin met lege set empty gram = fixed (stap gram) [ ] stap gram xs = (prods gram))) (filter (\(n,rs)  all (  xs) rs) (map fstnub

Firsts: wat kan een symbool linksonder genereren? S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d x  N In 0 stap: SABCDabdSABCDabd ABC S Ab D d In 1 stap: SABC AS BAb CD Dd a b d In 0/1 stap: SABCDb SABC SAb Dd d In 1/2 stap: SABCDabdSABCDabd SABCDb SABC SABb CDd Dd a b d In 0/1/2 stap: nHerhaal zolang er iets verandert!

Firsts: wat kan een symbool linksonder genereren? nHerhaal zolang er iets verandert firsts gram = fixed (stap gram) (single gram) stap gram ben = single gram = (symbols gram) map (\x  (x,[x])) (first1 gram)(composeben ) (single gram) combine first1 = …; compose = …; combine = …;

Eigenschappen van Nonterminals … nodig om Lookahead-sets te bepalen nEmpty(N) nFirst(N) nFollow(N) N  *  S  x  N N

Follow: wat kan er volgen op een nonterminal? S  A a S S  B S  C B A  S C A   B  A B  b C  D D  d S  A a S S  C B A  S C A a A C S a S B C Kan beginnen met terminal dba a dba d Kan eindigen met non terminal - ADC DC SABCD