
\section Ausdehnung und Auswertung der Kontrollsequenzen im Parsen


\subsection Der {\tt "}-Ausweg vom Parsen von B\"aumen

Wenn der Parser auf |"| trifft, wertet er den n\"achsten Token oder die n\"achste Gruppe aus, und verf\"ahrt weiter mit seiner Parserei. Eine Auswertung sollte kein Material beisteuern, da sie nicht geparsed wird. Aber eine Auswertung kann gewisse Parametereinstellungen ver\"andern, die wiederum einen Einflu\ss\/ darauf haben k\"onnen, wie das restliche Material gesetzt ist. Zum Beispiel:

\excentered
\CLboxed
\jtree
\! = {a} :{b}!! {c}
   "{\psset{scaleby=.5 1}} :{f} {g}.
\!! = :{d} {e}.
\endjtree
|endCLboxed
\hfil
\jtree
\! = {a} :{b}!! {c}
   "{\psset{scaleby=.5 1}} :{f} {g}.
\!! = :{d} {e}.
\endjtree
\xe

|\!« \dots\ ».|  etabliert keine eingeschlossene Gruppe. Die Ver\"anderung in der Skalierung besteht somit weiterhin auch f\"ur die darauffolgenden Unterb\"aume.


\medskip
Den selben Effekt erh\"alt man, wenn man die |"| wegl\"a\ss\/t, falls das Reskalieren au\ss\/erhalb des Parsens des Baumes stattfindet.\par\nobreak

\excentered
\CLboxed
\jtree
\! = {a} :{b}!a {c}!b .
\psset{scaleby=.5 1}
\!a = :{d} {e}.
\!b = :{f} {g}.
\endjtree
|endCLboxed
\hfil
\jtree
\! = {a} :{b}!a {c}!b .
\psset{scaleby=.5 1}
\!a = :{d} {e}.
\!b = :{f} {g}.
\endjtree
\xe

\subsection Kontrollsequenzausdehnung

Wenn der Parser auf eine Kontrollsequenz oder einem aktiven Schriftzeichen in einer Baumbeschreibung trifft, wird er durch das Ausgewertete ersetzt bevor er weiterf\"ahrt zu parsen. Die Ausdehnung wird geparsed ohne weitere Ausdehnung ihres eigentlichen Token, welches einen unendlichen loop verhindert, falls die Ausdehnung eine unausgebbare Kontrollsequenz erbringt.

\excentered
\CLboxed
\jtree
\def\Colon{:[scaleby=2.3]}%
\! = \Colon !a :{c} :{d} {e}.
\!a = :{a} {b}.
\endjtree
|endCLboxed
\hfil
\jtree[treevshift=-1ex]
\def\Colon{:[scaleby=2.2]}%
\! = \Colon !a :{c} :{d} {e}.
\!a = :{a} {b}.
\endjtree
\xe

\pstjtree\/ enth\"alt die Definition |\def\jtlong{[scaleby=2.3]}|, also k\"onnten wir auch schreiben:\par\nobreak

\excentered
\CLboxed
\jtree
\! = :\jtlong !a :{c} :{d} {e}.
\!a = :{a} {b}.
\endjtree
|endCLboxed
\hfil
\jtree[treevshift=-1ex]
\! = :\jtlong !a :{c} :{d} {e}.
\!a = :{a} {b}.
\endjtree
\xe

Diese Technik macht solchen Code deutlich transparenter. (\gettag[cheese]) auf Seite 7, zum Beispiel, w\"urde dann so geschrieben werden:

\medskip
{\leftskip=1.5em
\CL
\jtree[xunit=2.2em,yunit=1em]
\! =  :\jtlong !a :{is} {rotten}.
\!a = :{the} :{cheese} :{that} :\jtlong !b :{ate} {\it t}.
\!b = :{the} :{rat} :{that} :\jtlong !c :{killed} {\it t}.
\!c = :{the} :{cat} :{that} :{John} :{owned} {\it t}.
\endjtree
|endCL}

\medskip
Die vollst\"andige Liste von Parameterver\"anderungen, die in \pstjtree\/ in Makros enkodiert sind, sind:\par\nobreak

\CLframed \def\jtlong{[scaleby=2.3]}
\def\jtshort{[scaleby=.5]}
\def\jtwide{[scaleby=2 1]}
\def\jtbig{[scaleby=2]}
\def\jtjot{[scaleby=1.3]}
|endCLframed
\index*{+jtlong}\index*{+jtwide}\index*{+jtbig}\index*{+jtjot}

\vskip.7em
Freilich sollten Benutzer je nach ihren Anforderungen und Vorstellung die Makros ab\"andern.



