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]

Slides:



Advertisements
Verwante presentaties
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Advertisements

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.
SBR XBRL Formula Presentatie voor XBRL-NL 29 Mei 2012.
Hoofdstuk 6: Controle structuren
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 Lijstjes (Stacks & Queues) Onderwerp 7.
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.
1. Parsing (epsilon’s, tabellen) 2. Unificatie grammatica Natuurlijke taalverwerking week 7.
Inleidend probleem Data structuur (hiërarchie van classes)
AI91  Het Probleem  Grammatica’s  Transitie netwerken Leeswijzer: Hoofdstuk AI Kaleidoscoop College 9: Natuurlijke taal.
Functies als Getallen Jan Martin Jansen.
-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.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
Visual Basic.
ProblemenRedeneren met verstekwaarden Gesloten wereld CircumscriptieLogica met verstekwaarden Autoepistemis che logica Redeneren over kennis: herbekeken.
Statistische functies (aggregaatfuncties)
Parsing: Top-down en bottom-up
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.
ANother Tool for Language Recognition
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
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.
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”
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.
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.
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:
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
In een reguliere taal… zin yxz S E A B vuwuwxzvuwxzvvuwxzvvvuwxzvvv lengte  n.
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Grafentheorie Graaf Verzameling knopen al dan niet verbonden door takken, bijv:
Quality Management: METHODEN TECHNIEKEN PROCESVERBETERIN G
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
Waardeketen van Porter
Informatie beoordelen If else Switch En Wiskunde.
LPI 1.05 Marcel Nijenhof. Agenda ● Customize and use the shell environment ● Customize or write simple scripts ● SQL data management.
Waardeketen van Porter
Gameprogrammeren: Lists en interfaces
Gameprogrammeren: Keuzeopdrachten
Gameprogrammeren: Expressies
Gameprogrammeren: Herhalingen
Voorbeeld: Simulatie van bewegende deeltjes
Modelleren en Programmeren voor KI Practicumopdracht 4: SAT Solver
Moving objects in a geo-DBMS
Moving objects in a geo-DBMS
Informatie-analyse 1: Er zijn veel manieren om een database te vullen
Implementatie Zoekboom
Sharing.
Software Development fundamentals
Software Development fundamentals
TOP met iTasks 2.
Transcript van de presentatie:

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]  (b, [a]) Eén oplossing Mag ambigu zijn

Deterministisch ontleden …m.b.v. Stack-machine nLL-ontleden uLeft-to-right input processing uLeftmost derivation nLR-ontleden uLeft-to-right input processing uRightmost derivation “Top-down” ontleden “Botton-up” ontleden

Stackmachine voor LL-ontleden check :: String  Bool check input = run [’S’] input run :: Stack  String  Bool run [ ] [ ]= True run (a:as)(x:xs) | isT a && a==x = run as xs | isN a = run (rs++as) (x:xs) | otherwise= False where rs= select a x run _ _ = False

Kiezen van de regel bij LL-ontleden select a x = snd ( hd ( filter ok ( prods gram))) where ok = n==a && x  lahP gram p lahP

Grammatica voor expressies met + en * en () E  T E  T + E T  F T  F * T F  N F  ( E ) N  1 N  2 N  3 Linksfactoriseren (geen regels met gelijk beginstuk): E  T P P   P  + E T  F M M   M  * T F  N F  ( E ) N  1 N  2 N  3

Bepalen van empty, first, lookahead E  T P P   P  + E T  F M M   M  * T F  N F  ( E ) N  1 N  2 N  3 S  E # E  T P P   P  + E T  F M M   M  * T F  N F  ( E ) N  1 N  2 N  3 nee ja nee ja nee ( * follow(P) follow(M) first(E) first(T) first(F) first(N) + * ( ( ) # ) #

Stackmachine voor LR-ontleden check :: String  Bool check input = run [ ] input run :: Stack  String  Bool run [’S’] [ ]= True run [’S’] _= False run as(x:xs)= case aktie of Shift  run (x:as) xs Reduce a n  run (a:drop n as) (x:xs) Error  False where aktie = select’ as x

Kiezen van de regel bij LR-ontleden select’ as x | null items = Error | null redItems= Shift | otherwise= Reduce a (length rs) where items= dfa as redItems= filter red items (a, rs, _)= hd redItems dfa red

Items nEen item is een productieregel met daarin een “cursorpositie” Bijvoorbeeld productieregel: …geeft bestaansrecht aan deze items: F  ( E ) F  2 M   M 

