Motivation
Nicht reguläre Sprachen
lassen sich nicht durch reguläre Ausdrücke ausdrücken.
Beispiele: Wohlgeformte Klammerausdrücke:
- {(),(()),()(),((())),(())(),()()(),…}
- {anbn∣n≥0}={ε,ab, aabb, aabbb ,…}
Formale Sprache ist kontextfrei, wenn sie von kontextfreier Grammatik generiert werden kann.
Reguläre Sprache lässt sich durch kontextfreie Sprache ausdrücken aber nicht umgekehrt.
Dinge die nicht ausgedrückt werden können:
Formale Sprachen
{anbncn∣n≥0}={ε,abc,aabbcc, aaabbbccc ,…}
ist nicht kontextfrei
{ww∣w∈{a,b,c}∗}
ist nicht kontextfrei
Natürliche Sprachen
Kontext-Sensitive Sätze, Reime in natürlicher Sprache
Kontextfreie Grammatik
G=⟨V,T,P,S⟩
VNon-Terminale (Variablen)
TTerminal-Symbole
P⊆V×(V∪T)∗Produktionen
Man schreibtA→wstatt(A,w)∈P
S∈VStartsymbol
Ableitbarkeit
⇒
Die Ableitungsregel beeinflusst nicht das Resultat.
Allgemein
Angenommen
x,y∈(V∪T)∗
:
xAy⇒xwyfallsA→w∈P
u⇒∗vfalls
u=voder
u⇒u′∧u′⇒∗vfür einu′∈(V∪T)∗
Links-Ableitbarkeit
Variable ganz links zuerst ersetzt.
xAy⇒Lxwy
wenn
A→w∈P,x∈T∗
Rechts-Ableitbarkeit
Variable ganz rechts zuerst ersetzt.
xAy⇒Rxwy
wenn
A→w∈P,y∈T∗
Parallel-Ableitbarkeit
x0A1x1⋯Anxn⇒Px0w1x1⋯wnxn
wenn
A1→w1,…,An→wn∈P
und
x0,…,xn∈T∗
Kontextfreie Sprache
L(G)
Von GrammatikGgenerierte Sprache
Quasi Menge aller mit der Grammatik ableitbaren Wörter.
L(G)={w∈T∗∣S⇒∗w}
Alle Wörter aus Terminal-Verknüpfungen bei denen ein Startsymbol nach Ableitung zu einem gültigen Wort führt.
Beispiel:
G=⟨{S},{a,b},{S→ε∣aSb},S⟩
L(G)={anbn∣n≥0}={ε, ab, aabb, aaabbb, …}
zB
S⇒∗aabb
möglich weil
S⇒aSb⇒aaSbb⇒aaεbb=aabb
1) Backus-Naur-Form BNF
V
in Spitzen klammern
⟨…⟩
T
unter Anführungszeichen
“..."
::=
Für Zuweisungen
Reele Numerale
⟨ Real ⟩:=⟨ Digit ⟩⟨ Digits ⟩ “." ⟨ Digits ⟩⟨ Scale ⟩
⟨ Digit ⟩:= “0" ∣…∣ “9"
⟨ Digits ⟩::=ε∣⟨ Digit ⟩⟨ Digits ⟩
⟨ Scale ⟩::=ε∣ “E" ⟨ Sign ⟩⟨ Digit ⟩⟨ Digits ⟩
⟨Sign⟩::=ε∣ “+" | “-"
2) Erweiterte Backus-Naur-Form EBNF
Vorteile der BNF:
Keine Angabe von Terminalen und Nonterminalen sowie Anfangsterminalen mehr notwendig weil es sich von der Notation selbst ablesen lässt.
Man gibt nur noch die Produktionen an.
Vorteile derEBNF(verglichen zur BNF):
Leichtere Syntax ohne
(<, >, ::=)
indem zwischen Terminalen und Nonterminalen mit
""
differenziert wird.
Abkürzungen aus regulären Ausdrücken übernommen wie
(), [], {}, ?
.
Regular Right Part Grammar (RRPG)
Man benutzt nur
""
und die folgenden Klammern: Vermeidung von Rekursionen und Leerwörtern
(wi)
1 Mal
wi
{wi}
≥0 Mal
wi
[wi]
0-1 Mal
wi
3) (Rekursive) Syntaxdiagramme
Beispiele
Syntax aussagenlogischer Formeln
G=⟨{Fm,Op,Var},T,P,Fm⟩
T={⊤,⊥,¬,(,),∧,↑,∨,↓,≡,≡,⊃,⊂}∪V
P={Fm→Var∣⊤∣⊥∣¬Fm∣(FmOpFm),Op→∧∣↑∣∨∣↓∣≡∣≡∣⊃∣⊂Var→A∣B∣C∣⋯}
Beispiel:
((A↑B)↑(A↑B))
Fm⇒
P
P(FmOpFm)⇒
P
P((FmOpFm)↑(FmOpFm))⇒
P
P((Var↑Var)↑(Var↑Var))⇒
P
P((A↑B)↑(A↑B))
Reele Numerale
G=⟨V,T,P, Real ⟩
V={ Real, Scale, Sign, Digits, Digit }
T={0,…,9,.,E,+,−}
P={Real→DigitDigits.DigitsScaleScale→ε∣ESignDigitDigitsSign→ε∣+∣−Digits→ε∣DigitDigitsDigit→0∣⋯∣9}
Wohlgeformte Klammerausdrücke
Sie sind die Stärke der kontextfreien Grammatik die sie vor allem von regulären Sprachen unterscheidet.
G=⟨{W},{(,)},{W→ε∣(W)∣WW},W⟩
L(G)={ε,(),(()),()(),((())),(())(),()(()),()()(),…}
Beispiel:
W⇒
P
PWW⇒
P
P(W)(W)⇒
P
P()(WW)⇒
P
P()((W)(W))⇒
P
P()(()())