Jelajahi Sumber

Abschnitt über Reguläre Ausdrücke und Lex hinzugefügt

Martin Thoma 11 tahun lalu
induk
melakukan
872cb8db96

+ 5 - 1
documents/Programmierparadigmen/Abkuerzungen.tex

@@ -1,15 +1,19 @@
+%!TEX root = Programmierparadigmen.tex
 \chapter*{Abkürzungsverzeichnis\markboth{Abkürzungsverzeichnis}{Abkürzungsverzeichnis}}
 \addcontentsline{toc}{chapter}{Abkürzungsverzeichnis}
 \begin{acronym}
     \acro{Beh.}{Behauptung}
     \acro{Bew.}{Beweis}
+    \acro{bzgl.}{bezüglich}
     \acro{bzw.}{beziehungsweise}
     \acro{ca.}{circa}
     \acro{d. h.}{das heißt}
+    \acro{DEA}{Deterministischer Endlicher Automat}
     \acro{etc.}{et cetera}
     \acro{ggf.}{gegebenenfalls}
-    \acro{sog.}{sogneannte}
+    \acro{sog.}{sogenannte}
     \acro{Vor.}{Voraussetzung}
+    \acro{vgl.}{vergleiche}
     \acro{z. B.}{zum Beispiel}
     \acro{z. z.}{zu zeigen}
 \end{acronym}

+ 62 - 1
documents/Programmierparadigmen/Compilerbau.tex

