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 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Οk™