Toestandsautomaat nConstructie van een NFA: utoestanden zijn Items bij de grammatica A     A    X  u…met toestandsovergangen: A   X   X Z   S ustarttoestand:  X    Voor elke regel X  

E  T +  E E  T  + E E  T + E  E   T + E S   E S  E  E   TE  T  T   NT  N  T   N * T T  N  * TT  N *  TT  N * T  T   ( E ) T  (  E ) T  ( E  ) T  ( E )  E  T E  T + E T  N T  N * T T  ( E ) S  E E  T E  T + E T  N T  N * T T  ( E )

Transformatie NFA  DFA nNieuwe toestanden: verzamelingen van oude toestanden nNieuwe overgangen: als er een overgang tussen een van de elementen uit de verzamelingen was

S   E E   T E   T + E T   ( E ) T   N * T T   N E  T + E  E  T +  E E   T E   T + E T   ( E ) T   N * T T   N E  T  E  T  + E T  N  * T T  N  T  N *  T T   ( E ) T   N * T T   N T  (  E ) E   T E   T + E T   ( E ) T   N * T T   N T  ( E  ) T  ( E )  T  N * T  S  E  E T N N N N T T ( E E ( ) (( + * T

Kiezen van de regel bij LR-ontleden select’ as x null items = Error null redItems= Shift otherwise= Reduce a (length rs) where items= dfa as redItems= filter red items (a, rs, _)= hd redItems dfa red red (a,r,c)= c == length r && x  follow a E  T  E  T  + E red: Cursor aan het eind

Stackmachine voor LR-ontleden run :: Stack  String  Bool run [’S’] [ ]= True run [’S’] _= error run as(x:xs)= case aktie of Shift  run (x:as) xs Reduce a n  run (a:drop n as) (x:xs) Error  error where aktie = select’ as x select’ as x = …… where items = dfa as …… Zonde van het werk om dfa steeds opnieuw uit te rekenen

Optimalisatie uitrekenen DFA nDFA wordt steeds uitgerekend op de symbolen in de stack nBewaar die waarde op de stack erbij

S   E E   T E   T + E T   ( E ) T   N * T T   N E  T + E  E  T +  E E   T E   T + E T   ( E ) T   N * T T   N E  T  E  T  + E T  N  * T T  N  T  N *  T T   ( E ) T   N * T T   N T  (  E ) E   T E   T + E T   ( E ) T   N * T T   N T  ( E  ) T  ( E )  T  N * T  S  E  E T N N N N T T ( E E ( ) (( + * S   E E   T E   T + E T   ( E ) T   N * T T   N E  T + E  E  T +  E E   T E   T + E T   ( E ) T   N * T T   N E  T  E  T  + E T  N  * T T  N  T  N *  T T   ( E ) T   N * T T   N T  (  E ) E   T E   T + E T   ( E ) T   N * T T   N T  ( E  ) T  ( E )  T  N * T  S  E  T*N(*NT*N(*N T

Optimalisatie uitrekenen DFA nDFA wordt steeds uitgerekend op de symbolen in de stack nBewaar die waarde op de stack erbij nBereken eenmalig twee tabellen: ugoto:: (Int, Nonterm)  Int uaction:: (Int, Term)  Action type Action = Shift Int | Reduce Nonterm Int | Error | Accept

Goto en Action tabellen ngoto(i,X) = j ij X naction(i,x) = Reduce a |r| a  r  i && x  follow a S  N  i naction(i,EOF) = Accept otherwisenaction(i,x) = Error a  a  x b i naction(i,x) = Shift j j

Soorten LR ontleden Zoals beschreven is alleen nog maar… nSLR: Simpel LR naction(i,x) = Reduce a |r| a  r  i && x  follow a Te royaal: followset onafhankelijk van de context nSLR reduceert (iets) te vaak

Van SLR naar LR nSLR item: Regel uit grammatica met cursor T  ( E  ) nLR item: idem, plus bijbehorende follow-set T  ( E  ) + )+ )

LALR Wordt in de praktijk het meest gebruikt (yacc, Bison, …) Van LR naar LALR nSLR (Simpel LR) nadeel: reduceert te vaak nLR: met contextafhankelijke followsets nadeel: DFA krijgt erg veel toestanden nLALR (Lookahead LR) compromis: uMerge DFA-toestanden waarvan de items alleen qua lookahead verschillen