Kontextfreie Grammatiken

Motivation

Nicht reguläre Sprachen lassen sich nicht durch reguläre Ausdrücke ausdrücken.

Beispiele: Wohlgeformte Klammerausdrücke:

  • {(),(()),()(),((())),(())(),()()(),}\{(),(()),()(),((())),(())(),()()(), \ldots\}
  • {anbnn0}={ε,ab, aabb, aabbb ,} \left\{\mathrm{a}^{n} \mathrm{~b}^{n} \mid n \geq 0\right\}=\{\varepsilon, \mathrm{ab}, \text { aabb, aabbb }, \ldots\} 

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

{anbncnn0}={ε,abc,aabbcc, aaabbbccc ,} \left\{a^{n} b^{n} c^{n} \mid n \geq 0\right\}=\{\varepsilon, \text{abc}, \text{aabbcc}, \text { aaabbbccc }, \ldots\}  ist nicht kontextfrei

{www{a,b,c}} \left\{w w \mid w \in\{\mathrm{a}, \mathrm{b}, \mathrm{c}\}^{*}\right\}  ist nicht kontextfrei

Natürliche Sprachen

Kontext-Sensitive Sätze, Reime in natürlicher Sprache

Kontextfreie Grammatik

G=V,T,P,SG=\langle V, T, P, S\rangle

VVNon-Terminale (Variablen)

TTTerminal-Symbole

PV×(VT)P \subseteq V \times (V \cup T)^*Produktionen

Man schreibtAwA \rarr wstatt(A,w)P(A,w) \in P

SVS \in VStartsymbol

Ableitbarkeit \Rarr

Die Ableitungsregel beeinflusst nicht das Resultat.

Allgemein

Angenommen x,y(VT)x,y \in (V \cup T)^* :

xAyxwyx Ay \Rarr xwyfallsAwPA\rarr w \in P

uvu \stackrel{*}{\Rightarrow} vfalls

u=vu=voder

uuuv u \Rightarrow u^{\prime} \wedge u^{\prime} \stackrel{*}{\Rightarrow} v für einu(VT)u^{\prime} \in(V \cup T)^{*}

Links-Ableitbarkeit

Variable ganz links zuerst ersetzt.

xAyLxwyx A y \Rightarrow_{L} x w y wenn AwP,xTA \rightarrow w \in P, x \in T^{*}

Rechts-Ableitbarkeit

Variable ganz rechts zuerst ersetzt.

xAyRxwyx A y \Rightarrow_{R} x w y wenn AwP,yTA \rightarrow w \in P, y \in T^{*}

Parallel-Ableitbarkeit

x0A1x1AnxnPx0w1x1wnxn x_{0} A_{1} x_{1} \cdots A_{n} x_{n} \Rightarrow_{P} x_{0} w_{1} x_{1} \cdots w_{n} x_{n} 

wenn A1w1,,AnwnP A_{1} \rightarrow w_{1}, \ldots, A_{n} \rightarrow w_{n} \in P 

und x0,,xnTx_{0}, \ldots, x_{n} \in T^{*}

Kontextfreie Sprache L(G)\mathcal L(G)

Von GrammatikGGgenerierte Sprache

Quasi Menge aller mit der Grammatik ableitbaren Wörter.

L(G)={wTSw} \mathcal{L}(G)=\{w \in T^{*} \mid S \stackrel{*}{\Rightarrow} 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 G=\langle\{S\},\{\mathrm{a}, \mathrm{b}\},\{S \rightarrow \varepsilon \mid \mathrm{a} S \mathrm{b}\}, S\rangle 

L(G)={anbnn0}={ε, ab, aabb, aaabbb, } \mathcal{L}(G)=\left\{\mathrm{a}^{n} \mathrm{~b}^{n} \mid n \geq 0\right\}=\{\varepsilon, \text { ab, aabb, aaabbb, } \ldots\} 

zB SaabbS \stackrel{*}{\Rightarrow} \text {aabb} möglich weil

SaSbaaSbbaaεbb=aabb S \Rightarrow \mathrm{a} S \mathrm{~b} \Rightarrow \mathrm{aa} S \mathrm{bb} \Rightarrow \mathrm{aa} \varepsilon \mathrm{bb}=\mathrm{aabb} 

1) Backus-Naur-Form BNF

VV in Spitzen klammern \lang ~\dots ~\rang

TT unter Anführungszeichen “..."\text{``..."}

::=::= Für Zuweisungen