@@ -1,3 +1,4 @@
+%!TEX root = Programmierparadigmen.tex
 \chapter{Compilerbau}
 \index{Compilerbau|(}
 
@@ -64,7 +65,7 @@ Ausführung des Programms $A$ in Maschinencode (z.~B. x86, SPARC) übersetzt.
     \item Assemblieren und Binden
 \end{enumerate}
 
-\subsection{Lexikalische Analyse}\xindex{Analyse!lexikalische}%
+\section{Lexikalische Analyse}\xindex{Analyse!lexikalische}%
 In der lexikalischen Analyse wird der Quelltext als Sequenz von Zeichen betrachtet.
 Sie soll bedeutungstragende Zeichengruppen, sog. \textit{Tokens}\xindex{Token},
 erkennen und unwichtige Zeichen, wie z.~B. Kommentare überspringen. Außerdem
@@ -75,6 +76,66 @@ zusammengefasst werden.
 	\todo[inline]{Beispiel erstellen}
 \end{beispiel}
 
+\subsection{Reguläre Ausdrücke}\xindex{Ausdrücke!reguläre}
+\begin{beispiel}[Regulärere Ausdrücke]
+	Folgender regulärer Ausdruck erkennt Float-Konstanten in C nach
+	ISO/IEC 9899:1999 §6.4.4.2:
+
+	$((0|\dots|9)^*.(0|\dots|9)^+)|((0|\dots|9)^+.)$
+\end{beispiel}
+
+\begin{satz}
+	Jede reguläre Sprache wird von einem (deterministischen) endlichen
+	Automaten akzeptiert.
+\end{satz}
+
+TODO: Bild einfügen
+
+Zu jedem regulären Ausdruck im Sinne der theoretischen Informatik kann ein 
+nichtdeterministischer Automat generiert werden. Dieser kann mittels 
+Potenzmengenkonstruktion\footnote{\url{http://martin-thoma.com/potenzmengenkonstruktion/}} 
+in einen deterministischen Automaten überführen. Dieser kann dann mittels 
+Äquivalenzklassen minimiert werden.
+
+\todo[inline]{Alle Schritte beschreiben}
+
+\subsection{Lex}\index{Lex|(}\index{Flex|see{Lex}}
+Lex ist ein Programm, das beim Übersetzerbau benutzt wird um Tokenizer für die
+lexikalische Analyse zu erstellen. Flex ist eine Open-Source Variante davon.
+
+Eine Flex-Datei besteht aus 3 Teilen, die durch \texttt{\%\%} getrennt werden:
+
+\begin{verbatim}
+Definitionen: Definiere Namen
+%%
+Regeln: Definiere reguläre Ausdrücke und 
+        zugehörige Aktionen (= Code)
+%%
+Code: zusätzlicher Code
+\end{verbatim}
+
+\subsubsection{Reguläre Ausdrücke in Flex}
+\begin{table}
+    \begin{tabular}{ll}
+    x          & Zeichen 'x' erkennen                             \\
+    "xy"       & Zeichenkette 'xy' erkennen                       \\
+    \textbackslash & Zeichen 'x' erkennen (TODO)                      \\
+    $[xyz]$    & Zeichen $x$, $y$ oder $z$ erkennen         \\
+    $[a-z]$    & Alle Kleinbuchstaben erkennen                    \\
+    $[\^a-z]$  & Alle Zeichen außer Kleinbuchstaben erkennen      \\
+    $x|y$      & $x$ oder $y$ erkennen                        \\
+    (x)        & x erkennen                                       \\
+    x*         & 0, 1 oder mehrere Vorkommen von x erkennen       \\
+    x+         & 1 oder mehrere Vorkommen von x erkennen          \\
+    x?         & 0 oder 1 Vorkommen von x erkennen                \\
+    \{Name\}   & Expansion der Definition Name                    \\
+    \textbackslash t, \textbackslash n, \textbackslash rq & Tabulator, Zeilenumbruch, Wagenrücklauf erkennen \\
+    \end{tabular}
+\end{table}
+
+\index{Lex|)}
+
+
 \section{Syntaktische Analyse}\xindex{Analyse!syntaktische}%
 In der syntaktischen Analyse wird überprüft, ob die Tokenfolge zur 
 kontextfreien Sprache\todo{Warum kontextfrei?} gehört. Außerdem soll die 

TEMPAT SAMPAH
documents/Programmierparadigmen/Programmierparadigmen.pdf


+ 14 - 20
documents/Programmierparadigmen/Symbolverzeichnis.tex

@@ -1,24 +1,18 @@
+%!TEX root = Programmierparadigmen.tex
+\markboth{Symbolverzeichnis}{Symbolverzeichnis}
 \twocolumn
-\chapter*{Symbolverzeichnis\markboth{Symbolverzeichnis}{Symbolverzeichnis}}
+\chapter*{Symbolverzeichnis}
 \addcontentsline{toc}{chapter}{Symbolverzeichnis}
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Mengenoperationen                                                 %
+% Reguläre Ausdrücke                                                 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\section*{Mengenoperationen}
-$A^C\;\;\;$ Komplement der Menge $A$\\
-$\mathcal{P}(M)\;\;\;$ Potenzmenge von $M$\\
-$\overline{M}\;\;\;$ Abschluss der Menge $M$\\
-$\partial M\;\;\;$ Rand der Menge $M$\\
-$M^\circ\;\;\;$ Inneres der Menge $M$\\
-$A \times B\;\;\;$ Kreuzprodukt zweier Mengen\\
-$A \subseteq B\;\;\;$ Teilmengenbeziehung\\
-$A \subsetneq B\;\;\;$ echte Teilmengenbeziehung\\
-$A \setminus B\;\;\;$ $A$ ohne $B$\\
-$A \cup B\;\;\;$ Vereinigung\\
-$A \dcup B\;\;\;$ Disjunkte Vereinigung\\
-$A \cap B\;\;\;$ Schnitt\\
-
-\section*{Geometrie}
-$AB\;\;\;$ Gerade durch die Punkte $A$ und $B$\\
-$\overline{AB}\;\;\;$ Strecke mit Endpunkten $A$ und $B$\\
-$\triangle ABC\;\;\;$ Dreieck mit Eckpunkten $A, B, C$\\
+\section*{Reguläre Ausdrücke}
+$\emptyset\;\;\;$ Leere Menge\\
+$\epsilon\;\;\;$ Das leere Wort\\
+$\alpha, \beta\;\;\;$ Reguläre Ausdrücke\\
+$L(\alpha)\;\;\;$ Die durch $\alpha$ beschriebene Sprache\\
+$L(\alpha | \beta) = L(\alpha) \cup L(\beta)$\\
+$L(\alpha \cdot \beta) = L(\alpha) \cdot L(\beta)$\\
+$\alpha^+ = L(\alpha)^+$ TODO: Was ist $L(\alpha)^+$\\
+$\alpha^* = L(\alpha)^*$ TODO: Was ist $L(\alpha)^*$\\
+\onecolumn

+ 2 - 1
documents/Programmierparadigmen/Arbeitszeit.md

@@ -9,4 +9,5 @@ in dem Erstellen dieses Skripts steckt:
 |01.02.2014 | 11:15 - 11:45 | Thoma | Haskell Class Hierachy
 |01.02.2014 | 16:00 - 17:00 | Thoma | Abschnitt über Rekursion hinzugefügt
 |04.02.2014 | 13:00 - 14:00 | Thoma | Viel zu Haskell ergänzt; Funktionen höherer Ordnung beschrieben
-|14.02.2014 | 08:30 - 09:30 | Thoma | Abschnitt über Compilerbau begonnen
+|14.02.2014 | 08:30 - 09:30 | Thoma | Abschnitt über Compilerbau begonnen
+|20.02.2014 | 09:30 - 10:42 | Thoma | Abschnitt über Reguläre Ausdrücke und Lex hinzugefügt