Title: Definitie LL(1)
1Definitie LL(1)
- Een grammatica is LL(1)
- Als je op grond van het eerstvolgendeinput-symboo
l kunt kiezen uit alternatieven
- Formeel
- Als de lookahead-sets van dealternatieven van
elke nonterminalonderling disjunct zijn
2Definitie Lookaheadset van alternatief N??
3Eigenschappen vanNonterminals
- nodig om Lookahead-sets te bepalen
- Empty(N)
- First(N)
- Follow(N)
N ? ?
4LL1 ontleden
- Hoofdstuk 3 Parser Combinators
type Parser a b a ? (b, a)
5LL1 ontleden
- Hoofdstuk 3 Parser Combinators
symbol a ? Parser a a ( ltgt ) Parser a b
? Parser a b ? Parser a b
parseHaakjes Parser Char Haakjes parseExpr
Parser Char Expr parseHaskTp Parser Char HaskTp
6Universeel ontleden
parse Gram s ? Parser s (Boom s)
- 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 (Boom s)
s
startsymbool
7Type voor Grammaticas
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 )
8Type voor Ontleedbomen
9Functies op grammaticas
( 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
10Functies voor eigenschappen van een grammatica
isLL1 Gram s ? Bool
11Functies voor eigenschappen van een grammatica
- Wat zijn de lookahead-setsvan de producties ?
lahP Gram s ? Prod s ? s
12De ontleed-functie
parse gram
( , )
13De ontleed-functie
genParse gram
( , )
parse gram input isLL1 gram (t,
rest) where (t,rest) genParse gram
start gram input otherwise
error
14De ontleed-functie
genParse gram
( , )
genParse gram in ( , in
) genParse gram (aas) in_at_(xxs) isT a
ax (tts, uit) where t Node a
(ts,uit) genParse gram as xs
15De ontleed-functie
genParse gram
( , )
genParse gram (aas) in_at_(xxs) isN a
(tts, uit) where t Node a ks (ks,door)
genParse gram rs in (ts,uit) genParse gram
as door
rs
16Welke productie kiezen?
genParse gram (aas) in_at_(xxs) isN a
(tts, 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_at_(n,_) na x ? lahP gram
p
17Bepalen 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
18Bepalen 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 eindneem dan ook de follow van
jezelf
lahP (S?ABCDE) firsts A ? firsts B ? firsts C
? firsts D ? firsts E
? follow S
19Bepalen 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 eindneem 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
20Empty 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
21Empty 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)))
(map fst
nub
(filter (\(n,rs) ? all (?xs) rs)
22Firsts 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
23Firsts 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)
(first1 gram)
(compose
ben )
first1 compose combine
24Eigenschappen vanNonterminals
- nodig om Lookahead-sets te bepalen
- Empty(N)
- First(N)
- Follow(N)
N ? ?
25Follow 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