<> <> <> <> <<>> DIRECTORY Express USING [ClientProcList, Symbols], IO USING [STREAM], Rope USING [ROPE]; ExpressToken: CEDAR DEFINITIONS ~ { ROPE: TYPE ~ Rope.ROPE; Symbols: TYPE ~ Express.Symbols; ClientProcList: TYPE ~ Express.ClientProcList; STREAM: TYPE ~ IO.STREAM; Token: TYPE ~ RECORD [rope: ROPE, kind: ATOM, size: INT]; TokenStream: TYPE ~ REF TokenStreamRec; TokenStreamRec: TYPE ~ RECORD [ stream: STREAM, buffer: LIST OF Token _ NIL, position: INT _ 0 ]; GetNextToken: PROC [ts: TokenStream, symbols: Symbols, cProcs: ClientProcList] RETURNS [token: Token]; <> <<>> PushToken: PROC [ts: TokenStream, token: Token]; <> <<>> TokenPosition: PROC [ts: TokenStream] RETURNS [position: INT] ~ INLINE { RETURN[ts.position]; }; <> RegisterToken: PROC [rope: ROPE, kind: ATOM]; <> TokenStreamFromIOStream: PROC [s: STREAM] RETURNS [ts: TokenStream]; <> <<>> }.