DIRECTORY IO USING [TokenKind], OneCasabaParser USING [State], Rope USING [ROPE]; OneCasabaParserPrivate: CEDAR DEFINITIONS ~ { ParserTable: TYPE = REF ParserTableBody; ParserTableBody: TYPE = RECORD [ unAnalyzedSymbols: SymbolCell ¬ NIL, nSymbols: CARDINAL ¬ 0, unAnalyzedTokens: TokenCell ¬ NIL, nTokens: CARDINAL ¬ 0, unAnalyzedActions: ActionCell ¬ NIL, nActions: CARDINAL ¬ 0, startState: OneCasabaParser.State ¬ 0, symbolTable: SymbolTable ¬ NIL, tokenTable: TokenTable ¬ NIL, actionTable: ActionTable ¬ NIL ]; SymbolTable: TYPE = REF SymbolTableBody; SymbolTableBody: TYPE = RECORD [ symbols: SEQUENCE nSlots: CARDINAL OF SymbolCell ]; SymbolCell: TYPE = REF SymbolCellBody; SymbolCellBody: TYPE = RECORD [ name: Rope.ROPE, code: CARDINAL, next: SymbolCell ]; TokenTable: TYPE = REF TokenTableBody; TokenTableBody: TYPE = RECORD [ idToken: TokenCell, tokens: SEQUENCE nSlots: CARDINAL OF TokenCell ]; TokenCell: TYPE = REF TokenCellBody; TokenCellBody: TYPE = RECORD [ name: Rope.ROPE, symbolCode: CARDINAL, kind: IO.TokenKind, spelling: Rope.ROPE, case: TokenCase, next: TokenCell ]; TokenCase: TYPE = {unique, generic}; ActionTable: TYPE = REF ActionTableBody; ActionTableBody: TYPE = RECORD [ actions: SEQUENCE nSlots: CARDINAL OF ActionCell ]; ActionCell: TYPE = REF ActionCellBody; -- not the most compact representation ActionCellBody: TYPE = RECORD [ state: OneCasabaParser.State, terminal: CARDINAL, -- symbol code action: Action, nextState: OneCasabaParser.State, -- for shifts ruleNumber: CARDINAL, -- for reductions leftSide: CARDINAL, -- symbol code for left side non terminal ruleSize: CARDINAL, -- number of right side symbols next: ActionCell ]; Action: TYPE = {shift, reduce, accept}; }... ΰ OneCasabaParserPrivate.mesa December 17, 1985 2:38:10 pm PST Copyright Σ 1987, 1992 by Xerox Corporation. All rights reserved. Sturgis, April 2, 1986 3:12:59 pm PST Bill Jackson (bj) January 27, 1987 10:15:28 pm PST Κ9•NewlineDelimiter –(cedarcode) style™šœ9Οk™