<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\documentclass[a4paper,add-index]{cnltx-doc}

\usepackage{syntaxdi}

\usepackage{hyperref}

\setcnltx{
    name     = syntaxdi ,
    title    = syntaxdi ,
    version  = 0.8.2 ,
    date     = 2020-10-16 ,
    subtitle = {\LaTeX-Paket zum Setzen von Syntaxdiagrammen in Form von Railroaddiagrammen},
    info     = Paketdokumentation ,
    authors  =  {Johannes Pieper, Johannes Kuhaupt, Ludger Humbert, Andr\'e Hilbig, Adrian Salamon, Daniel Spittank} ,
    email    = schulepaket@johpie.de ,
    url     = https://ddi.uni-wuppertal.de/material/schulepaket.html ,
    abstract = {%
        Mit diesem Paket werden Styles fÃ¼r TikZ bereit gestellt, um spezielle Syntaxdiagramme erstellen zu kÃ¶nnen. Diese sind auch als Railroaddiagramme bekannt und wurden von Niklaus Wirth zur Dokumentation der Syntax von Pascal eingefÃ¼hrt. In der Dokumentation des Pakets \pkg{pgf} wird die Erstellung in dem Tutorium \textbf{Diagrams as Simple Graphs} (S.~66--74) Schritt fÃ¼r Schritt beschrieben. Das Paket war vormals Teil des Schulepakets.
    } ,
    index-setup = { othercode=\footnotesize,level=\section},
    add-listings-options= {
        morekeywords={
        }
    },
}

\begin{document}

\section{Syntaxdiagramme}
\label{paket:syntaxdi}

Mit den Paketen \pkg{syntaxdi} und \pkg{tikz} ist es mÃ¶glich, spezielle Syntaxdiagramme als Railroaddiagramme zu erstellen. Dazu sind 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 z.\,B. das Syntaxdiagramm fÃ¼r eine Mehrfachverzweigung in der Programmiersprache Python in Form eines Railroaddiagramms dargestellt 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[-&gt;,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[-&gt;] (elseEnde) -| (vierteReiheEnde);
  }
  \node (ende) [endpoint] {};
\end{tikzpicture}
\end{example}
\end{document}
</pre></body></html>