Commit d134275b authored by Niklas Rieken's avatar Niklas Rieken
Browse files

finished Ableitungsbäume

parent d183f5a5
\begin{tikzpicture}
\node[circle] (A) at (0, 0) {$A$};
\node (a00) at (-6, -1.5) {$a_{00}$};
\node (d0) at (-5, -1.5) {$\cdots$};
\node (a0l) at (-4, -1.5) {$a_{0\ell_0-1}$};
\node (B1) at (-3, -1.5) {$B_1$};
\node (a10) at (-2, -1.5) {$a_{10}$};
\node (d1) at (-1, -1.5) {$\cdots$};
\node (a1l) at (0, -1.5) {$a_{1\ell_1-1}$};
\node (B2) at (1, -1.5) {$B_2$};
\node (dd) at (2, -1.5) {$\cdots$};
\node (Bk) at (3, -1.5) {$B_k$};
\node (ak0) at (4, -1.5) {$a_{k0}$};
\node (dk) at (5, -1.5) {$\cdots$};
\node (akl) at (6, -1.5) {$a_{k\ell_k-1}$};
\draw[-] (A) -- (a00);
\draw[-] (A) -- (a0l);
\draw[-] (A) -- (B1);
\draw[-] (A) -- (a10);
\draw[-] (A) -- (a1l);
\draw[-] (A) -- (B2);
\draw[-] (A) -- (ak0);
\draw[-] (A) -- (akl);
\draw[-] (A) -- (Bk);
\draw[-] (B1) -- +(-.9, -2) -- node[below]{$\beta_1$} +(.9, -2) -- (B1);
\draw[-] (B2) -- +(-.9, -2) -- node[below]{$\beta_2$} +(.9, -2) -- (B2);
\draw[-] (Bk) -- +(-.9, -2) -- node[below]{$\beta_k$} +(.9, -2) -- (Bk);
\end{tikzpicture}
\begin{tikzpicture}
\node (T1) at (0, -2.3) {$T_1$};
\node (r1) at (0, -1) {$r_1$};
\node (T2) at (3.5, -2.3) {$T_2$};
\node (r2) at (3.5, -1) {$r_2$};
\node (u) at (.5, -3) {$u$};
\draw[-] (r1) -- +(-1.5, -2) -- (u) -- +(1.5, 0) -- (r1);
\draw[-] (r2) -- +(-1, -2) -- +(1, -2) -- (r2);
\node (join) at (5.5, -2.5) {$\leadsto$};
\node (r) at (8, 0) {$r_1$};
\node (TT1) at (8, -1.3) {$T_1$};
\node (TT2) at (8.5, -3.3) {$T_2$};
\node (uu) at (8.5, -2) {$u$};
\draw[-] (r) -- +(-1.5, -2) -- (uu) -- +(1.5, 0) -- (r);
\draw[-] (uu) -- +(-1, -2) -- +(1, -2) -- (uu);
\end{tikzpicture}
No preview for this file type
......@@ -2634,7 +2634,7 @@ Falls wir auf die Länge von Ableitungen eingehen möchten, schreiben wir $\alph
\end{example}
Wir zeigen nun zwei einfache Eigenschaften von Ableitungen.
\begin{lemma}[Kombinationslemma]
\begin{lemma}[Kombinationslemma]\label{lem:combination}
Sei $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik. Seien $\alpha, \beta, \gamma, \delta \in (N \cup \Sigma)^\ast$ und $A \in N$, sodass
$$ \alpha \to^\ast \beta A \delta \text{ und } A \to^\ast \gamma.$$
Dann gilt auch $\alpha \to^\ast \beta\gamma\delta$.
......@@ -2647,7 +2647,7 @@ Wir zeigen nun zwei einfache Eigenschaften von Ableitungen.
\end{proof}
\end{lemma}
\begin{lemma}[Zerlegungslemma]
\begin{lemma}[Zerlegungslemma]\label{lem:decomposition}
Sein $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik und $n \in \mathbb{N}$. Seien $\alpha_1, \alpha_2, \beta \in (N \cup \Sigma)^\ast$ mit $\alpha_1\alpha_2 \to^n \beta$. Dann gibt es eine Zerlegung $\beta = \beta_1\beta_2$, sodass
$$
\alpha_1 \to^{[n+1]} \beta_1 \text{ und } \alpha_2 \to^{[n+1]} \beta_2.
......@@ -2886,10 +2886,14 @@ Wir geben eine formale Definition für einen Ableitungsbaum.
\end{itemize}
\end{definition}
Intuitiv bezeichnet $ui$ das \emph{$i$-te Kind} des Knoten $u$, analog ist $u$ der \emph{Elternknoten} für jedes $ui$. Wir sagen $\varepsilon$ ist die \emph{Wurzel} des Baumes. Knoten $u \in V$ zu denen kein $u1$ mehr existiert in $V$ heißen \emph{Blätter}, alle anderen Knoten sind \emph{innere Knoten}.
Ein \emph{Ast} (der Länge $k$) in $T$ ist eine Knotenfolge $(v_0, v_1, \ldots, v_k)$ mit $v_0 = \varepsilon$, $v_{i+1}$ für $i \in [k]$ jeweils Nachfolger von $v_i$ und $v_k$ ist Blatt. Die \emph{Höhe} eines Baumes ist gegeben durch, die Länge eines längsten Astes. Dies kann ausgegdrückt werden durch die Länge eines längsten Knotennamens.
$$
h(T) \coloneqq \max \{|v| \mid v \in V\}.
$$
\begin{definition}
Ein \emph{Baumbereich} in einem Baum ist eine Menge $D \subseteq V$, die abgeschlossen ist unter Präfixbildung und jeweils für $ui \in D$ auch alle $uj$ mit $1 \leq j \leq i$ enthält. Ein Baum heißt \emph{höchstens $k$-verzweigt}, falls $V \subseteq \{1, \ldots, k\}^\ast$.
\end{definition}
Ein Ableitungsbaum zu einer kontextfreien Grammatik $\mathcal{G} = (N, \Sigma, P, S)$ ist dann ein Baum $T = (V, E, \lambda)$, bei dem sich die Beschriftungsfunktion $\lambda$ mit den Produktionen in $P$ verträgt, d.h. für jeden Knoten $u$ mit $\lambda(u) = A$ und Kanten $(u, u1), \ldots, (u, uk) \in E$ existiert eine Regel $A \to \lambda(u1) \ldots \lambda(uk) \in P$. Für einen Ableitungsbaum $T$ mit Blättern $b_0, \ldots, b_{n-1}$ (in richtiger Reihenfolge) bezeichnet $\beta(T) = \lambda(b_0) \ldots \lambda(b_{n-1})$ die \emph{Baumbeschriftung} von $T$.
Ein \emph{Ableitungsbaum} (engl.: \emph{parse tree}) zu einer kontextfreien Grammatik $\mathcal{G} = (N, \Sigma, P, S)$ ist dann ein Baum $T = (V, E, \lambda)$, bei dem sich die Beschriftungsfunktion $\lambda$ mit den Produktionen in $P$ verträgt, d.h. für jeden Knoten $u$ mit $\lambda(u) = A$ und Kanten $(u, u1), \ldots, (u, uk) \in E$ existiert eine Regel $A \to \lambda(u1) \ldots \lambda(uk) \in P$. Für einen Ableitungsbaum $T$ mit Blättern $b_0, \ldots, b_{n-1}$ (in richtiger Reihenfolge) bezeichnet $\beta(T) = \lambda(b_0) \ldots \lambda(b_{n-1})$ die \emph{Baumbeschriftung} von $T$.
Wir geben Ableitungsbäume gewöhnlich nur graphisch an. Dabei verwenden wir keine Pfeile an den Kanten; die Orientierung ist implizit \emph{von oben nach unten} gegeben. Außerdem wird in der graphischen Darstellung auf die Namen der Knoten verzichtet und nur ihre Beschriftung angegeben. Die Reihenfolge ist ebenfalls implizit von \emph{links nach rechts} gegeben. In Abbildung~\ref{fig:explicitderivativetree} wird dies noch einmal verdeutlicht.
\begin{figure}
......@@ -2899,6 +2903,98 @@ Wir geben Ableitungsbäume gewöhnlich nur graphisch an. Dabei verwenden wir kei
\label{fig:explicitderivativetree}
\end{figure}
\begin{definition}
Seien $T_1 = (V_1, E_1, \lambda_1), T_2 = (V_2, E_2, \lambda_2)$ Bäume und $u \in V_1$ Blatt. Wir können $T_2$ an $u$ \emph{anhängen} (geschrieben: $T_1 \curlywedge^u T_2$) durch $T = T_1 \curlywedge^u T_2 = (V, E, \lambda)$ mit $V = V_1 \cup u \cdot V_2$, $E = E_1 \cup u \cdot E_2$ und
$$
\lambda(v) = \begin{cases}
\lambda_1(v), & v \in V_1\\
\lambda_2(w), & v \notin V_1, v = uw,
\end{cases}
$$
wobei zu einer Kante $e = (v, w)$, $u \cdot e = (uv, uw)$ und entsprechend $u \cdot E = \{u \cdot e : e \in E\}$.
\end{definition}
Das Anhängen eines Baumes ist skizziert in Abbildung~\ref{fig:jointree}. Für mehrfaches Anhängen an Blätter $u_1, \ldots, u_k \in V_1$ schreiben wir $T_1 \curlywedge^{u_1} T_2 \curlywedge^{u_2} \ldots \curlywedge^{u_k} T_k$ mit impliziter Linksklammerung.
\begin{figure}
\centering
\input{figs/jointree}
\caption{Der Baum $T_2$ wird an das Blatt $u$ aus $T_1$ angehängt.}
\label{fig:jointree}
\end{figure}
\begin{theorem}
Sei $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik. Dann gilt für alle $A \in N$ und $\alpha \in (N \cup \Sigma)^\ast$, dass $A \to^\ast \alpha$ genau dann wenn ein Ableitungsbaum $T = (V, E, \lambda)$ zu $\mathcal{G}$ existiert mit $\lambda(\varepsilon) = A$ und $\beta(T) = \alpha$.
\begin{proof}
''wenn dann``: Induktion über die Länge der Ableitung $n$ von $\alpha$ aus $A$ in $\mathcal{G}$.\\
Induktionsverankerung: $n = 0$. Wenn $A \to^0 = \alpha$, dann ist $\alpha = A$ und dann ist $(\{\varepsilon\}, \emptyset, \varepsilon \mapsto A)$ ein Ableitungsbaum für $\alpha$ aus $A$.\\
Induktionsschritt: Sei
$$
\alpha_0 = A \to \alpha_1 \to \ldots \to \alpha_{n+1} = \alpha
$$
eine Ableitung von $\alpha$ aus $A$. Wir zerlegen zunächst $\alpha_1$ in Terminalwörter und Nichtterminale:
$$
\alpha_1 = u_0 B_1 u_1 B_2 \ldots u_{k-1} B_k u_k,
$$
für ein $k > 0$, $u_0, \ldots, u_k \in \Sigma^\ast$ und $B_1, \ldots, B_k \in N$. Wir verwenden nun das Zerlegungslemma~\ref{lem:decomposition}. Demnach lässt sich nun auch $\alpha$ zerlegen als
$$
\alpha = u_0 \beta_1 u_1 \beta_2 \ldots u_{k-1} \beta_k u_k,
$$
sodass $B_i \to^{[n+1]} \beta_i$ für alle $i \in \{1, \ldots, k\}$. Nach Induktionshypothese gibt es für jedes $i \in \{1, \ldots, k\}$ einen Ableitungsbaum $T_i$ für $\beta_i$ aus $B_i$. Sei $u_i = a_{i0} \ldots a_{i\ell_i-1}$ für $i \in \{1, \ldots, k\}$. Sei $T' = (V', E', \lambda')$ mit
$$
V' = \left\lbrace \varepsilon, 1, \ldots, k + \sum_{i=1}^k \ell_i \right\rbrace,
$$
$$
E' = \left\lbrace (\varepsilon, i) \mid i \in V' \setminus \{\varepsilon\} \right\rbrace,
$$
und $\lambda'(\varepsilon) = A$, und Blattbeschriftung $\beta(T') = u_0 B_1 u_1 \ldots u_{k-1} B_k u_k$. Durch Anhängen der Bäume $T_i$ für $i \in \{1, \ldots, k\}$, d.h. $T' \curlywedge^{\ell_1+1} T_1 \curlywedge^{\ell_2+2} \ldots \curlywedge^{\ell_k+k} T_k$ erhalten wir den Ableitungsbaum für $A \to^{[n+2]} \alpha$ (s. Abbildung~\ref{fig:existence_derivativetree}).\\
''nur wenn``: Induktion über Höhe des Ableitungsbaums $T$.\\
Induktionsverankerung: $h(T) = 0$. Dann ist $T = (\{\varepsilon\}, \emptyset, \varepsilon \mapsto A)$ der Ableitungsbaum und es gilt $A \to^0 \alpha = A$. Insbesondere gilt $\beta(T) = A$.\\
Induktionsschritt: Sei $T = (V, E, \lambda)$ ein Ableitungsbaum mit Höhe $h \coloneqq h(T)$. Wir betrachten die Unterbäume $T_1, \ldots, T_k$ an den Nachfolgern von $\varepsilon$, d.h. die Bäume mit Wurzeln $1, \ldots, k$ (Beachte, dass $T$ ensteht durch Anhängen von $T_1, \ldots, T_k$ an $1, \ldots, k$). Es gilt $\beta(T) = \beta(T_1) \cdot \beta(T_k)$. Wir wissen außerdem, dass $A \to \lambda(1) \ldots \lambda(k) \in P$, welche uns den ersten Ableitungsschritt liefert. Nach Induktionshypothese gilt für alle $i \in \{1, \ldots, k\}$, dass eine Ableitung $\lambda(i) \to^\ast \beta(T_i)$ existiert. Verwenden wir nun, das Kombinationslemma~\ref{lem:combination}, erhalten wir
\[%qedhere
A \to \lambda(1) \ldots \lambda(k) = \lambda_1(\varepsilon) \ldots \lambda_k(\varepsilon) \to^\ast \beta(T_1) \ldots \beta(T_k) = \beta(T).\qedhere
\]
\end{proof}
\end{theorem}
\begin{figure}
\centering
\input{figs/existence_derivativetree}
\caption{Aleitungsbaum für $A \to^{[n+2]} \alpha$. Die Bäume für $B_i \to^{[n+1]} \beta_i$ existieren nach Induktionshypothese.}
\label{fig:existence_derivativetree}
\end{figure}
\begin{corollary}
Sei $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik und $w \in \Sigma^\ast$. Es gilt $w \in L(\mathcal{G})$ genau dann wenn es einen Ableitungsbaum $T = (V, E, \lambda)$ gibt mit $\lambda(\varepsilon) = S$ und $\beta(T) = w$.
\end{corollary}
Als nächstes zeigen wir, wie Bäume, insbesondere Ableitungsbäume, wieder als ''lineare`` Objekte (d.h. Wörter) aufgefasst werden können. Dies passiert zum Beispiel in \texttt{HTML}/\texttt{XML}-Dokumenten, welche stets eine als Text codierte Baumstruktur haben. Ähnliches passiert beim Compilieren von Programm-Quelltexten beim Überprüfen der Syntax.
\begin{definition}
Sei $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik und $T = (V, E, \lambda)$ ein Ableitungsbaum für $\mathcal{G}$.
Wir definieren die \emph{Baumcodierung} $\tau(T)$ von $T$ rekursiv über die Höhe $h(T)$ des Baumes. Wir verwenden das Alphabet $\Sigma \cup \{\langle_A, \rangle_A : A \in N\}$.\\
Rekursionsanfang: $h(T) = 0$.
$$
\tau(T) = \begin{cases}
a, & \lambda(\varepsilon) = a \in \Sigma\\
\langle_A \rangle_A, & \lambda(\varepsilon) = A \in N.
\end{cases}
$$
Rekursionsschritt: $h(T) > 0$. Die Wurzel ist ein Nichtterminal $A \in N$ und hat Nachfolgerbäume $1, \ldots, k$ und zugehörige Unterbäume $T_1, \ldots, T_k$.
$$
\tau(T) = \langle_A \tau(T_1) \ldots \tau(T_k) \rangle_A.
$$
\end{definition}
Beachte, dass $\tau(T)$ wohldefiniert ist, denn für alle $T_i$, $i \in \{1, \ldots, k\}$ gilt $h(T_i) < h(T)$.
\begin{example}
Betrachte erneut den Ableitungsbaum in Abbildung~\ref{fig:explicitderivativetree}. Wir erhalten die Baumcodierung:
$$
\langle_S \langle_A \langle_A a \rangle_A \langle_A a \rangle_A \rangle_A \langle_B \langle_B b \rangle_B \langle_B \langle_B b \rangle_B \langle_B b \rangle_B \rangle_B \langle_A a \rangle_A \rangle_B a \rangle_S.
$$
\end{example}
\begin{lemma}
Sei $\mathcal{G} = (N, \Sigma, P, S)$ eine kontextfreie Grammatik. Die Sprache $\texttt{code}(\mathcal{G}) = \{\tau(T) : T \textup{ ist ein Ableitungsbaum von } \mathcal{G}\}$ ist kontextfrei.
\begin{proof}
Einfache Übungsaufgabe.
\end{proof}
\end{lemma}
\subsection{Abschlusseigenschaften kontextfreie Sprachen}\label{sec:contextfree_closure}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment