summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/schule/doc/zusatzpaketSyntaxdi.tex
blob: c4657849ea2966507658afb1e67102536f097dda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
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}