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