summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/syntax
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/syntax
Initial commit
Diffstat (limited to 'macros/latex/contrib/syntax')
-rw-r--r--macros/latex/contrib/syntax/README66
-rw-r--r--macros/latex/contrib/syntax/syntax.tex482
-rw-r--r--macros/latex/contrib/syntax/syntaxintro.pdfbin0 -> 89355 bytes
-rw-r--r--macros/latex/contrib/syntax/syntaxintro.tex424
-rw-r--r--macros/latex/contrib/syntax/syntaxtest.tex77
5 files changed, 1049 insertions, 0 deletions
diff --git a/macros/latex/contrib/syntax/README b/macros/latex/contrib/syntax/README
new file mode 100644
index 0000000000..78c6841719
--- /dev/null
+++ b/macros/latex/contrib/syntax/README
@@ -0,0 +1,66 @@
+------------ syntax.tex --------------
+
+Einfaches Erzeugen von Syntaxdiagrammen mit LaTeX.
+
+Die enthaltenen Dateien sind im Fruehjahr/Sommer 1997 entstanden,
+um das Setzen eines Vorlesungsscripts zur Programmiersprache Pascal
+zu vereinfachen. Auch wenn es sich nicht um ein Paket im LaTeX Sinne
+handelt, ist die Erweiterung doch evtl. fuer den Einen oder Anderen
+nuetzlich:
+
+Die Syntaxdiagramme werden durch eine spezielle Umgebung und
+zugehoerige Befehle erzeugt, wobei die genaue Positionierung
+automatisch erfolgt.
+
+
+--------------------------------------------------------------
+README - diese Datei
+syntax.tex - alles Wichtige
+syntaxintro.tex - die Dokumentation
+syntaxtest.tex - einige Beispieldiagramme
+
+--------------------------------------------------------------
+Verwendung in eigenem Dokument:
+
+ \usepackage{fancybox}
+ \input{syntax.tex}
+
+--------------------------------------------------------------
+Beispiel eines Diagramms mit den wesentlichen Elementen:
+
+ \begin{Syntaxdiagramm}%
+ \Wiederholung{%
+ \Alternative{%
+ \Stapel{\TerSym{Setzen}}%
+ {\TerSym{Sie}}%
+ }{\begin{Alternativen}%
+ {\TerSym{Das}}%
+ {\TerSym{Hand}}%
+ \SynVarR{einmal}\\
+ \SynVarR{von}\\
+ \end{Alternativen}%
+ }%
+ }{\SynVar{!!!!}%
+ }
+ \end{Syntaxdiagramm}
+
+
+--------------------------------------------------------------
+ Die LaTeX Ergaenzung syntax.tex unterliegt der
+
+ GNU GENERAL PUBLIC LICENSE
+--------------------------------------------------------------
+
+
+
+
+Kritik, Anregungen und eigene Erweiterungen bitte an:
+
+
+ --------------------------------------
+ Bernd Worsch Doberaner Strasse 99
+ 18057 Rostock
+ bernd.worsch@web.de
+ email preferred
+ --------------------------biichi-ji---
+
diff --git a/macros/latex/contrib/syntax/syntax.tex b/macros/latex/contrib/syntax/syntax.tex
new file mode 100644
index 0000000000..0c2ef8e621
--- /dev/null
+++ b/macros/latex/contrib/syntax/syntax.tex
@@ -0,0 +1,482 @@
+% Dieses File ist dazu gedacht, im Vorspann von LaTeX Dokumenten vermittels
+% \include{syntax.tex} eingebunden zu werden. Es stellt dann die Umgebung
+% syntaxdiagramm zur Verfuegung, mit deren Hilfe Syntaxdiagramme fuer
+% z.B. Pascal erzeugt werden koennen.
+%
+% syntax.tex benoetigt nur noch folgendes LaTeX Paket:
+% - fancybox.sty
+% (Es muss im Vorspann des aufrufenden Dokumentes eingebunden werden.)
+%
+% Beispiele zur Verwendung siehe: syntaxtest.tex
+% zur naeheren Dokumentation siehe: syntaxintro.tex
+% zur Entwicklung des Codes siehe: syntaxdevel.tex
+%
+% Bernd Worsch 29.6.97
+%
+% 05.07.97 \Leer als vertikale Stuetze
+% groessere Abstaende in Alternativen-Umgebung
+%
+% to-do-list:
+% -- Oval fuer SynVar ueber picture erzeugen -> fancybox unnoetig
+% -- Alternativen-Parameter automatisch bestimmen
+% -- Dokumentation (syntaxuse.tex)
+% -- Kommentare im Quelltext
+% -- Als sty-File implementieren
+
+
+
+\typeout{Verwende: 'syntax.tex' v0.02 von Bernd Worsch}
+
+
+
+%%%% Anlegen der benoetigten Laengen und Boxen
+
+\newlength{\breite}
+\newlength{\hoehe}
+\newlength{\tiefe}
+\newlength{\gesamthoehe}
+\newlength{\tmpLength}
+
+\newsavebox{\Messbox}
+
+\newlength{\LineLengStan}
+\newlength{\LineThikStan}
+\setlength{\LineLengStan}{4mm}
+\setlength{\LineThikStan}{\fboxrule}
+
+\newsavebox{\Centerbox}
+\newlength{\Centercor}
+
+\newlength{\VertSkipStan}
+\setlength{\VertSkipStan}{3mm}
+
+\newsavebox{\upperbox}
+\newsavebox{\lowerbox}
+\newsavebox{\togetherbox}
+\newlength{\VertLineLength}
+\newlength{\VertSkip}
+
+\newlength{\upperVertLineLength}
+\newlength{\lowerVertLineLength}
+
+\newlength{\tabulcor}
+
+%%%%% Beginn Syntaxdiagramm Befehle und Umgebungen
+
+\newenvironment{Syntaxdiagramm}[1][\PfeilR]%
+ {%
+%
+%%%% Befehl zum Vermessen von TeX-Strukturen
+%
+%\newcommand{\Messe}[1]
+% {
+% \sbox{\Messbox}{##1}
+%
+% \setlength{\breite}{\wd\Messbox}
+% \setlength{\hoehe}{\ht\Messbox}
+% \setlength{\tiefe}{\dp\Messbox}
+% \setlength{\gesamthoehe}{\hoehe}
+% \addtolength{\gesamthoehe}{\tiefe}
+% \setlength{\tmpLength}{\hoehe}
+% \addtolength{\tmpLength}{-\tiefe}
+% \setlength{\tmpLength}{-0.5\tmpLength}
+%
+% \fbox
+% {
+% \begin{tabular}{ll}
+% Breite: & \the\breite \\
+% Hoehe: & \the\hoehe \\
+% Tiefe: & \the\tiefe \\
+% Gesamthoehe: & \the\gesamthoehe \\
+% CenterCor: & \the\tmpLength
+% \end{tabular}
+%
+% \usebox{\Messbox}
+% }
+% }
+%
+%%%% Befehl zum Justieren von Boxen
+%
+\newcommand{\CenterToBaseLine}[1]
+ {%
+ \sbox{\Centerbox}{##1}%
+ \setlength{\Centercor}{\ht\Centerbox}%
+ \addtolength{\Centercor}{-\dp\Centerbox}%
+ \setlength{\Centercor}{-0.5\Centercor}%
+ \addtolength{\Centercor}{0.5\LineThikStan}%
+ \raisebox{\Centercor}{\usebox{\Centerbox}}%
+ }%
+%
+%%%% Grundelemente eines Syntaxdiagramms
+%
+\newcommand{\Leer}%
+ {\rule[-1.3ex]{0pt}{2.5ex}}%
+%
+\newcommand{\Linie}%
+ {\rule{\LineLengStan}{\LineThikStan}}%
+%
+\newcommand{\KurzeLinie}%
+ {\rule{0.5\LineLengStan}{\LineThikStan}}%
+%
+\newcommand{\Tri}
+ {%
+ \CenterToBaseLine
+ {%
+ \setlength{\unitlength}{1pt}%
+ \begin{picture}(0,0)%
+ \put(0,0){\vector(0,1){0}}%
+ \end{picture}%
+ }%
+ }%
+%
+\newcommand{\TriR}
+ {%
+ \CenterToBaseLine
+ {%
+ \setlength{\unitlength}{1pt}%
+ \begin{picture}(0,0)%
+ \put(0,0){\vector(1,0){0}}%
+ \end{picture}%
+ }%
+ }%
+%
+\newcommand{\TriD}
+ {%
+ \CenterToBaseLine
+ {%
+ \setlength{\unitlength}{1pt}%
+ \begin{picture}(0,0)%
+ \put(0,0){\vector(0,-1){0}}%
+ \end{picture}%
+ }%
+ }%
+%
+\newcommand{\TriL}
+ {%
+ \CenterToBaseLine
+ {%
+ \setlength{\unitlength}{1pt}%
+ \begin{picture}(0,0)%
+ \put(0,0){\vector(-1,0){0}}%
+ \end{picture}%
+ }%
+ }%
+%
+\newcommand{\Dots}
+ {%
+ \CenterToBaseLine
+ {%
+ ...%
+ }%
+ }%
+%
+\newcommand{\SynVar}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \fbox%
+ {%
+ \rule{0.1em}{0pt}%
+ \rule[-0.3ex]{0pt}{2ex}%
+ ##1%
+ \rule{0.1em}{0pt}%
+ }%
+ }%
+ }%
+%
+\newcommand{\TerSym}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \ovalbox%
+ {%
+ \rule{0.2em}{0pt}%
+ \rule[-0.2ex]{0pt}{1.8ex}%
+ ##1%
+ \rule{0.2em}{0pt}%
+ }%
+ }%
+ }%
+%
+%%%% Kombinierte Grafische Elemente
+%
+\newcommand{\Ellipse}%
+ {%
+ \Linie\ \Dots\ \Linie%
+ }%
+%
+\newcommand{\PfeilR}%
+ {%
+ \Linie\TriR%
+ }%
+%
+\newcommand{\PfeilL}%
+ {%
+ \TriL\Linie%
+ }%
+%
+\newcommand{\SynVarR}[1]%
+ {%
+ \PfeilR\SynVar{##1}\Linie%
+ }%
+%
+\newcommand{\SynVarL}[1]%
+ {%
+ \Linie\SynVar{##1}\PfeilL%
+ }%
+%
+\newcommand{\TerSymR}[1]%
+ {%
+ \PfeilR\TerSym{##1}\Linie%
+ }%
+%
+\newcommand{\TerSymL}[1]%
+ {%
+ \Linie\TerSym{##1}\PfeilL%
+ }%
+%
+%%%% Vertikale grafische Elemente
+%
+\newcommand{\LinieO}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \raisebox{0pt}[0pt][0pt]%
+ {%
+ \makebox[0mm][c]{\rule{\LineThikStan}{##1}}%
+ }%
+ }%
+ }%
+%
+\newcommand{\LinieU}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \raisebox{0pt}[0pt][0pt]%
+ {%
+ \makebox[0mm][c]{\rule[-##1]{\LineThikStan}{##1}}%
+ }%
+ }%
+ }%
+%
+\newcommand{\PfeilO}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \raisebox{0pt}[0pt][0pt]%
+ {%
+ \makebox[0mm][c]{\TriD}%
+ \makebox[0mm][c]{\rule{\LineThikStan}{##1}}%
+ }%
+ }%
+ }%
+%
+\newcommand{\PfeilU}[1]%
+ {%
+ \CenterToBaseLine%
+ {%
+ \raisebox{0pt}[0pt][0pt]%
+ {%
+ \makebox[0mm][c]{\Tri}%
+ \makebox[0mm][c]{\rule[-##1]{\LineThikStan}{##1}}%
+ }%
+ }%
+ }%
+%
+%%%% Strukturen
+%
+%%% Wiederholung
+%
+\newcommand{\Wiederholung}[2]%
+ {%
+ \sbox{\upperbox}{##1}%
+ \sbox{\lowerbox}{##2}%
+ \setlength{\VertLineLength}{\dp\upperbox}%
+ \addtolength{\VertLineLength}{\ht\lowerbox}%
+ \addtolength{\VertLineLength}{\VertSkipStan}%
+ \addtolength{\VertLineLength}{0.5\LineThikStan}%
+ \setlength{\VertSkip}{\VertSkipStan}%
+ \addtolength{\VertSkip}{\dp\upperbox}%
+%
+ \Linie%
+ \PfeilU{\VertLineLength}%
+%
+ \renewcommand{\arraystretch}{0}%
+ \begin{tabular}[t]% % Zwei Eintraege
+ {%
+ @{\hrulefill}% % Verbindungslinie 1
+ c% % Eintraege Zentrieren
+ @{\hrulefill}% % Verbindungslinie 2
+ }%
+ \PfeilR\usebox{\upperbox}\Linie\\[\VertSkip] % Dies wiederholen
+ \Linie\usebox{\lowerbox}\PfeilL% % Dies in Gegenrichtung
+ \end{tabular}%
+%
+ \LinieU{\VertLineLength}%
+ \Linie%
+ }%
+%
+%%% Alternative
+%
+\newcommand{\Alternative}[2]%
+ {%
+ \sbox{\upperbox}{##1}%
+ \sbox{\lowerbox}{##2}%
+%
+ \setlength{\upperVertLineLength}{\dp\upperbox}%
+ \addtolength{\upperVertLineLength}{0.5\VertSkipStan}%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+%
+ \setlength{\lowerVertLineLength}{\ht\lowerbox}%
+ \addtolength{\lowerVertLineLength}{0.5\VertSkipStan}%
+ \addtolength{\lowerVertLineLength}{0.5\LineThikStan}%
+%
+ \setlength{\VertSkip}{\VertSkipStan}%
+ \addtolength{\VertSkip}{\dp\upperbox}%
+%
+ \Linie%
+ \LinieO{\upperVertLineLength}%
+ \LinieU{\lowerVertLineLength}%
+%
+ \renewcommand{\arraystretch}{0}%
+ \addtolength{\upperVertLineLength}{-0.5\LineThikStan}%
+ \raisebox{\upperVertLineLength}%
+ {%
+ \begin{tabular}[t]% % Zwei Eintraege
+ {%
+ @{\hrulefill}% % Verbindungslinie 1
+ c% % Eintraege Zentrieren
+ @{\hrulefill}% % Verbindungslinie 2
+ }%
+ \PfeilR\usebox{\upperbox}\Linie\\[\VertSkip] % Weg1
+ \PfeilR\usebox{\lowerbox}\Linie% % Weg2
+ \end{tabular}%
+ }%
+ \renewcommand{\arraystretch}{1}%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+%
+ \LinieO{\upperVertLineLength}%
+ \LinieU{\lowerVertLineLength}%
+ \Linie%
+ }%
+%
+%%% Stapel
+%
+\newcommand{\Stapel}[2]%
+ {%
+ \sbox{\upperbox}{##1}%
+ \sbox{\lowerbox}{##2}%
+%
+ \setlength{\upperVertLineLength}{\dp\upperbox}%
+ \addtolength{\upperVertLineLength}{0.5\VertSkipStan}%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+%
+ \setlength{\lowerVertLineLength}{\ht\lowerbox}%
+ \addtolength{\lowerVertLineLength}{0.5\VertSkipStan}%
+ \addtolength{\lowerVertLineLength}{0.5\LineThikStan}%
+%
+ \setlength{\VertSkip}{0.5\VertSkipStan}%
+ \addtolength{\VertSkip}{\dp\upperbox}%
+ \addtolength{\VertSkip}{-1\LineThikStan}%
+%
+ \Linie%
+ \LinieO{\upperVertLineLength}%
+ \addtolength{\lowerVertLineLength}{-0.5\LineThikStan}%
+ \raisebox{\upperVertLineLength}{\KurzeLinie}%
+ \addtolength{\lowerVertLineLength}{0.5\LineThikStan}%
+ \LinieU{\lowerVertLineLength}%
+%
+ \renewcommand{\arraystretch}{0}%
+ \addtolength{\upperVertLineLength}{-0.5\LineThikStan}%
+ \raisebox{\upperVertLineLength}%
+ {%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+ \begin{tabular}[t]% % Zwei Eintraege
+ {%
+ @{\hrulefill}% % Verbindungslinie 1
+ c% % Eintraege Zentrieren
+ @{\hrulefill}% % Verbindungslinie 2
+ }%
+ \PfeilR\usebox{\upperbox}\Linie\\[\VertSkip] % oberer Eintrag
+ \PfeilL\\[0.5\VertSkipStan]%
+ \PfeilR\usebox{\lowerbox}\Linie% % unterer Eintrag
+ \end{tabular}%
+ }%
+ \renewcommand{\arraystretch}{1}%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+%
+ \LinieO{\upperVertLineLength}%
+ \addtolength{\lowerVertLineLength}{-0.5\LineThikStan}%
+ \raisebox{-\lowerVertLineLength}{\KurzeLinie}%
+ \addtolength{\lowerVertLineLength}{0.5\LineThikStan}%
+ \LinieU{\lowerVertLineLength}%
+ \Linie%
+ }%
+%
+%%%% Die Alternativen-Umgebung
+%
+\newenvironment{Alternativen}[2]%
+ {%
+ \renewcommand{\arraystretch}{2}%
+ \setlength{\tabulcor}{9.3pt}%
+ \sbox{\upperbox}{##1}%
+ \sbox{\lowerbox}{##2}%
+%
+ \begin{lrbox}{\togetherbox}%
+ \begin{tabular}[t]% % Zwei Eintraege
+ {%
+ @{\hrulefill}% % Verbindungslinie 1
+ c% % Eintraege Zentrieren
+ @{\hrulefill}% % Verbindungslinie 2
+ }%
+ \PfeilR\usebox{\upperbox}\Linie\\ % erster Weg
+ }%
+% % weitere Wege
+ {%
+ \PfeilR\usebox{\lowerbox}\Linie% % letzter Weg
+ \end{tabular}%
+ \end{lrbox}%
+%
+ \setlength{\upperVertLineLength}{0.5\dp\togetherbox}%
+ \addtolength{\upperVertLineLength}{0.5\ht\togetherbox}%
+ \addtolength{\upperVertLineLength}{-\ht\upperbox}%
+ \addtolength{\upperVertLineLength}{0.5\LineThikStan}%
+ \addtolength{\upperVertLineLength}{-\tabulcor}%
+%
+ \setlength{\lowerVertLineLength}{0.5\dp\togetherbox}%
+ \addtolength{\lowerVertLineLength}{0.5\ht\togetherbox}%
+ \addtolength{\lowerVertLineLength}{-\dp\lowerbox}%
+%
+ \Linie%
+ \LinieO{\upperVertLineLength}%
+ \LinieU{\lowerVertLineLength}%
+%
+ \CenterToBaseLine{\usebox{\togetherbox}}%
+%
+ \LinieO{\upperVertLineLength}%
+ \LinieU{\lowerVertLineLength}%
+ \Linie%
+ }%
+%
+%%%%% Ende Syntaxdiagramm Befehle und Umgebungen
+%
+ \providecommand{\ContSym}{#1}
+ \renewcommand{\ContSym}{#1}
+ \begin{lrbox}{\Messbox}%
+ }%
+ {%
+ \end{lrbox}%
+ \setlength{\hoehe}{\ht\Messbox}%
+ \addtolength{\hoehe}{\VertSkipStan}%
+ \setlength{\tiefe}{\dp\Messbox}%
+ \addtolength{\tiefe}{\VertSkipStan}%
+ \raisebox{0pt}[\hoehe][\tiefe]%
+ {%
+ \Linie%
+ \usebox{\Messbox}%
+ \ContSym%
+ }%
+ }%
+%
+%%%%% --Und Schluss--
+
diff --git a/macros/latex/contrib/syntax/syntaxintro.pdf b/macros/latex/contrib/syntax/syntaxintro.pdf
new file mode 100644
index 0000000000..8940d18d63
--- /dev/null
+++ b/macros/latex/contrib/syntax/syntaxintro.pdf
Binary files differ
diff --git a/macros/latex/contrib/syntax/syntaxintro.tex b/macros/latex/contrib/syntax/syntaxintro.tex
new file mode 100644
index 0000000000..d787497070
--- /dev/null
+++ b/macros/latex/contrib/syntax/syntaxintro.tex
@@ -0,0 +1,424 @@
+% Eine kurze Einfuehrung in die Verwendung von syntax.tex!
+%
+% syntax.tex ermoeglicht das automatische Setzen von Syntaxdiagrammen fuer
+% Progammiersprachen durch spezielle Befehle in LaTeX-Dokumenten
+%
+% Bernd Worsch 7.7.97 / 27.1.00
+%
+%
+
+\documentclass{article}
+\usepackage{german}
+\usepackage{fancybox}
+
+% Einbinden von syntax.tex
+\include{syntax}
+%Rundung fuer ovalbox einstellen
+\cornersize{1}
+
+\title{\syn \\Eine "Ubersicht}
+\author{Bernd Worsch}
+\date{7. Juli 1997}
+
+\newcommand{\syn}{syntax.tex}
+\newcommand{\vers}{0.02}
+\newcommand{\dx}{\rule{2mm}{0pt}}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Einleitung}
+Zur Beschreibung von Zusammenh"angen in formal sprachlichen Systemen,
+findet h"aufig die sogenannte Bachus--Naur--Form kurz BNF Verwendung.
+Von dieser (textlichen) Darstellung ausgehend wird gerade im Zusammenhang
+mit h"oheren Programmiersprachen gerne eine grafische Beschreibung zur
+Verdeutlichung herangezogen.
+Solche \emph{Syntaxdiagramme} sind intuitiv verst"andlich und verdeutlichen
+auf anschauliche Weise den formalen Aufbau der jeweiligen Programmiersprache.
+
+Das File \syn\ erm"oglicht das einfache Erstellen solcher Diagramme in
+\LaTeX -Dokumenten.
+Statt mit geometrischen Objekten (Linien, Kreise, etc.) zu arbeiten,
+nutzt der Anwender dazu Befehle, die schon im Quelldokument die zu
+illustrierenden Kontrollstrukturen wiederspiegeln.
+
+\section{Bevor es funktioniert \dots}
+Um die M"oglichkeiten von \syn\ nutzen zu k"onnen mu"s die Datei vor dem
+ersten zu setzenden Syntaxdiagramm durch
+\verb+\input{syntax.tex}+
+in das eigene Dokument eingef"ugt werden. Da es in der vorliegenden
+Version \vers\ noch auf einen Befehl des Pakets fancybox.sty
+zur"uckgreift, mu"s dieses am Anfang der eigenen Datei aktiviert werden.
+Wie f"ur alle Pakete geschieht dies durch den Befehl:
+\verb+\usepackage{fancybox}+.
+
+\section{Grundelemente von \syn}
+Abgesehen von Hilfskonstrukten, insbesondere Linien und Pfeilen,
+bestehen Syntaxdiagramme aus Terminalsymbolen, den elementaren
+Grundbausteinen einer Programmiersprache, und Syntaxvariablen.
+Letztere stehen als Platzhalter f"ur syntaktische Konstruktionen.
+
+Beide Grundelemente stehen innerhalb der Umgebung \verb+Syntaxdiagramm+
+mit den Befehlen \verb+\TerSym+ und \verb+\SynVar+ zur Verf"ugung.
+
+Die Umgebung \verb+Syntaxdiagramm+ erzeugt zun"achst ein leeres
+Syntaxdiagramm, also einen von links nach rechts verlaufenden Pfeil.
+An inneren Befehlen stehen unter anderem
+elementare Teilstrukturen von Syntaxdiagrammen bereit. Einige haben
+keine Parameter und erzeugen beispielsweise Linien oder Pfeile,
+\verb+\TerSym+ und \verb+\SynVar+ hingegen erhalten als Parameter
+einen Text.
+Da diese Befehle stets innerhalb des umgebenden Pfeils auftreten,
+wurden in der folgenden "Ubersicht die inneren Elemente durch
+Leerzeichen von der "au"seren
+Umgebung abgegrenzt. Diese Zwischenr"aume sind im endg"ultigen
+Diagramm unerw"unscht.
+Befehle und Umgebungen in Syntaxdiagrammen sollten daher mit einem
+Kommentarzeichen (\verb+%+)
+beendet werden , falls Zeilenumbr"uche im Eingabetext vorgenommen werden.
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} & \begin{Syntaxdiagramm}\end{Syntaxdiagramm} \\
+ \hline
+ \verb+\Linie+ & \begin{Syntaxdiagramm}\dx\Linie\dx\end{Syntaxdiagramm}\\
+ \verb+\PfeilR+ & \begin{Syntaxdiagramm}\dx\PfeilR\dx\end{Syntaxdiagramm}\\
+ \verb+\PfeilL+ & \begin{Syntaxdiagramm}\dx\PfeilL\dx\end{Syntaxdiagramm}\\
+ \verb+\Ellipse+ & \begin{Syntaxdiagramm}\dx\Ellipse\dx\end{Syntaxdiagramm}\\
+ \verb+\Leer+ & \begin{Syntaxdiagramm}\dx\Leer\dx\end{Syntaxdiagramm}\\
+ \hline
+ \verb+\TerSym{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\TerSym{xxxx}\dx\end{Syntaxdiagramm} \\
+ \verb+\SynVar{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\SynVar{xxxx}\dx\end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+Aus obigen Grundelementen und vertikalen Linien werden alle Syntaxdiagramme
+aufgebaut. Die vertikalen Linien und Pfeile sind prinzipiell unter den
+Namen
+\verb+\LinieO{x}+,\verb+\LinieU{x}+,\verb+\PfeilO{x}+ und \verb+\PfeilU{x}+
+ansprechbar, wobei \verb+x+ die jeweilige L"ange festlegt, sie sind
+jedoch nur intern notwendig.
+Um die \LaTeX --Beschreibung eines Syntaxdiagramms kompakt zu halten
+existieren schlie"slich noch vier abk"urzende Schreibweisen. Es sind
+die zusammengesetzten Grundelemente:
+\medskip
+
+\begin{tabular}{l|c}
+ \verb+\TerSymR{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\TerSymR{xxxx}\dx\end{Syntaxdiagramm} \\
+ \verb+\TerSymL{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\TerSymL{xxxx}\dx\end{Syntaxdiagramm} \\
+ \verb+\SynVarR{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\SynVarR{xxxx}\dx\end{Syntaxdiagramm} \\
+ \verb+\SynVarL{xxxx}+ &
+ \begin{Syntaxdiagramm}\dx\SynVarL{xxxx}\dx\end{Syntaxdiagramm} \\
+\end{tabular}
+\medskip
+
+\section{Strukturelemente von \syn}
+Aus den Grundelementen allein lassen sich noch keine (bzw. sehr wenige)
+Syntaxdiagramme aufbauen, es fehlt die M"oglichkeit diese Elemente zu
+verbinden. Zu diesem Zweck stellt \syn\ Alternativen und Wiederholungen
+bereit.
+F"ur beide Strukturen existieren zun"achst Befehle, die je
+zwei Parameter "ubernehmen. Im Fall des Befehls
+\verb+\Alternative{x1}{x2}+ steht \verb+x1+ f"ur den Teil des
+Strukturdiagramms der auf dem ersten Pfad, \verb+x2+
+f"ur den Teil der auf dem zweiten Pfad durchlaufen wird.
+Bei \verb+\Wiederholung{x1}{x2}+ entspricht \verb+x1+ dem wiederholten
+Teil und \verb+x2+ allem, was im zur"ucklaufenden Pfad auftritt.
+Die erzeugten Bilder wieder in einer Tabelle:
+\medskip
+
+\begin{tabular}{l|c}
+ \verb+\Alternative{x1}{x2}+ &
+ \begin{Syntaxdiagramm}\dx\Alternative{x1}{x2}\dx\end{Syntaxdiagramm} \\
+ \verb+\Wiederholung{x1}{x2}+ &
+ \begin{Syntaxdiagramm}\dx\Wiederholung{x1}{x2}\dx\end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+F"ur Wiederholungen ist diese Konstruktion ausreichend, bei Alternativen
+sollten jedoch mehr als zwei Pfade m"oglich sein, dies wird durch die
+Umgebung \verb+Alternativen+ realisiert. Sie "ubernimmt "ahnlich obigen
+Befehlen zwei Parameter. \verb+x1+ enth"alt wie gehabt den ersten Pfad,
+\verb+x2+ hingegen den letzten der m"oglichen Pfade.
+Alle weiteren Pfade werden
+innerhalb der Umgebung getrennt durch \verb+\\+ angegeben, also wie in
+einer einspaltigen \verb+\tabular+--Umgebung, wobei auch auf die letzte
+Zeile ein abschlie"sendes \verb+\\+ folgt.
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Alternativen}+\\
+ \verb+ {x1}{x2}+\\
+ \verb+ x3\\+\\
+ \verb+\end{Alternativen}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}\dx
+ \begin{Alternativen}
+ {x1}{x2}
+ x3 \\
+ \end{Alternativen}
+ \dx\end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+\section{Setzen von Syntaxdiagrammen}
+Praktisch geht man nun so vor, da"s innerhalb der "au"seren Umgebung
+im einfachsten Fall eine Folge von
+Syntax--Variablen und Terminal--Symbolen aufgelistet wird. Hierzu
+verwendet man die nach rechts gerichteten Varianten.
+
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \TerSymR{xx}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \TerSymR{xx}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \SynVarR{xx}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \SynVarR{xx}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \TerSymR{xx}%+\\
+ \verb+ \SynVarR{xx}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \TerSymR{xx}%
+ \SynVarR{xx}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+Etwas anspruchsvoller k"onnen Syntax--Variablen und Terminal--Symbole in
+Strukturen auftreten. In diesem Fall sorgt die umgebende Struktur f"ur die
+notwendigen Pfeile, man verwendet also die ungerichteten Befehle
+\verb+\TerSym{}+ und \verb+\SynVar{}+:
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \Wiederholung%+\\
+ \verb+ {\TerSym{x1}}%+\\
+ \verb+ {\SynVar{x2}}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \Wiederholung%
+ {\TerSym{x1}}%
+ {\SynVar{x2}}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \Alternative%+\\
+ \verb+ {\TerSym{x1}}%+\\
+ \verb+ {\SynVar{x2}}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \Alternative%
+ {\TerSym{x1}}%
+ {\SynVar{x2}}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+In der \verb+Alternativen+--Umgebung m"u"sen die inneren Pfade selbst f"ur
+ihre Pfeile sorgen (hier: Terminal--Symbol x3).
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \begin{Alternativen}%+\\
+ \verb+ {\TerSym{x1}}%+\\
+ \verb+ {\SynVar{x2}}%+\\
+ \verb+ \TerSymR{x3}\\%+\\
+ \verb+ \end{Alternativen}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \begin{Alternativen}%
+ {\TerSym{x1}}%
+ {\SynVar{x2}}%
+ \TerSymR{x3}\\%
+ \end{Alternativen}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+Schlie"slich k"onnen auch Strukturen beliebig kombiniert und
+verschachtelt werden:
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \Alternative%+\\
+ \verb+ {\Wiederholung%+\\
+ \verb+ {\TerSym{x1}}%+\\
+ \verb+ {\TerSym{x1}}}%+\\
+ \verb+ {\SynVar{x2}}%+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \Alternative%
+ {\Wiederholung%
+ {\TerSym{x1}}%
+ {\TerSym{x1}}}%
+ {\SynVar{x2}}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+Die vielen Kommentarzeichen (\%) in der Eingabe sind nicht an allen Stellen
+notwendig. Es ist aber in jedem Fall einfacher alle Zeilen mit einem \% zu
+beenden, als jeweils zu "uberlegen, ob es eventuell weggelassen werden
+k"onnte.
+Sollte ein notwendiges \%-Zeichen vergessen werden, so erscheint an
+entsprechender Stelle im Diagramm ein Leerzeichen. Umgekehrt weisen solche
+Br"uche im Diagramm auf vergessene Kommentarzeichen hin.
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \TerSymR{xx}+\\
+ \verb+ \TerSymR{xx}+\\
+ \verb+\end{Syntaxdiagramm}+
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \TerSymR{xx}
+ \TerSymR{xx}
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+Sollte ein Syntaxdiagramm zu lang f"ur eine einzelne Zeile werden, so
+kann ein Teildiagramm zu einer Syntax-Variable zusammengezogen
+werden und diese in einem weiteren Diagramm aufgeschl"usselt werden.
+
+Ist dies nicht erw"unscht, so kann die \verb+Syntaxdiagramm+-Umgebung
+mit einem optionalen Parameter aufgerufen werden. Der Inhalt des
+Parameters ersetzt dann als Ende--Symbol den abschlie"senden Pfeil.
+Verwendet man den Befehl \verb+\Dots+ so kann man das Diagramm mit
+einem weiteren in der n"achsten Zeile fortsetzen. Dieses kann durch
+eine voranstehendes \verb+\quad+ etwas einger"uckt werden.
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}[\Dots]%+\\
+ \verb+ \TerSymR{x1}+\\
+ \verb+\end{Syntaxdiagramm} +\\
+ \verb+\quad+\\
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \TerSymR{x2}+\\
+ \verb+\end{Syntaxdiagramm} +
+ \end{tabular} &
+ \begin{tabular}{l}
+ \begin{Syntaxdiagramm}[\Dots]%
+ \TerSymR{x1}%
+ \end{Syntaxdiagramm} \\
+ \quad
+ \begin{Syntaxdiagramm}%
+ \TerSymR{x2}%
+ \end{Syntaxdiagramm}
+ \end{tabular}
+\end{tabular}
+\medskip
+
+Schlie"slich gibt es den Stapel Befehl der zwei Teile eines Diagramms
+untereinander setzt und sie durch einen r"ucklaufenden Pfeil verkn"upft.
+Oft ist das Aufteilen ohne r"ucklaufenden Pfeil allerdings sowohl
+einfacher als auch "ubersichtlicher.
+\medskip
+
+\begin{tabular}{l|c}
+ \begin{tabular}{l}
+ \verb+\begin{Syntaxdiagramm}%+\\
+ \verb+ \Stapel{\TerSym{x1}}%+\\
+ \verb+ {\TerSym{x2}}%+\\
+ \verb+\end{Syntaxdiagramm} +\\
+ \end{tabular} &
+ \begin{Syntaxdiagramm}%
+ \Stapel{\TerSym{x1}}%
+ {\TerSym{x2}}%
+ \end{Syntaxdiagramm}
+\end{tabular}
+\medskip
+
+\section{Weitere Hinweise}
+
+\begin{itemize}
+\item
+Einige Konstruktionen erzeugen nur dann Verbindungslinien korrekter L"ange,
+wenn auf den Pfaden Eintr"age mit der richtigen H"ohe bzw. Tiefe auftreten.
+Im ersten Beispiel zur Umgebung \verb+Alternativen + ist dies nicht der Fall.
+\item
+In der Datei syntax.tex sind einige Anmerkungen und eine kleine Liste
+m"oglicher Erweiterungen. Wer Zeit und Lust hat darf sich gerne austoben
+und das eine oder andere erledigen.
+\item
+Kritik, Anregungen und eigene Beitr"age sind in jedem Fall erw"unscht.
+Vielleicht finde ich bei ausreichendem Interesse sogar die Zeit noch ein
+wenig an diesem Paket zu basteln.
+\end{itemize}
+
+\section{Kontakt}
+
+\begin{verbatim}
+
+ --------------------------------------
+ Bernd Worsch
+ Doberanerstrasse 99
+ 18057 Rostock
+ bernd.worsch@stud.uni-rostock.de
+ email preferred
+ --------------------------biichi-ji---
+
+\end{verbatim}
+
+\end{document}
+
+
+
+
+
+
+
+
diff --git a/macros/latex/contrib/syntax/syntaxtest.tex b/macros/latex/contrib/syntax/syntaxtest.tex
new file mode 100644
index 0000000000..7bd833fdc7
--- /dev/null
+++ b/macros/latex/contrib/syntax/syntaxtest.tex
@@ -0,0 +1,77 @@
+% Dokument zum Test und zur Entwicklung von syntax.tex!
+%
+% Bernd Worsch 26.6.97
+%
+%
+
+\documentclass{article}
+\usepackage{german}
+\usepackage{fancybox}
+
+% Einbinden von syntax.tex
+\include{syntax}
+
+\begin{document}
+
+\title{Syntaxdiagramme fuer \TeX}
+\author{Bernd Worsch}
+\date{12. Mai 1997}
+
+\maketitle
+
+\begin{Syntaxdiagramm}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \TerSymR{xxx}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \SynVarR{xxx}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \Stapel{\TerSym{xxx}}{\SynVar{xxx}}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \Wiederholung{\TerSym{xxx}}{\SynVar{xxx}}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \Alternative{\TerSym{xxx}}{\SynVar{xxx}}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \begin{Alternativen}{\TerSym{xxx}}{\TerSym{xxx}}%
+ \SynVarR{xxx}\\
+ \SynVarR{xxx}\\
+ \end{Alternativen}%
+\end{Syntaxdiagramm}
+
+\begin{Syntaxdiagramm}%
+ \Wiederholung{%
+ \Alternative{%
+ \Stapel{\TerSym{Setzen}}%
+ {\TerSym{Sie}}%
+ }{\begin{Alternativen}%
+ {\TerSym{Das}}%
+ {\TerSym{Hand}}%
+ \SynVarR{einmal}\\
+ \SynVarR{von}\\
+ \end{Alternativen}%
+ }%
+ }{\SynVar{!!!!}%
+ }
+\end{Syntaxdiagramm}
+
+
+\end{document}
+
+
+
+
+
+
+
+