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:
parent
3657c5d8f5
commit
872cb8db96
5 changed files with 83 additions and 23 deletions
|
@ -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}
|
||||
|
|
|
@ -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
|
||||
|
|
Binary file not shown.
|
@ -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
|
|
@ -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
|
Loading…
Add table
Add a link
Reference in a new issue