Grammatica’s en Ontleden
Waar gaat het eigenlijk over? Grammatica’s Ontleden Taal Bedenk een éénregelige definitie van taal, ontleden en grammatica Uitdaging:
Taal Een taal is… de verzameling van alle zinnen die “goed” zijn Omdat je ouders/ leraren dat zeiden Omdat de Académie Française dat vindt Omdat de compiler het pikt Omdat we dat zo hebben afgesproken
Ontleden Ontleden is… het herkennen van de structuur van een zin …Accolades… …puntkomma’s… …Expressies… …Onderwerp… …werkwoord… …Lijdend voorwerp… Correct Java! Ontleden is… het herkennen van de structuur van een zin …en daarmee aantonen dat hij tot een taal behoort Correct Nederlands!
Grammatica Regels die voorschrijven hoe het ontleden moet gebeuren
Zin Hoe mag een kandidaat-zin er uit zien? Rij symbolen! Wat is dat? Hoe mag een kandidaat-zin er uit zien? “class Hello extends Applet {public void paint (Graphics gr)…” “Dit lijkt me een goed voorbeeld.” “ATTCGACCGTTA” “0011010010101” “Isditeenzin?”
(in de Haskell-notatie) Sequence (Rij) Definitie van Sequence over X met X een willekeurig type: [ ] is een sequence over X Als x een element van X is, en xs een sequence over X is, dan is x:xs ook een sequence over X [X] (in de Haskell-notatie)
(in de wiskunde-notatie) Sequence (Rij) Inductieve definitie Definitie van Sequence over X met X een willekeurige verzameling: e is een sequence over X Als a een element van X is, en w een sequence over X is, dan is a w ook een sequence over X Niets anders is een sequence over X X* (in de wiskunde-notatie)
Taal Een Alfabet is… een eindige verzameling symbolen Een Taal is… een deelverzameling van T* bij een bepaald alfabet T Een Zin is… een element van een taal Een Zin van een taal is… een element van die taal
Hoe definieer je een taal? Alle elementen opsommen Inductieve definitie geven Een voorwaarde geven waaraan zinnen moeten voldoen { dit , is , alles } { a , b , c } * predicaat even getallen { n {0..9}* | n%2=0 } palindromen { s {a,b,c}* | s = sR }
Ontleden Bij een “opsom”-definitie van de taal: gewoon zoeken Bij een “inductieve” definitie van de taal: inductieve opbouw uitpluizen Bij een “predicatieve” definitie van de taal: predicaat controleren
Genereren Bij een “opsom”-definitie van de taal: ‘t zijn ze al… Bij een “inductieve” definitie van de taal: inductieve opbouw volgen Bij een “predicatieve” definitie van de taal: onmogelijk! (tenzij je alles probeert)
Liever inductief dan predicatief Zijn deze definities equivalent? Palindromen predicatief Palindromen inductief { s {a,b,c}* | s = sR } sound complete e is een palindroom a, b, en c zijn palindromen Als P en palindroom is dan zijn aPa , bPb en cPc het ook Niets anders is een palindroom
Inductieve definitie bevat herschrijfregels P e P a P b P c P aPa P bPb P cPc Genereren van zinnen: Begin met een P Pas naar believen de herschrijfregels toe Werk al het rood weg
Grammatica Een grammatica bestaat uit: Het alfabet Hulpsymbolen Productieregels Een startsymbool
Grammatica Een grammatica bestaat uit (T, N, R, S) Het alfabet T Hulpsymbolen N Productieregels R Een startsymbool S
Grammatica Een grammatica bestaat uit (T, N, R, S) Het alfabet T eindig Hulpsymbolen N eindig TN=Ø Productieregels R eindig Een startsymbool S één S N Met als elementen: A w waarbij A N w (NT)*
Vorm van de herschrijfregels A w Contextvrije grammatica waarbij A N w (NT)* Contextgevoelige grammatica A w waarbij A (NT)* w (NT)* (Rechts) reguliere grammatica A w waarbij A N w T* N T*
Afkorting-notatie Lang Kort P e | a | b | c | aPa | bPb | cPc P e P aPa P bPb P cPc
“Echt” Voorbeeld Contextvrije grammatica voor Java Stat Var = Expr | if (Expr) Stat else Stat | while (Expr) Stat Expr Const | Var | Expr Op Expr Op + | -