1 / 25

Definitie LL(1)

Definitie LL(1). Een grammatica is LL(1) Als je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven. Formeel: Als de lookahead-sets van de alternatieven van elke nonterminal onderling disjunct zijn. S. N. . . x .

monita
Download Presentation

Definitie LL(1)

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. Definitie LL(1) Een grammatica is LL(1) • Als je op grond van het eerstvolgendeinput-symbool kunt kiezen uit alternatieven Formeel: • Als de lookahead-sets van dealternatieven van elke nonterminalonderling disjunct zijn

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

  3. S N N  x  x  Eigenschappen vanNonterminals … nodig om Lookahead-sets te bepalen • Empty(N) • First(N) • Follow(N) N* 

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

  5. Hoofdstuk 10: LL1 Parsers parse :: Gram s Parser s(Booms) Universele functie Universeel boomtype LL1 ontleden • Hoofdstuk 3: Parser Combinators symbol :: a Parser aa ( <|> ) :: Parser ab  Parser ab  Parser ab parseHaakjes :: Parser CharHaakjes parseExpr :: Parser CharExpr parseHaskTp :: Parser CharHaskTp

  6. [ s ] [ ] Universeel ontleden parse :: Gram s Parser s(Booms) Wat hebben we nodig? • type Gram • type Boom • Functies op Gram terms nonterms startsym prods lookahead empty first follow • Gegeneraliseerde ontleedfunctie gen :: Gram s  Parser s(Booms) s startsymbool

  7. ( ‘S’ , ) Type voor Grammatica’s type Prod s = (s, [s]) type Gram s = ( s, [Prod 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” ) ]

  8. Binaire bomen data Tree a = Bin (Tree a) (Tree a) | Leafa • Gelabelde Binaire bomen data Tree a = Bina(Tree a) (Tree a) | Leafa • Gelabelde Multi-splitsende bomen data Tree a = Nodea [ Tree a ] | Leafa Type voor Ontleedbomen

  9. 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

  10. Kan een NT epsilon genereren? empty :: Gram s s  Bool • Waar kan een zin mee beginnen? N firsts :: Gram s s  [s] firstsTab :: Gram s [(s , [s])] x  Functies voor eigenschappen van een grammatica • Is de grammatica LL1 ? isLL1 :: Gram s Bool

  11. S N   x  Functies voor eigenschappen van een grammatica • Wat zijn de lookahead-setsvan de producties ? lahP :: Gram s Prod s  [s]

  12. S De ontleed-functie parse gram = ( , )

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

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

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

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

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

  18. Bepalen van lookahead-setvan een productie • Lookahead-set van een productie: • Verenig de firsts van de rechterkant… • …en ga door zolang ze empty kunnen zijn • Bereik 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

  19. Bepalen van lookahead-setvan een productie • Lookahead-set van een productie: • Verenig de firsts van de rechterkant… • …en ga door zolang ze empty kunnen zijn • Bereik je het eind:neem dan ook de follow van jezelf • lahP (n,ys) = foldr f eind ys • where f y r = • eind = firsts y  if empty y then r else [ ] follow n

  20. In 0 stappen: • In 1 stap: • In 2 stappen: • In 3 stappen: • In 4 stappen: A A B A B S A B S Empty: kan een nonterminalepsilon genereren? S  A a S S  B S  C B A  S C A   B  A B  b C  D D d • Verandert niet meer, stop met zoeken

  21. Herhaal zolang er iets verandert fixed f xs | xs==ys = xs | otherwise = fixed f ys where ys = f xs • Begin met lege set empty gram = fixed (stap gram) [ ] Empty: kan een nonterminalepsilon genereren? S  A a SS  B S  C B A  S C A   B  A B  b C  D D d stap gram xs = (prods gram))) nub (map fst (filter (\(n,rs)  all (xs) rs)

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

  23. Firsts: wat kan een symboollinksonder genereren? • Herhaal zolang er iets verandert firsts gram = fixed (stap gram) (single gram) single gram = (symbols gram) map (\x  (x,[x])) stap gram ben = combine (single gram) (compose (first1 gram) ben ) first1 = …; compose = …; combine = …;

  24. S N N  x  x  Eigenschappen vanNonterminals … nodig om Lookahead-sets te bepalen • Empty(N) • First(N) • Follow(N) N* 

  25. Kan eindigen met non terminal Kan beginnen met terminal - ADC DC SABCD dba a dba d Follow: wat kan er volgenop 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 S a S B C

More Related