diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-09 00:49:07 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-09 00:49:07 +0000 |
commit | 007f67a693e4d031fd3d792df8e4d5f43e2cb2e7 (patch) | |
tree | 90d17e00e572ecb1e24764b6f29c80e098b08d29 /Master/texmf-dist/doc/latex/syntax | |
parent | 950209b26f70aa87ed07c54f82a95b6f03b7c3a0 (diff) |
doc/latex
git-svn-id: svn://tug.org/texlive/trunk@84 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex/syntax')
-rw-r--r-- | Master/texmf-dist/doc/latex/syntax/README | 66 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/syntax/syntaxintro.tex | 424 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/syntax/syntaxtest.tex | 77 |
3 files changed, 567 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/latex/syntax/README b/Master/texmf-dist/doc/latex/syntax/README new file mode 100644 index 00000000000..78c68417198 --- /dev/null +++ b/Master/texmf-dist/doc/latex/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/Master/texmf-dist/doc/latex/syntax/syntaxintro.tex b/Master/texmf-dist/doc/latex/syntax/syntaxintro.tex new file mode 100644 index 00000000000..d7874970700 --- /dev/null +++ b/Master/texmf-dist/doc/latex/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/Master/texmf-dist/doc/latex/syntax/syntaxtest.tex b/Master/texmf-dist/doc/latex/syntax/syntaxtest.tex new file mode 100644 index 00000000000..7bd833fdc7b --- /dev/null +++ b/Master/texmf-dist/doc/latex/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} + + + + + + + + |