Taal

advertisement
Talen en Compilers
Waar gaat het eigenlijk over?
!!Grammatica’s
!!Ontleden
!!Taal
Uitdaging:
Bedenk een éénregelige definitie
van taal, ontleden en grammatica
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
Compiler
!! Een compiler vertaalt zinnen uit een taal
naar een andere taal
!!Bij die vertaling voert een compiler nog
verschillende andere zaken uit
Ontleden
…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
Wat is dat?
Rij symbolen!
Wat is dat?
!!Hoe mag een kandidaat-zin er uit zien?
“Dit lijkt me een
goed
voorbeeld.”
“class Hello extends Applet
{public void paint
(Graphics gr)…”
“ATTCGACCGTTA”
“0011010010101”
“!"#$%&&'($')”
Sequence (Rij)
Definitie van [X] 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
(in de Haskell-notatie)
Sequence (Rij)
Definitie van X* Sequence over X
met X een willekeurige verzameling: Inductieve
definitie
!! ! 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
(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…
van een taal is…
een element van die
eentaal
taal
Hoe definieer je een taal?
!!Alle elementen opsommen
{ dit , is , alles }
!!Inductieve definitie geven
{a,b,c}*
predicaat geven waaraan
!!Een voorwaarde
zinnen moeten voldoen
{ n " {0..9}* | n%2=0 }
{ s " {a,b,c}* | s = sR }
even getallen
palindromen
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
{ s " {a,b,c}* | s = sR }
!!Palindromen inductief
sound
'! ! 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
complete
Inductieve definitie
bevat herschrijfregels
'!
'!
'!
'!
'!
'!
'!
P#!
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 T$N=Ø
!!Productieregels
R
eindig
!!Een startsymbool S
één
S"N
Met als elementen:
A#w
waarbij A " N
w " (N%T)*
Vorm van de herschrijfregels
!!Contextvrije
grammatica
A#w
waarbij A " N
w " (N%T)*
!!Contextgevoelige
A#w
grammatica
waarbij A " (N%T)*
w " (N%T)*
!!(Rechts) reguliere
A#w
grammatica
waarbij A " N
w " T* N % T*
Afkorting-notatie
!!Lang
'!
'!
'!
'!
'!
'!
'!
P#!
P#a
P#b
P#c
P # aPa
P # bPb
P # cPc
!!Kort
'! P # ! | a | b | c |
aPa | bPb | 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 # + | -
Download