summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/syntax/syntax.tex
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/syntax.tex
Initial commit
Diffstat (limited to 'macros/latex/contrib/syntax/syntax.tex')
-rw-r--r--macros/latex/contrib/syntax/syntax.tex482
1 files changed, 482 insertions, 0 deletions
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--
+