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