Reele Numerale

 Real := Digit  Digits  “."  Digits  Scale  \langle\text { Real }\rangle:=\langle\text { Digit }\rangle\langle\text { Digits }\rangle \text { ``." }\langle\text { Digits }\rangle\langle\text { Scale }\rangle 

 Digit := “0"  “9"  \langle\text { Digit }\rangle:=\text { ``0" }|\dots| \text { ``9" } 

 Digits ::=ε Digit  Digits  \langle\text { Digits }\rangle::=\varepsilon \mid\langle\text { Digit }\rangle\langle\text { Digits }\rangle 

 Scale ::=ε “E"  Sign  Digit  Digits  \langle\text { Scale }\rangle::=\varepsilon \mid \text { ``E" }\langle\text { Sign }\rangle\langle\text { Digit }\rangle\langle\text { Digits }\rangle 

Sign::=ε “+" | “-" \langle\operatorname{Sign}\rangle::=\left.\varepsilon~\right| \text { ``+" | ``-"} 

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)\left(w_i\right) 1 Mal wiw_i

{wi}\left\{w_i\right\} ≥0 Mal wiw_i

[wi]\left[w_i\right] 0-1 Mal wiw_i

3) (Rekursive) Syntaxdiagramme

Beispiele

Syntax aussagenlogischer Formeln

G={Fm,Op,Var},T,P,Fm G=\langle\{F m, O p, \operatorname{Var}\}, T, P, F m\rangle 

T={,,¬,(,),,,,,,≢,,}V T=\{\top, \perp, \neg,(,), \wedge, \uparrow, \vee, \downarrow, \equiv, \not \equiv, \supset, \subset\} \cup \mathcal{V} 

P={FmVar¬Fm(FmOpFm),Op≢VarABC} \begin{aligned}P=\{& F m \rightarrow \operatorname{Var}|\top| \perp|\neg F m|(F m O p F m), \\& O p \rightarrow \wedge|\uparrow| \vee|\downarrow| \equiv|\not \equiv| \supset \mid \subset \\& \operatorname{Var} \rightarrow \mathrm{A}|\mathrm{B}| \mathrm{C} \mid \cdots\}\end{aligned} 

Beispiel: ((AB)(AB))((A \uparrow B) \uparrow(A \uparrow B))

FmPP(FmOpFm)PP((FmOpFm)(FmOpFm))PP((VarVar)(VarVar))PP((AB)(AB)) \begin{aligned}F m & \Rightarrow_P P(F m O p F m) \\& \Rightarrow_P P((F m O p F m) \uparrow(F m O p F m)) \\& \Rightarrow_P P((\operatorname{Var} \uparrow \operatorname{Var}) \uparrow(\operatorname{Var} \uparrow V a r)) \\& \Rightarrow_P P((A \uparrow B) \uparrow(A \uparrow B))\end{aligned} 

Reele Numerale

G=V,T,P, Real G=\langle V, T, P, \text { Real }\rangle

V={ Real, Scale, Sign, Digits, Digit }V=\{\text { Real, Scale, Sign, Digits, Digit }\}

T={0,,9,.,E,+,}T=\{0, \ldots, 9, ., \mathrm{E},+,-\}

P={RealDigitDigits.DigitsScaleScaleεESignDigitDigitsSignε+DigitsεDigitDigitsDigit09} P =\{\\ \quad Real \rightarrow Digit ~ Digits . Digits ~ Scale \\ \quad Scale \rightarrow \varepsilon \mid E ~ Sign ~ Digit ~Digits \\\quad \operatorname{Sign} \rightarrow \varepsilon|+|- \\\quad Digits \rightarrow \varepsilon \mid Digit ~Digits \\\quad Digit \rightarrow 0|\cdots| 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 G=\langle\{W\}, \quad\{(,)\}, \quad\{W \rightarrow \varepsilon|(W)| W W\}, \quad W\rangle 

L(G)={ε,(),(()),()(),((())),(())(),()(()),()()(),} \mathcal{L}(G)=\{\varepsilon,(),(()),()(),((())),(())(),()(()),()()(), \ldots\} 

Beispiel:

WPPWWPP(W)(W)PP()(WW)PP()((W)(W))PP()(()()) \begin{aligned}W & \Rightarrow_P P W W \\& \Rightarrow_P P(W)(W) \\& \Rightarrow_P P()(W W) \\& \Rightarrow_P P()((W)(W)) \\& \Rightarrow_P P()(()())\end{aligned}