summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex')
-rw-r--r--macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex68
1 files changed, 68 insertions, 0 deletions
diff --git a/macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex b/macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex
new file mode 100644
index 0000000000..c4657849ea
--- /dev/null
+++ b/macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex
@@ -0,0 +1,68 @@
+\section{Syntaxdiagramme}
+\label{paket:syntaxdi}
+
+Mit den Paketen \pkg{syntaxdi} und \pkg{tikz} ist es möglich,
+einfache Syntaxdiagramme zu erstellen. Dazu sind einige Elemente
+definiert worden, die automatisch durch Pfeile miteinander
+verbunden werden.
+
+Hierzu definiert das Paket \pkg{syntaxdi} einige TikZ-Stile, die
+einfach genutzt werden können.
+
+\subsection{TikZ-Stile}
+\begin{options}
+\opt{nonterminal} definiert ein Non-Terminal.
+ \opt{terminal} definiert ein Terminal.
+\opt{fnonterminal} definiert ein Non-Terminal ohne automatische
+ Verzweigung.
+\opt{fterminal} definiert ein Terminal ohne automatische
+ Verzweigung.
+\opt{point} definiert einen Punkt, der ohne ankommenden Pfeil
+ gezeichnet wird.
+\opt{endpoint} definiert einen Punkt, der mit ankommenden Pfeil
+ gezeichnet wird.
+\end{options}
+
+\subsection{Beispiel}
+
+Damit kann \zB\xspace das folgende Syntaxdiagramm gezeichnet werden.
+
+\begin{example}[gobble=0]
+\begin{tikzpicture}[syntaxdiagramm]
+ \node [] {};
+ \node [terminal] {if};
+ \node [nonterminal] {Bedingung};
+ \node [terminal] {:};
+ \node [nonterminal] {Anweisungsblock};
+ \node (ersteReiheEnde) [point] {};
+ \node (ersteReiheEndeUnten) [point, below=of ersteReiheEnde] {};
+ \node (zweiteReiheStartOben) [point, left=of ersteReiheEndeUnten,
+ xshift=-75mm] {};
+ \node (zweiteReiheStart) [point, below=of zweiteReiheStartOben] {};
+ {
+ [start chain=elif going right]
+ \chainin (zweiteReiheStart);
+ \node [terminal] {elif};
+ \node [nonterminal] {Bedingung};
+ \node [terminal] {:};
+ \node [nonterminal] {Anweisungsblock};
+ \node (elifEnde) [point] {};
+ \node (elifEndeOben) [point, above=of elifEnde] {};
+ \draw[->,left] (elifEndeOben) -- (ersteReiheEndeUnten);
+ }
+ \node (dritteReiheStart) [point, below=of zweiteReiheStart,
+ yshift=-5mm] {};
+ \node (vierteReiheStart) [point, below=of dritteReiheStart,
+ yshift=-5mm] {};
+ \node (vierteReiheEnde) [point, xshift=84mm] {};
+ {
+ [start chain=else going right]
+ \chainin (dritteReiheStart);
+ \node [terminal] {else};
+ \node [terminal] {:};
+ \node (elseEnde) [nonterminal] {Anweisungsblock};
+ \draw[->] (elseEnde) -| (vierteReiheEnde);
+ }
+ \node (ende) [endpoint] {};
+\end{tikzpicture}
+\end{example} \ No newline at end of file