\input basic \input synchart \font K←CMSS8 % TIPSyntax.TEX \hbox to size {Syntax Diagram for TIP Tables \hfil Werner Winiger 30-Sep-81 11:53:08 } {\SyntaxChart \parindent 0pt % \def\LeftArrow{\vrule height 0.5vu depth 0.5vu width 2.5vu} % \def\RightArrow{\vrule height 0.5vu depth 0.5vu width 2.5vu} % \def\ArrowLine{\vrule height 0.5vu depth 0.5vu width 2.5vu} % \def\NoArrows{\def\LeftArrow{}\def\RightArrow{}\def\ArrowLine{}} % \T{<char>} yields a circular terminal node with the character % aesthetically placed, assuming CMTT8 is used. The 4.5417pt is the % height of plus and minus, and 4.2pt is the character width. % Colons and periods should be followed by a \CommaStrut to make % them line up with semicolons and commas. For parens, brackets, % and braces, put an extra \hss on the outer side to center them better. % This macro may be used for multi-character terminal symbols, but % \KW should be used for keywords. \def\T#1{\Terminal {\vbox to 4.5417pt{\vss\hbox expand -4.2pt{\hss#1\hss}\vss\vfilneg}}} \def\CommaStrut{\save0\hbox{,}\lower 1dp0\null} \def\KW#1{\Terminal{\:K \hskip-2pt#1\Strut\hskip-2pt}} % Use this for keywords. \def\N{\Nonterminal} % just an abbreviation. \def\Optional#1{\Alternatives{\Middle{#1}\Lower{\Empty}}} \def\Rept#1{\Repeat{\Upper{\BigLeftArrow}\Middle{#1}}} \def\Star#1{\Repeat{\Upper{#1}\Middle{\Empty}}} \def\LongStar#1{\Optional{\Rept{#1}}} \def\TwoAlts[#1|#2]{\Alternatives {\Upper{\TrimBot{#1}}\Lower{\TrimTop{#2}}}} \def\RAW#1#2{\Repeat{\Upper{#1}\Middle{#2}}} % Repeat Above With \def\RBW#1#2{\Repeat{\Middle{#2}\Lower{#1}}} % Repeat Below With \def\\{\Fil} \def\-{\QQLine} \def\semicolon{\T{;}} \def\comma{\T{,}} \def\colon{\T{:}} \def\rightarow{\T{=>}} \def\greater{\T{>}} \def\period{\T{.}} \def\Expression{ \RAW{\Empty}{\Alternatives {\Upper{\KW{AND}\\\N{TriggerTerm}} \Middle{\KW{WHILE}\\\N{EnableTerm}} \Lower{\rightarow\\\N{Statement}}}} } \def\ResultList {\Alternatives {\Middle{\N{ResultName}} \Lower{\N{Number}} \Lower{\N{String}} \Lower{\KW{Char}} \Lower{\KW{Coords}}} } \def\Key {\N{KeyIdent}\TwoAlts[\KW{Up}|\KW{Down}] } \def\Action {\Alternatives {\Middle{\Key} \Lower{\KW{Mouse}}} } \def\State {\Alternatives {\Middle{\Key} \Lower{\N{PredicatIdent}}} } \def\TimeOut {\Alternatives {\Upper{\KW{BEFORE}\\\N{Number}} \Middle{\Empty} \Lower{\KW{AFTER}\\\N{Number}}} } \noindent \hbox expand 50pt{ \Define{TIPTable} \N{Options}\\ \N{TriggerStmt} \EndDef} \par \noindent \hbox expand 50pt{ \Define{Options} \Optional {\KW{OPTIONS}\\ \Alternatives {\Middle{\TwoAlts[\KW{Small}|\KW{Fast}]\\ \Optional{\comma\\\N{Keys}}} \Lower{\N{Keys}}}} \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{Keys} \TwoAlts[\KW{PrintKeys}|\KW{DefaultKeys}] \Fil\EndDef} \par \noindent \hbox to size{ \Define{TriggerStmt} {\def\ArrowLine{\Empty} \KW{SELECT} \KW{TRIGGER} } \KW{FROM} \RAW{\semicolon}{\N{TriggerChoice}} \KW{ENDCASE} \Optional{\N{FinalChoice}} \Fil\EndDef} \par \noindent \hbox to size{ \Define{EnableStmt} {\def\ArrowLine{\Empty} \KW{SELECT} \KW{ENABLE} } \KW{FROM} \RAW{\semicolon}{\N{EnableChoice}} \KW{ENDCASE} \Optional{\N{FinalChoice}} \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{TriggerChoice} \N{TriggerTerm} \N{Expression} \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{EnableChoice} \N{EnableTerm} \N{Expression} \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{Expression} \Expression \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{FinalChoice} \rightarow\\ \N{Statement} \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{Statement} \Alternatives {\Upper{\N{TriggerStmt}} \Middle{\N{EnableStmt}} \Lower{\N{Results}}}\\ \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{TriggerTerm} \Action\\ \TimeOut\\ \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{EnableTerm} \State\\ \Fil\EndDef} \par \noindent \hbox expand 50pt{ \Define{Results} \RAW{\comma}{\ResultList} \Fil\EndDef} \par } \vfil\end