mirror of
https://github.com/MartinThoma/LaTeX-examples.git
synced 2025-04-26 06:48:04 +02:00
Abstrakte Syntax; Prolog (Listenoperationen)
This commit is contained in:
parent
b555bae6c4
commit
e42277ecda
6 changed files with 56 additions and 1 deletions
|
@ -147,6 +147,43 @@ Ausgegeben wird ein \textbf{abstrakter Syntaxbaum}\xindex{Syntaxbaum!abstrakter}
|
|||
TODO
|
||||
\end{beispiel}
|
||||
|
||||
\subsection{Abstrakte Syntax}\xindex{Syntax!abstrakte}%
|
||||
\begin{beispiel}[Abstrakte Syntax für reguläre Ausdrücke\footnotemark]
|
||||
Die Grammatik $G = (\Set{\text{\texttt{char}}, (, ), \cup, \cdot, *, \varepsilon}, \Set{R}, P, R)$ mit den Produktionen
|
||||
\[R \rightarrow \text{\texttt{char}} | \varepsilon | ( R \cup R ) | (R \cdot R) | (R)^*\]
|
||||
erzeugt einfache reguläre Ausdrücke.
|
||||
|
||||
Die zugehörige abstrakte Syntax ist
|
||||
|
||||
\begin{align*}
|
||||
\text{RegExp} &= \text{Char } | \text{ Epsilon } | \text{ Union } | \text{ Concatenation } | \text{ KleeneClosure }\\
|
||||
\text{Union} &:: \text{RegExp RegExp}\\
|
||||
\text{Concatenation} &:: \text{RegExp RegExp}\\
|
||||
\text{KleeneClosure} &:: \text{RegExp}\\
|
||||
\text{Char} &= \text{\texttt{char}}\\
|
||||
\text{Epsilon} &= \varepsilon\\
|
||||
\end{align*}
|
||||
\end{beispiel}
|
||||
\footnotetext{Klausur vom SS2012}
|
||||
|
||||
\begin{beispiel}[Abstrakte Syntax für reguläre Ausdrücke\footnotemark]
|
||||
Die Grammatik $G = (\Set{\text{\texttt{char}}, (, ), \cup, \cdot, *, \varepsilon}, \Set{R}, P, R)$ mit den Produktionen
|
||||
\[R \rightarrow \text{\texttt{char}} | \varepsilon | ( R \cup R ) | (R \cdot R) | (R)^*\]
|
||||
erzeugt einfache reguläre Ausdrücke.
|
||||
|
||||
Die zugehörige abstrakte Syntax ist
|
||||
|
||||
\begin{align*}
|
||||
\text{RegExp} &= \text{Char } | \text{ Epsilon } | \text{ Union } | \text{ Concatenation } | \text{ KleeneClosure }\\
|
||||
\text{Union} &:: \text{RegExp RegExp}\\
|
||||
\text{Concatenation} &:: \text{RegExp RegExp}\\
|
||||
\text{KleeneClosure} &:: \text{RegExp}\\
|
||||
\text{Char} &= \text{\texttt{char}}\\
|
||||
\text{Epsilon} &= \varepsilon\\
|
||||
\end{align*}
|
||||
\end{beispiel}
|
||||
\footnotetext{Klausur vom SS2012}
|
||||
|
||||
\section{Semantische Analyse}\xindex{Analyse!semantische}%
|
||||
Die semantische Analyse arbeitet auf einem abstrakten Syntaxbaum und generiert
|
||||
einen attributierten Syntaxbaum\xindex{Syntaxbaum!attributeriter}.
|
||||
|
|
|
@ -154,7 +154,8 @@ folgenden Zeilen äquivalent:
|
|||
Das doppelte Plus (\texttt{++}) wird verwendet um Listen mit einander zu verbinden.
|
||||
|
||||
\subsection{Logische Operatoren}
|
||||
\begin{table}[h]
|
||||
|
||||
\begin{table}[H]
|
||||
\centering
|
||||
\begin{tabular}{CCCC}
|
||||
UND & ODER & Wahr & Falsch \\ \hline\hline
|
||||
|
|
Binary file not shown.
|
@ -86,6 +86,18 @@ Rumpf \texttt{T}.
|
|||
\xindex{split}Übergibt man \texttt{append(X,Y,[1,2,3,4,5])}, so werden durch Reerfüllung alle
|
||||
Möglichkeiten durchgegangen, wie man die Liste \texttt{[1,2,3,4,5]} splitten kann.
|
||||
|
||||
Die Länge einer Liste \texttt{L} kann durch folgendes Prädikat ermittelt werden:\xindex{length(?List, ?Int)@\texttt{length(?List, ?Int)}}%
|
||||
|
||||
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/list-length.pl}
|
||||
|
||||
\underline{Hinweis}: Da es das Prädikat \texttt{length(?List, ?Int)} bereits gibt,
|
||||
musste dieses Prädikat \texttt{lengthof} genannt werden.
|
||||
|
||||
Weitere nützliche Standard-Listenprädikate sind:\xindex{sort(+List, -Sorted)@\texttt{sort(+List, -Sorted)}}
|
||||
\inputminted[numbersep=5pt, tabsize=4]{prolog}{scripts/prolog/standard-list-predicates.pl}
|
||||
|
||||
\underline{Hinweis}: \texttt{sort} entfernt Duplikate, \texttt{msort} hingegen nicht.
|
||||
|
||||
\section{Beispiele}
|
||||
\subsection{Humans}
|
||||
Erstelle folgende Datei:
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
lengthof(L, 0) :- L == [].
|
||||
lengthof([_|R], NewLength) :- lengthof(R,Length), NewLength is Length+1.
|
|
@ -0,0 +1,3 @@
|
|||
sort(+List, -Sorted)
|
||||
msort(+List, -Sorted)
|
||||
memberchk(?Elem, +List)
|
Loading…
Add table
Add a link
Reference in a new issue