2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-26 06:48:04 +02:00

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

This commit is contained in:
Martin Thoma 2014-02-20 10:42:44 +01:00
parent 3657c5d8f5
commit 872cb8db96
5 changed files with 83 additions and 23 deletions

View file

@ -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}

View file

@ -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

View file

@ -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

View file

@ -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