DIRECTORY IO, Rope; TDLexing: CEDAR DEFINITIONS = { ROPE: TYPE = Rope.ROPE; ROPEList: TYPE = LIST OF ROPE; Lexer: TYPE = REF LexerPrivate; LexerPrivate: TYPE = RECORD [ in: IO.STREAM, filterComments: BOOL, GetIndex: IndexGetter, tokenStack: LIST OF Token ¬ NIL, afterLast, beforeNext: INT ¬ 0 ]; Token: TYPE = RECORD [ kind: IO.TokenKind, rope: ROPE, afterPrev, before, after: INT ]; MakeLexer: PROC [in: IO.STREAM, GetIndex: IndexGetter ¬ NIL--means VanillaIndexGetter--, filterComments: BOOL ¬ TRUE] RETURNS [l: Lexer]; IndexGetter: TYPE = PROC [in: IO.STREAM] RETURNS [index: INT]; VanillaIndexGetter: IndexGetter; --IO.GetIndex[rawIn]-- GetToken: PROC [l: Lexer] RETURNS [token: Token]; GetPosition: PROC [l: Lexer, side: WhichPosition] RETURNS [position: INT]; WhichPosition: TYPE = {afterLast, beforeNext}; PeekToken: PROC [Lexer] RETURNS [Token]; ReturnToken: PROC [l: Lexer, token: Token]; GetRope: PROC [l: Lexer, kind: IO.TokenKind] RETURNS [rope: ROPE]; GetKwd: PROC [l: Lexer] RETURNS [kwd: ATOM]; NextIs: PROC [l: Lexer, rope: ROPE] RETURNS [is: BOOL]; NextIsSeq: PROC [l: Lexer, seq: ROPEList] RETURNS [is: BOOL]; NextIsA: PROC [l: Lexer, ropes: ROPEList] RETURNS [is: BOOL]; SkipTo: PROC [l: Lexer, oneOf: ROPEList]; ReservedWord: PROC [id: ROPE] RETURNS [reserved: BOOL]; PredefinedType: PROC [id: ROPE] RETURNS [is: BOOL]; SyntaxError: ERROR; }.  TDLexing.mesa Copyright Σ 1992 by Xerox Corporation. All rights reserved. Mike Spreitzer May 15, 1992 8:59 am PDT The token occupies indices [before .. after) in input stream. rawIn and cookedIn differ by the potential comment filtering. Discards it. Doesn't discard. Κΰ–(cedarcode) style•NewlineDelimiter ™code™ Kšœ Οeœ1™Kšœ=™=—K˜KšŸœ ˜7K˜KšŸœžœ žœ˜1šŸ œžœ!žœ žœ˜JKšœžœ˜.—K˜KšŸ œžœ žœ ˜(KšŸ œžœ˜+K˜Kš Ÿœžœžœ žœžœ˜BKšŸœžœ žœžœ˜,š Ÿœžœžœžœžœ˜7K™ —KšŸ œžœžœžœ˜=šŸœžœžœžœ˜=K™—KšŸœžœ˜)K˜Kš Ÿ œžœžœžœ žœ˜7Kš Ÿœžœžœžœžœ˜3K˜KšŸ œžœ˜K˜K˜——…—b V