229 \rmindex{numerals}, \rmindex{strings}. They are denoted by \ndxbold{id}, |
229 \rmindex{numerals}, \rmindex{strings}. They are denoted by \ndxbold{id}, |
230 \ndxbold{var}, \ndxbold{tid}, \ndxbold{tvar}, \ndxbold{num}, \ndxbold{xnum}, |
230 \ndxbold{var}, \ndxbold{tid}, \ndxbold{tvar}, \ndxbold{num}, \ndxbold{xnum}, |
231 \ndxbold{xstr}, respectively. Typical examples are {\tt x}, {\tt ?x7}, {\tt |
231 \ndxbold{xstr}, respectively. Typical examples are {\tt x}, {\tt ?x7}, {\tt |
232 'a}, {\tt ?'a3}, {\tt \#42}, {\tt ''foo bar''}. Here is the precise syntax: |
232 'a}, {\tt ?'a3}, {\tt \#42}, {\tt ''foo bar''}. Here is the precise syntax: |
233 \begin{eqnarray*} |
233 \begin{eqnarray*} |
234 id & = & letter~quasiletter^* \\ |
234 id & = & letter\,quasiletter^* \\ |
235 longid & = & id\mbox{\tt .}id~\dots~id \\ |
235 longid & = & id (\mbox{\tt .}id)^+ \\ |
236 var & = & \mbox{\tt ?}id ~~|~~ \mbox{\tt ?}id\mbox{\tt .}nat \\ |
236 var & = & \mbox{\tt ?}id ~~|~~ \mbox{\tt ?}id\mbox{\tt .}nat \\ |
237 tid & = & \mbox{\tt '}id \\ |
237 tid & = & \mbox{\tt '}id \\ |
238 tvar & = & \mbox{\tt ?}tid ~~|~~ |
238 tvar & = & \mbox{\tt ?}tid ~~|~~ |
239 \mbox{\tt ?}tid\mbox{\tt .}nat \\ |
239 \mbox{\tt ?}tid\mbox{\tt .}nat \\ |
240 num & = & nat ~~|~~ \mbox{\tt-}nat \\ |
240 num & = & nat ~~|~~ \mbox{\tt-}nat \\ |
241 xnum & = & \mbox{\tt \#}nat ~~|~~ \mbox{\tt \#-}nat \\ |
241 xnum & = & \mbox{\tt \#}nat ~~|~~ \mbox{\tt \#-}nat \\ |
242 xstr & = & \mbox{\tt ''\rm text\tt ''} \\[1ex] |
242 xstr & = & \mbox{\tt ''~\dots~\tt ''} \\[1ex] |
243 letter & = & latin ~|~ symletter \\ |
243 letter & = & latin ~|~ \verb,\<,latin\verb,>, ~|~ \verb,\<,latin\,latin\verb,>, ~|~ greek \\ |
|
244 quasiletter & = & letter ~|~ digit ~|~ \verb,_, ~|~ \verb,', ~|~ \verb,\<^isub>, ~|~ \verb,\<^isup>, \\ |
244 latin & = & \verb,a, ~|~ \dots ~|~ \verb,z, ~|~ \verb,A, ~|~ \dots ~|~ \verb,Z, \\ |
245 latin & = & \verb,a, ~|~ \dots ~|~ \verb,z, ~|~ \verb,A, ~|~ \dots ~|~ \verb,Z, \\ |
245 digit & = & \verb,0, ~|~ \dots ~|~ \verb,9, \\ |
246 digit & = & \verb,0, ~|~ \dots ~|~ \verb,9, \\ |
246 nat & = & digit^+ \\ |
247 nat & = & digit^+ \\ |
247 quasiletter & = & letter ~|~ digit ~|~ \verb,_, ~|~ \verb,', ~|~ \verb,\<^isub>, ~|~ \verb,\<^isup>, \\ |
248 greek & = & \verb,\<alpha>, ~|~ \verb,\<beta>, ~|~ \verb,\<gamma>, ~|~ \verb,\<delta>, ~| \\ |
248 symletter & = & \verb,\<, (latin ~|~ latin~latin ~|~ greek) \verb,>, \\ |
249 & & \verb,\<epsilon>, ~|~ \verb,\<zeta>, ~|~ \verb,\<eta>, ~|~ \verb,\<theta>, ~| \\ |
249 greek & = & \verb,alpha, ~|~ \verb,beta, ~|~ \verb,gamma, ~|~ \verb,delta, ~|~ \verb,epsilon, ~|~ \verb,zeta, ~|~ \verb,eta, ~| \\ |
250 & & \verb,\<iota>, ~|~ \verb,\<kappa>, ~|~ \verb,\<mu>, ~|~ \verb,\<nu>, ~| \\ |
250 & & \verb,theta, ~|~ \verb,iota, ~|~ \verb,kappa, ~|~ \verb,mu, ~|~ \verb,nu, ~|~ \verb,xi, ~|~ \verb,pi, ~|~ \verb,rho, ~| \\ |
251 & & \verb,\<xi>, ~|~ \verb,\<pi>, ~|~ \verb,\<rho>, ~|~ \verb,\<sigma>, ~| \\ |
251 & & \verb,sigma, ~|~ \verb,tau, ~|~ \verb,upsilon, ~|~ \verb,phi, ~|~ \verb,psi, ~|~ \verb,omega, ~|~ \verb,Gamma, ~| \\ |
252 & & \verb,\<tau>, ~|~ \verb,\<upsilon>, ~|~ \verb,\<phi>, ~|~ \verb,\<psi>, ~| \\ |
252 & & \verb,Delta, ~|~ \verb,Theta, ~|~ \verb,Lambda, ~|~ \verb,Xi, ~|~ \verb,Pi, ~|~ \verb,Sigma, ~|~ \verb,Upsilon, ~| \\ |
253 & & \verb,\<omega>, ~|~ \verb,\<Gamma>, ~|~ \verb,\<Delta>, ~|~ \verb,\<Theta>, ~| \\ |
253 & & \verb,Phi, ~|~ \verb,Psi, ~|~ \verb,Omega, |
254 & & \verb,\<Lambda>, ~|~ \verb,\<Xi>, ~|~ \verb,\<Pi>, ~|~ \verb,\<Sigma>, ~| \\ |
|
255 & & \verb,\<Upsilon>, ~|~ \verb,\<Phi>, ~|~ \verb,\<Psi>, ~|~ \verb,\<Omega>, \\ |
254 \end{eqnarray*} |
256 \end{eqnarray*} |
255 The lexer repeatedly takes the longest prefix of the input string that |
257 The lexer repeatedly takes the longest prefix of the input string that |
256 forms a valid token. A maximal prefix that is both a delimiter and a |
258 forms a valid token. A maximal prefix that is both a delimiter and a |
257 name is treated as a delimiter. Spaces, tabs, newlines and formfeeds |
259 name is treated as a delimiter. Spaces, tabs, newlines and formfeeds |
258 are separators; they never occur within tokens, except those of class |
260 are separators; they never occur within tokens, except those of class |