De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

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.

Verwante presentaties


Presentatie over: "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."— Transcript van de presentatie:

1 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

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

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

4 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

5 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

6 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

7 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] )

8 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

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 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])]

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

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

13 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

14 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

15 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

16 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

17 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

18 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

19 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 [ ]

20 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

21 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

22 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!

23 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 = …;

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

25 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


Download ppt "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."

Verwante presentaties


Ads door Google