DIRECTORY IO USING [ STREAM, TokenKind ], Rope USING [ ROPE ]; OneCasabaParser: CEDAR DEFINITIONS ~ { OPEN Rope; State: TYPE ~ CARD16; SymbolProc: TYPE ~ PROC [ name: ROPE ]; UniqueTokenProc: TYPE ~ PROC [ name: ROPE, spelling: ROPE ]; GenericTokenProc: TYPE ~ PROC [ name: ROPE, class: ROPE ]; ShiftProc: TYPE ~ PROC [ state: State, terminalSeq: ROPE, newState: State ]; ReductionProc: TYPE ~ PROC [ state: State, terminalSeq: ROPE, leftSide: ROPE, ruleNumber: CARD16, ruleSize: CARD16 ]; AcceptanceProc: TYPE ~ PROC [ state: State, terminalSeq: ROPE ]; StartStateProc: TYPE ~ PROC [ state: State ]; LexicalAnalysisProc: TYPE ~ PROC [ stream: IO.STREAM, flushComments: BOOL _ TRUE ] RETURNS [ tokenKind: IO.TokenKind, token: ROPE, charsSkipped: INT32 ]; GenInfoProc: TYPE ~ PROC [ recordSymbol: SymbolProc, recordUniqueToken: UniqueTokenProc, recordGenericToken: GenericTokenProc, recordShift: ShiftProc, recordReduction: ReductionProc, recordAcceptance: AcceptanceProc, recordStartState: StartStateProc ]; RecordKipperedParserTableOnStream: PROC [ s: IO.STREAM, genInfo: GenInfoProc, getSourceToken: LexicalAnalysisProc _ NIL ]; RecordReadableParserTableOnStream: PROC [ s: IO.STREAM, genInfo: GenInfoProc, getSourceToken: LexicalAnalysisProc _ NIL ]; ParserTable: TYPE ~ REF ParserTableBody; ParserTableBody: TYPE; BuildParserTableFromKipperedStream: PROC [ s: IO.STREAM, getSourceToken: LexicalAnalysisProc _ NIL ] RETURNS [ table: ParserTable ]; BuildParserTableFromReadableStream: PROC [ s: IO.STREAM, getSourceToken: LexicalAnalysisProc _ NIL ] RETURNS [ table: ParserTable ]; GetSourceTokenProc: TYPE ~ PROC RETURNS [ tokenKind: IO.TokenKind, tokenText: ROPE, position: INT32 ]; ShowReduceProc: TYPE ~ PROC [ rule: CARD16, firstCharPosition: INT32, length: INT32 ]; ShowGenericShiftProc: TYPE ~ PROC [ code: CARD16, kind: IO.TokenKind, text: ROPE, firstCharPosition: INT32 ]; ShowNonGenericShiftProc: TYPE ~ PROC [ text: ROPE, firstCharPosition: INT32 ]; Parse: PROC [ table: ParserTable, getSourceToken: GetSourceTokenProc, showReduce: ShowReduceProc _ NIL, showGenericShift: ShowGenericShiftProc _ NIL, showNonGenericShift: ShowNonGenericShiftProc _ NIL ] RETURNS [ accepted: BOOL ]; GetReportStream: SIGNAL RETURNS [ s: IO.STREAM ]; UnRecoverableSyntaxError: ERROR; }. 4OneCasabaParser.Mesa (September 18, 1984 8:45:22 am PDT) Copyright Σ 1984, 1985, 1986, 1987, 1988, 1989 by Xerox Corporation. All rights reserved. Sturgis, April 8, 1986 4:25:19 pm PST Hopcroft, May 30, 1989 5:06:01 pm PDT Bill Jackson (bj) September 13, 1989 9:51:00 pm PDT Generating Tables defaulting the LexicalAnalysisProc (NIL) should result in a reasonable value, e.g. IO.GetCedarTokenRope Parsing generated by Parse in the event of an error. Clients should return the stream on which to place error messages. what OneCasaba does as a last resort! ΚP•NewlineDelimiter – "cedar" style˜codešœ8™8KšœZ™ZKšœ%™%Kšœ%™%Kšœ3™3K™—šΟk ˜ Kšœœœ˜Kšœœœ˜K˜—šΟnœœ œ˜&Kšœ˜ headšΟz™Kšœœœ˜K˜Kš œ œœœœ˜'Kš œœœ œ œ˜œ˜zKš ž!œœœœ>œ˜z—šŸ™KšΟb œœœ˜(Kšœœ˜K˜Kš ž"œœœœ(œœ˜…Kš ž"œœœœ(œœ˜…K˜Kšœœœœœ œœ œ˜fKš œœœ œœ œ˜VKš œœœ œœœœ˜mKš œœœ œœ˜NK˜KšžœœXœ+œ1œœœ œ˜ζK˜š žœœœœœ˜1Kšœ,™,KšœB™B—K˜šžœœ˜ K™%——K˜Kšœ˜K˜——…—φz